SCM Boot Camp in Tokyoに参加してきた #scmbc


(写真:会場の独特な雰囲気を切り取った印象的な一枚。URLはこちら。)

近年のソフトウェア開発においてSCM※1の重要性が増していますが、SCMで重要になってくる
「DVCS※2の概念・思想・パターン」を学習する機会はなかなかありません。
今後のソフトウェア開発に活かせるよう、講演と演習を通して「DVCSの概念・思想・パターン」を
学んでもらいたいと思います。
プログラミング言語に依存しない演習にし、プログラマーに限らず、
デザイナーや管理者などVCSの使用経験がある方であれば気軽に参加できます。
--------------------------------------------------
※1 SCMとは?
Software Configuration Management(ソフトウェア構成管理)の略です。
ソフトウェア開発プロジェクトの成果物を管理する方法論です。
※2 DVCSとは?
Distributed Version Control System(分散バージョン管理システム)の略です。
Git, Mercurial, Bazaarなどのアプリケーションが該当します。
今回のイベントで参加者の皆様に実際に操作してもらうアプリケーションです。

イベント告知ページの概要より。


ありそうで無かった『分散バージョン管理』のBoot Campイベント、『SCMBC(SCM Boot Camp)』がこの度初開催されました。

SCMBC開催に至るまでの経緯はこちら。主催者の一人であるなかやん・そるじゃー・ゆーき (TwitterID:@pocketberserker)さんが自らのブログにて詳細を綴っています。

この日はSCMBCに加え、品川で『Scrumbc(Scrum Boot Camp)』、『第5回 MongoDB 勉強会 in Tokyo』等有名且つ告知即定員達成の大人気イベントも同日開催。それぞれ分野としては別であり、2つまたは3つ全てに参加したい!けど出来ない!といった感じで悩まれた方々も多かったのではないでしょうか。ちなみに私は前回のScrumBootCampに参加していたので自然と第2回参加対象からは外れており、選択は比較的悩まずに済みました。(^-^*)

開催場所はおなじみのオラクル青山センター@外苑前。

そしてタイムスケジュール。

--第一部[講演]--
10:00〜10:15 開会および諸説明
10:15〜11:15 講演 (@bleis)
11:15〜11:30 休憩
11:30〜11:45 LT no.1
11:45〜12:00 LT no.2
12:00〜13:00 ランチ、ランチLT
13:00〜13:30 アイスブレイク、環境構築
13:30〜14:00 デモ

--第二部[演習]--
14:00〜15:00 演習
15:00〜15:30 レビュー+休憩

15:30〜16:30 演習
16:30〜17:00 レビュー+休憩

17:00〜18:00 演習
18:00〜18:30 レビュー、総括

--懇親会--
19:00〜21:00 会場にてビアバッシュ
21:00〜21:30 後片付け



第一部:開会及び諸説明(10:00〜10:15)

まずはイベント開始に先立ち、会場地図、諸施設利用、冷房などの説明及び注意がありました。会場を提供して頂き、ありがとうございました!

そして主催者ご挨拶。

きょんさんの講演/LTは『うさみみ』モードで行われるというのが最近では徐々に周知・認識されつつある今日この頃ですが、この日はその動きがスタッフ全体にまで拡大。冒頭挨拶の時点でまずはなかやんさんが挨拶に先立ちうさみみモード突入です(笑)

きょんさんの『Scrumbc, mongodb等、今日は色々な有名イベントが被っていますが、ここに来た人は勝ち組です』というコメントが印象的。独特のイベントの雰囲気・参加スタッフ・テクニカルサポーターの充実さから言えばその言葉もあながち嘘では無いと言い切れるのではないでしょうか。

第一部:基調講演(10:15〜11:15)

発表資料:

発表Ustream

名古屋からのご参加となったF#/Gitのスペシャリスト、@bleisさんによる基調講演です。講演詳細は上記スライド及びUst動画を御覧頂く方が確実ですが、自分なりにも一応メモ。

  • バージョン管理
  • バージョン管理:変更の履歴を管理すること。
  • 目的
    • いつでも過去のバージョンに戻せる
    • 変更に対するメタデータの格納
    • 変更の調査
  • Zip管理:過去のバージョンには戻せるけど、変更の意味は保持していない
    • バージョン管理とは言わない
  • 履歴コメント管理:変更の意味は保持しているけど・・・
    • これもバージョン管理とは呼べない
  • 二つとも採用したら…カオス!
    • バージョン管理を行うには、ツールの利用が不可欠
  • ツールを使わない言い訳
  • 『ツールを知る』と言うこと
    • 動作、コマンド
    • 概念、文化、思想
    • 実装
    • 『動作』さえ知っていれば一応使える。でも使いこなすには『概念』を知る必要がある
  • 概念
    • ツールごとに文化がことなるので概念も異なる
    • 基本的な操作は同じように見えても、細かいところは結構違う
  • ファイル名の管理方法
    • ファイル名の変更や移動をどう扱うか。
      • 管理しない
        • 本当に何もしない(CVS)
        • ヒューリスティックに解決(Git)
          • 利点:通常のファイル操作コマンドが使える。欠点:確実ではない。
        • 専用コマンドを用意(CVS/Hg等)
  • ファイル内容の管理方法
    • 差分を積み上げ(Svn)
      • 差分だけ格納するので空間効率が良い
    • スナップショットを格納(Git)
      • 特定バージョンの内容を高速に取り出せる
  • 協調方法
    • ロック(VSS)
    • マージ(その他)
    • ロック vs マージ
      • ロックはコンフリクトが発生しない・・・本当
        • ファイル内では存在しないけどそれ以外の場所では普通に発生。
        • 発生させないようにするには全体ロックしかない。
        • バイナリいじるのでない限りロック方式に利点はない?
  • 集中管理 or 分散
    • 集中管理(Svn)
    • 分散管理(Git,Hg)
    • 両方(Bazaar)
  • 分散バージョン管理システムの誤解
    • 1つのリポジトリが分散している
    • 最初そう思ってた
      • これは分散という言葉がまずい?
    • comittの度に他リポジトリに通知が行く
    • 最初そう思ってた
    • 一人だからdvcs要らない?
      • むしろ、一人の時に集中管理を使う利点はない
      • 一人でつかうとしてもdvcsにはメリットが多い
      • ここでも『分散』という言葉が誤解を招いている?
    • 業務では集中管理?
      • better集中型としてのDVCS
      • 向き不向きはあるけど、それは他ツールでも同じ事
      • 中央SVN、個人でDVCSというのも可能
      • 例えば、日本語ファイル名使いまくりのところにgit導入は難しい
  • バージョン管理する目的(再掲)
    • いつでも過去バージョンに戻せる
    • 変更に対するメタデータの格納
    • 変更の調査
  • DVCSでできるようになること
    • 自由なコミット
    • 自由なブランチ
    • 自由な歴史改変(git固有?)
    • 集中管理型では出来なかった事が出来るように!
  • トピックブランチ
    • dvcsではローカルブランチを気軽に作れる
    • 作業
      • hoge機能追加とか、バグ修正とか
        • dvcsならこんな小さなレベルでブランチを使っても苦にならない。
    • コミットの粒度
      • トピックブランチを使うと、コミットの粒度を細かく出来る
      • いつコミットすれば良いの?
        • 保存したということは、何かの区切りの可能性が高い
        • 最初のうちは保存のタイミングでやった事を顧みる(やりすぎ?)のもいいかも。
    • rebase 歴史改変
      • 枝分かれしてしまった状態の整理・解決方法の1つ。
      • rebase - dvcsならではの方法
        • 親歴史を、rebaseで書き換える。
          • 歴史を一本化
          • 分岐した情報が消えて、歴史が一本になる
      • rebase つかいどころ
        • トピックブランチ程度の小さなブランチに
        • 大きいブランチだときつい
      • rebaseの何が嬉しいのか
        • リポジトリの内容が綺麗
          • 作業が追いやすくなる
          • 歴史の二分探索がカチッはまる
  • BTS/ITSとつかう
    • トピックブランチを使い、コミットの粒度が細かくなり、ブランチのマージにrebaseを使うようになると…
      • どこからどこまでがどの作業のコミット?
      • BTS/ITSと一緒に使うのは1つの解決策
  • SVNとの比較
    • まだまだsvnは現役
    • 比較
      • コマンド
      • ブランチ
        • svnではブランチは自分の環境下に閉じない
        • dvcsではローカルブランチが作れる
    • 開発スタイル
      • リポジトリの用意
        • (Svn)サーバログイン、リポジトリ用意
        • (DVCS/Git)git init
          • より気軽に可能に。
      • コミットが失敗する可能性
        • (Svn)svn update:コンフリクト!ぎゃー
        • (DVCS/Git)の場合:コミットが失敗しない・他人に迷惑をかけない
      • マージの失敗
        • (Svn)svn merge -> 作業ミスってた。でもリポジトリはリモート、どうしようもない
        • (DVCS/Git)git merge -> ミスってもローカル範囲内。やり直し可能
      • リモートとのやりとり
        • (Svn)ほぼ全てがリモートとのやりとり
        • (DVCS)ほぼ全てがローカルで完結/限られたコマンドがリモートとやりとり(clone,push,pull等)
      • 注意点
        • 最小単位であるコミットレベルでリモート通信しているsvnと異なり、dvcsではコミットレベルではリモート通信が発生しないのっでpushしわすれる事も。
  • 運用例
    • 中央にsvn、個人でdvcs
      • 他の人に影響を与えずに導入出来る
      • コミットフックを使っている場合は要注意
      • SVNを介して、複数のDVCSを共存させる?
    • 作業ディレクトリに混ぜて使う
      • ブリッジが用意されていない場合など、最後の手段
    • 中央にもDVCSを使う
      • 中央もDVCSになっていた方が何かと便利
    • 階層構造を取らせる
      • 可能性は無限大!
  • 事例紹介
    • Jenkinsとの組み合わせ
    • ビルドが失敗するようなpushを弾く
    • 開発者が5人以下のチームで採用
    • 運用し出して1年経過
    • 新規案件を中心に5案件ほど回した
    • 小さいチームではうまくいくことがわかった
    • 大きいチームでは難しいかも?


と、一通り講演が終了して質疑応答へ。ここでの会話レベルは相当に高かったようで、特に文殊堂(TwitterID:@monjudoh) さんの質問等には皆さん関心しきりでした。 自分はどの方の質疑/応答も詳しく意味が飲み込めずポカンとしてましたが。(^^;) せめて意味が把握出来る位には力を付けていきたいですね。

第一部:LT no.1 / subversionユーザーのためのbazaar

関連Ust動画はこちら。

  • 自己紹介
    • python関連で活動
    • 『エキスパートpythonプログラミング』の翻訳者

エキスパートPythonプログラミング

エキスパートPythonプログラミング

    • バージョン管理遍歴の紹介
      • 学生時代:Svn
      • 転職後、個人でmercurial
      • 現在、仕事でbazaar
  • Bazaarはsvnユーザーに優しいDVCSです。
    • コマンド体系
      • svn checkout URL
      • bzr checkout URL
      • svn - bzrに置き換えるだけ。
    • ローカルでコミットするとき、先にチェックアウト元のブランチにコミットされる
    • pull & commit & push ではなくupdate & commitを使える
    • SVNと同じ使い勝手で使える。

    • 差分:
      • 微妙に体系ことなる。
    • ローカル変更の取り消し
      • svn revert
      • bzr revert
    • つまり移行は alias svn=bzrでほぼ完了。
  • ブランチとメインライン
    • svnマージと同じ形で扱える。
    • merみたいな使い方も出来る。
    • まるでsvnのような運用が可能
      • ブランチにメインラインがあり、グラフ構造の履歴ではなく一本線の履歴に集中できる
      • リポジトリは単なるデータ置場であり、普段使うコマンドは基本的にブランチを対象にする
      • ブランチを分ける必要がないときはチェックアウトが使える

    • ならsvnで良いんじゃね?
    • bzrとsvnの違い
      • 元のブランチと別の場所にブランチを作れる
      • 履歴が残る
    • 会社での啓蒙・教育も楽
      • 昼の仕事も夜の仕事も…(謎)
    • いいでしょ?Bazaar

第一部:LT no.2 / MacHg on Lion

関連Ust動画はこちら。

  • 進める予定でしたが、lionへのインストール出来てませんでした…m(__)m
    • なので本日はMacHg on Lion改め『TortoiseHg on Lion』で。
  • 自己紹介
    • gae/python
    • titanium(絶賛絶望中!)
    • tortoseHgの開発・翻訳メンテなしてました
    • 最近サボっている…
  • リポジトリ作成、実演デモ。

第一部:LT no.3 / Gitの基本的なことを何か話す

発表資料はこちら。

以下メモ。

  • gitを始める前に準備
    • まずは入門Gitを手元におく

入門Git

入門Git

  • gitk
    • ブランチをグラフ表示できる
  • gitで扱うファイル形式
    • blob
      • gitではファイルをぶろぶオブジェクトで管理している
    • tree
      • ディレクトリ構成をツリーオブジェクトで管理している

  • commit
    • ファイル、ディレクトリ構成以外に…
      • どのrevから作られたか?
      • 誰が変更したか?
      • 変更した理由は何か?
  • tag
    • ごめんなさい、資料用意してないです…
  • 各オブジェクトの関係
  • gitはスナップショット管理している
  • マージとリベースの違い
  • リベースの歴史概念の話

第一部:ランチ・ランチLT(12:00〜13:00)

事前に用意されていたお弁当を頂き、束の間の休息。程良い分量で美味しく頂きました。

また昼食時間後半には、文殊堂(TwitterID:@monjudoh) さんによる即興LT。スライド資料無し、ほぼフリースタイル?で語られる内容はこれまたハイレベルなものでした。LTのUst動画(音声)は以下。

(追記)文殊堂さんLTの詳細がBlogにUPされていたのでリンク致しました。

第一部:アイスブレイク、環境構築(13:00〜13:30) / デモ(13:30〜14:00)

事前に用意されていた/イベント期間内に告知のあった情報を元に、各自環境構築作業を進めました。

ところがGitについては会場のネットワーク環境の都合上、意図した環境・構成が実現出来ないのではないかという疑惑が浮上。最終的にはGitHubにセントラルリポジトリを作成し、そこに対して各種作業を進めていくという形に落ち着きました。(あ、自分はちなみに『Git』を選んでいました)

デモ実演に関してはToshiyuki Kawanishi(TwitterID:@tosikawa) さんと[http://twitter.com/#!/sinsoku_listy:title=神速(TwitterID:@sinsoku_listy)さんによるGit環境構築を想定。…していたのですが、環境構築の問題もあり結構ドタバタした感じになってしまいました。時間の最後には『すいません、神速さんがあまり使えなくて』というヒドスwなコメントもありましたが、実際の職場でも隣同士(!)という仲もあっての、愛のあるDISだったのでしょう。と理解(笑)

その時のUst動画はこちら。

…ちなみにここまでの講演・LTを経ていく過程で、ほぼ全員が講演/LT時にうさみみを装着し、当日中にはうさみみさんが10人近くに増殖するという異様な雰囲気に発展(笑) 当エントリ冒頭の写真がその風景です。

ちなみにうさみみをつけたスタッフの方曰く、建物同階、別の会場で開催されていた勉強会の参加者と廊下ですれ違った際、二度見され『(うさみみ)?ねぇ何あれ?』的な振る舞いをされたそうです(笑) 実際の会場ではそんな方々が真剣に、超ハイレベルなDVCS議論を交わしていた訳なのですが、外部から客観的に見ると何と怪しい会なのだろう、という風に感じるのは無理のないところなのかも知れません(笑)

第二部:演習&レビュー その1(14:00〜15:30) / その2(15:30〜17:00) / その3(17:00〜18:30)

演習の課題としては『グループで対象となるDVCS環境のチートシートを作成し、リリースする』というもの。カンバン形式でタスクを洗い出し、管理をしながらDVCS環境上で作業を進めて行く流れです。

カンバンについては以下を参照。

…すいません。ここからはスゴイざっくりな内容になります(笑)

というのも、今回SCMBCに参加するにあたって自分なりに基礎を学んでから臨もうと思いつつも、諸々で忙しくて時間が取れず結局インストールしてちょろっと触った程度しか出来ず。

スタンスとしては

・バージョン管理(Subversion)は使っているが、GUIで非常にシンプルな扱い方しか(現場などでは)しておらず、
  正直熟知しているとは言い難かった(『使っている』が『分かっている』訳ではない)
・DVCS(分散バージョン管理)については、『興味がある』という点のみで参加。
  概念や各種コマンドなども殆ど知識がない状態で臨んだ。

状態でSCMBCに挑む形となりました。

そんな状態で臨んでいた訳なので、ひとたび問題が発生すると何をしていいのか分からなくなり、グループ内の有識者の方々や各スタッフの方々にサポートして頂くも基礎的なコマンドや概念を理解しきれていない状態であったので十分理解・吸収しきれない形に。DVCSのスペシャリストがこんなにも大勢居て何でも聞けるのに、自分のスキルが足らない為に思うように聞くことが出来ない〜!むぉ〜〜〜! ヽ( `Д´)ノ となり、次第にテンションも落ちて行きお手上げ状態となってしまいました(笑) ( ´-ω-`) ショボーン

グループで一緒になられた皆さん、色々お手数をお掛けしてしまい申し訳ありませんでした&丁寧に教えて頂き、ありがとうございました!


…とは言えこれは完全に自分の準備不足によるもの。@bleis さんの講演でも『(DVCS毎の)概念を知る事は大事』とありましたがまさにそこが抜け落ちており、そういった概念やコマンド操作を知らない状態ではこうなることは目に見えていたのかも知れません。参加する機会を得たのに、実に勿体無い事をしてしまったと思いました。(>_< )

今回のお題は『チートシートを作ること』でしたが、課題は別の内容で演習時に各種環境のチートシートが紙で配布されていると個人的には超助かったかもしれないです。知識が浅かったので『あれ、次は何のコマンド打てば良いんだ?』ってなりまくりだったので。

あとは主にSCMBCに臨む上でのDVCS初心者・初学者に対しての取り組み方、開催当日のそういった人達についての対応・ケア等をどうしていくか、という点でしょうか。この辺りについては、主催者であるきょんさんやなかやんさんと直接お話したりTwitter上でやり取りしてたりしたので詳細はここでは省きますが、如何にDVCS初心者の参加のハードルを下げ(or調整して)、スムーズに当日の作業を進められるようにするのか、というのは大きなテーマなのかなぁと思いました。


まぁ何にせよ今回が記念すべき第1回目。参加するまでは見えてこない部分も多く課題は沢山出ていた模様でした。このような試み(DVCSをテーマとした勉強会、かつ各DVCS間での交流も兼ねたイベント)が成された事自体とても素晴らしい事であり、興味を持って参加したDVCS初学者だけではなく、各DVCSを業務で扱ってたり、精通されている方々にとっても非常に意義のあるものとなったようです。

中にはコミッタや著者等その道のハイレベルな人がグループの半数を占めると言った何とも贅沢なところあったり、隣の勉強会に参加されていたMercurialのスゴイ方(すみません、詳細を存じ上げておりませんのでこんな書き方しか…)がひょこっと顔を出され、その流れで次回参加を取り付けたり…DVCSの知識が浅い自分にとってはあんまりピンと来てませんが、ある程度の知識レベルを備えた方であれば何とも贅沢すぎるひとときとなっていたようです。


演習自体は自分の準備不足もあり消化不良気味でしたが、勉強会の雰囲気自体は非常に良く、とても素晴らしいものだったと思います!

休憩も少し多めに取ってあったり(15〜20分)、途中スイーツ等も多めに提供されていたり(写真を取り損ねてしまいましたが、他にもシューアイス等がありました!)、そこかしこで各DVCSの精通者が雑談や論議を繰り広げていたり(しかもうさみみ着けて!)…他の勉強会とは一線を画し、かつクオリティの高いこのようなイベントが開催出来たのも主催者の努力の賜であり、彼等へのリスペクトが成せたものなのではないでしょうか。


また、今回のSCMBCのトピックの一つとして、

というような流れがあり、参加者及びTL閲覧者の方々の間で 『(;`・Д・´) ガタガタッ!』と騒然となっておりました。

実際この格好をされていた方はカヲリ(TwitterID:@kaori_t_spica) さんだった模様で、DVCSはMercurialを選択し講演・演習に参加されてました。各種セッションやLTの時間終了後『ご主人様、お時間です♪』の掛け声も担当されていました(笑)

時折写真撮影にも応じてたりも。一枚だけこちらのブログにもUPさせて頂きたいと思いますが、他にも撮影に成功された写真もあると思いますので、興味のあるかたはTL/Togetter等を調べてみては如何でしょうか(笑)


懇親会(19:00〜21:00)

予想以上に凹み度合いが大きく、また翌日にもTDD Boot Camp 東京 1.6が控えていた為、何人かとご挨拶を済ませてこの日は帰宅。Blog上でブクマやスターを度々頂いていたYuta Shimakawa(TwitterID:@banana_umai) さんと初めて実際に顔を合わせ、お話する事が出来ました。いつもありがとうございます!


帰り際には、『やはり基礎から勉強せにゃならんな!』という事で以下の書籍を購入。

入門Git

入門Git

この書籍、実は今回のSCMBCで、Git関連のスタッフ・テクニカルサポートの方々が揃って携行し、事ある毎に開いて参照されていました。それだけ中身が素晴らしく、実用に耐えうる本なのですね…自分もこれからGit(及びその他のDVCS)について少しずつ知識を蓄えていきたいと思います。