SCMBootCamp in Tokyo 2に参加してきた #scmbc


(※写真:懇親会 闇LTで先陣を切る首謀者:@kyon_mm氏。)


前回2011/07/30に行われた第1回に引き続き、今回第2回も参加してきました!

前回は同日開催イベントとして『Scrum Boot Camp Tokyo』や『第5回 MongoDB 勉強会』などといった有名イベントが被るという事態がありましたが、今回も前回同様にメジャーイベントが数多く被るという状況に。

前回講演では『SCMBCに来た人はある意味勝ち組です』という発言が冒頭に飛び出しましたが、今回はこのメンツを相手果たしてに勝てるのでしょうか?




会場も前回同様、オラクル青山センター@外苑前。昨年10月からこの地には幾度と無く訪れているよな〜と思い、過去の履歴から数えてみたら今回でちょうど10回目のオラクル青山センター来訪となっていました。今回で(2010年10月以降)67回勉強会参戦してる事になるので、ほぼ7回には外苑前に来ている計算になります。そりゃ多いわな(笑)


講師陣については、今回第2回も前回に負けず劣らず…というよりも前回よりも更に濃厚な方々達が集結しておりました。以下にDVCS別に講師陣の一覧を。(こくちーずサイトから転載)


私個人的には、今回はBazaarで参加しました。前回はGitで参加したのですが携行PCのOSがWindows7であったので例の如く文字化け・エンコードに関する問題に悩まされ、演習に関してはいまいち消化しきれていない部分がありました。幾らか解決策を試して見たのですが難解or出来たとしても(私個人的には)進めるためのハードルが多過ぎて心が折れそうになったので(笑)、その辺りの影響が一番少ないであろうDVCSを…という事でBazaarを選択。前回の反省も踏まえて可能な範囲で調査・予習的な作業を進めて臨みました。(後述しますがBazaarのスタッフの方々による資料のお陰でだいぶ予習及び理解を進めて臨む事が出来ました。ありがとうございます。)


では以下参戦メモ。


来館&タイムスケジュール

今回来訪時に受け取るものの一つとして『名札』があったのですが、その名札用紙についてはカヲリ(TwitterID:@kaori_t_spica)さんのお手製のものが配布されました。DVCSによって、ワンポイントのマーク柄が異なっているというオシャレなものとなっております。


また、当日になって詳細が明らかとなったタイムスケジュールに関してはこんな感じ。

10:00 開会
10:20 基調講演
11:15 (休憩)
11:30 講演:Git入門
11:50 (休憩/部屋再構成)
12:00 講演:Hg/Bazaar入門
12:20 (昼休憩)

13:20 演習説明
13:30 演習1
14:50 (休憩)
15:10 演習2
16:10 (休憩)
16:40 演習3
17:40 (休憩)

18:00 講演:DVCSの次の一歩
18:20 KPT(ふりかえり)
18:30 解散

18:50 懇親会&闇LT
21:00 懇親会&闇LT 終了

開会

SCMBC2と同日開催のメジャーイベントが多い事について触れ、『SCMBC2告知の後、楽天カンファレンスが同じ日にやると聞いて「あ〜、俺そっち行きたいわ〜」と思いました』と冒頭から驚きのコメント。まぁ〜実際はそう思うような日も最近多くなってはいますよね〜。それだけ勉強会やイベントが盛り上がってきているという事で。嬉しい悩みなのではないでしょうか。

ちなみにこの日は写真にあるように「うさみみ執事」の風貌な首謀者でした。

  • 講師の人に拍手!
  • 会場提供して頂いたオラクルさんに拍手!
  • 今日参加することで、明日からDVCS(Git/Mercurial/Bazaar)が使えるようになります!

そして今回の基調講演は、前回SCM Boot Campでの開催時のやり取りが縁で今回参加する運びとなった(前回開催時の会場の隣の会場で別イベントに参加されていた藤原さん→SCMBCの存在を知り開催中にひょこっと顔を出す→Mercurial本著者のSCMBC来訪に一同騒然→次回SCMBCの参加を内諾)、藤原 克則さんによるものになります。


基調講演:『分散リポジトリ型時代のソフトウェア構成管理』

SCMBC的には何と言っても下記『入門Mercurial』の著者!という事で参加を心待ちにしておられた方多数。満を持しての基調講演となりました。

入門Mercurial Linux/Windows対応

入門Mercurial Linux/Windows対応

講演内容につきましては、上記の資料をそのまま読んで頂くのが最善かと思われます。とても読み易く且つ内容も充実したものとなっておりますので、この資料だけでも今回の講演及びイベントが行われた価値があるのでは、と思います。後半のユースケースについても様々な事例が紹介されており、現場に分散バージョン管理を適用させる際の実践時の参考資料としても大いに役立つものになっております。


以下に見出しレベルでの(目次的な)まとめを記しておきます。

  • 自己紹介
    • 情報発信系活動
    • コミュニティ系活動
  • 本資料に関して
  • 構成管理とは?
  • 構成管理導入のメリット
    • 「作業記録」としての構成管理
      • 良くある誤解(1)自分一人の作業だから、構成管理なんて必要無い
        • バックアップとしての履歴記録
        • 履歴情報の利用
        • 「実績」記録によるライフログ
  • 共同作業における調停
    • 良くある誤解(2)SCM ツールがなくても、同等の事は出来るでしょ?
  • 履歴データの完結性
    • 良くある誤解 (3):分散リポジトリ型は、 常にリポジトリ同士が連携するに違いない!
    • 良くある誤解 (4):各リポジトリは「完全な履歴情報を持っている」らしいので、 常に最新の情報を得られるんでしょ?
    • 良くある批判 (1):他のリポジトリとの相互連携を、 明示的に指定するのは面倒だ!
    • 良くある批判 (2):リポジトリの複製は、 同一内容のファイルが散在することになるので、 ディスク消費量が増えてしまう!
  • リポジトリの連携
    • 良くある批判 (3):平行作業の履歴統合作業が面倒臭い!
    • 良くある批判 (4):平行作業の履歴統合のために、余計な履歴が増えてしまう!
    • 良くある批判 (5):余計な履歴が増えてしまうと、 ログが汚れてしまう!
    • 良くある批判 (6):余計な履歴が増えてしまうと、 ディスク消費量が増えてしまう!
  • リポジトリ連携の対称性
    • 第2世代・第3世代SCMの比較
    • 履歴データの転送契機となる「要求」
      • 連携先から、転送契機側に取り込む (pull)
      • 転送契機側から、連携先に反映させる (push)
  • 小さく始めて大きく育てる
  • まとめ
    • 第3世代の SCM ツールで、みんな幸せ


また、最後には質疑応答もいくつかなされていましたのでその辺もメモ追記。

  • [Q]:藤原さん個人としては、職場でMercurialを使い始めたのはいつ頃?またバージョン管理利用遍歴は第1〜3世代と移り変わってきていたのか。
  • [A]:Mercurial使い始めたのは職場的には第2世代。
    • 日本語ファイル名のワードファイルの扱いに悩まされていた。
    • CVSからいっきに第3世代へ。
    • 第2世代使ってると第3世代に妙な先入観が入ってしまうかも。
  • [Q]:push onlyリポジトリに対して複数のpushが起きた場合のマージ問題はどう解決?
  • [A]:最初にマージした方が責任取ってなんとかする。
    • validationした時点で対処するか、マージしてからvalidationするか。
      • (補足 by @kyon_mm)各自端末でpush only repoを用いた運用。自動マージさせる流れに。エラーならコケる。最初にマージした人がババ引く形。


講演:Git入門

  • 多人数開発
    • svnでは1リポジトリ複数ツリー
      • コンフリクト発生の余地生まれる。
  • gitのオブジェクト
    • 全てイミュータブル:作成されたら破棄されない限り変更されない
    • [Blob]:ファイルの中身
      • ファイルの中身だけを表す
      • ファイル名はtreeオブジェクトが保持
      • treeやcommitをまたいで参照される
      • 差分ではなく、スナップショット
    • [Commit]:コミット内容
      • コミット:リビジョンの記録
        • コミットしたひと、時間mメッセージ
        • 親コミット
        • ルートtree
      • 親コミット
        • 通常ひとつ
        • マージした場合、複数
        • 初回コミットにはない
        • 親子ミットを辿る事で歴史が分かる
      • コミットメッセージ
        • 普通にgitを使うとコミットメッセージ必須
        • 一行目:概要/二行目:空白/三行目:詳細
        • コミットの様子:図例を用いた解説。
    • オブジェクトのハッシュ値
      • 全てのオブジェクトとのSHA-1ハッシュ
      • 比較は全てハッシュ値で行う
      • 世界中で事実上の一意ガ担保される
      • リモートとの通信でもハッシュ値でオブジェクトについて判断出来るノで高速、低負荷
    • ブランチ
      • commitオブジェクト(ハッシュ値)へのポインタ
        • 作成削除が高速
      • commitオブジェクトの親コミットを辿ることでブランチが表現出来る
    • ブランチの切り替え
    • ブランチの使い方
      • 最初はmaster
        • git branch
        • git checkout
      • フィーチャーブランチ(トピックブランチ)
      • 様々なプラクティス
    • ブランチのイメージ
  • 最後に
    • オブジェクトを理解し
    • ブランチの考え方を理解し
    • コミットグラフを頭に思い浮かべることが出来れば勝てる!

という感じでGit入門完了。Gitについては同じく@bleisさんの以下のスライドが非常に参考になります。


講演:Hg/Bazaar入門 (→Bazaar入門を選択)

Git入門セッション終了後会場間仕切りの時間が設けられ、Mercurial/Bazaar入門セッションを同時開催するという形となりました。

今回は個人的にはBazaarを選択。

資料としては事前に公開されていたものがあるので、それらを読みつつ事前に予習を行っていました。


セッションで用いた資料は以下。こちらの資料も非常に分かり易い内容となっております。

基本的には上記の内容と大差無いのですが、個人的に取ったメモも。

  • 作業コピーに関する説明
    • svnのを連想してもらえればそう違わないかと。
  • 構成の自由度がbazaarの魅力。
    • わかりにくいという指摘もあるが…
  • リポジトリという言葉が、bzrの場合ちょっと特殊。
    • フォルダみたいなもの?
      • →作業はブランチに注目して行う。
  • .bzrの中身について
  • 作業フロー
    • 特徴:svnのような集中型でも使える。

  • メインラインについて
    • ブランチ上で注目すべきメインのライン。
  • コミットコメントについて
    • Bazaarの場合、メインラインを見て把握出来るように記述しましょう。
  • ブランチの作法について
    • Git資料見ると良いよ!



上記つぶやきでも言及されている『サガ』ネタは以下のページなどを参照。いや〜懐かしい。(´∀`)

昼休憩

今回もお弁当を注文、会場内で歓談しつつ食事を取る形に。計3〜4種類位はお弁当の種類があったのかな?その中から今回は豚キムチ系のお弁当をチョイスし頂きました。量的にも程々で美味でした。

この日は日中から雨の降るお天気。いつもなら眺めの良い景色も雨のせいで大分霧掛かったものとなっておりました…。


演習説明


今回の課題も、前回同様『DVCSのチートシートを作成』。

『誰でも出来るSCMBCなので』『HTML推奨で』等と前置きがありつつ、課題の進め方はチームに一任される形に。

そしてこの頃から、開始時には2人しか居なかったうさみみメンバーが加速度的に増えて行きます・・・(笑)

※うさみみについては後述するコーナーにて写真を一挙公開。

演習(約1時間程度の演習を述べ3回)

チームとしてはBazaarで今回参加しており、2つあるBazaarチームのうち、TAとしてINADA Naoki(TwitterID:@methane) さんについて指導頂く形でチーム作業を進める事に。


詳しい内容については省きますが、まず1回目の演習タイムは『TAの@methaneさんによるハンズオンワークショップBazaar入門』的な時間となりました。1台のマシンの前に集まり、解説を交えながらBazaarの基礎的な部分について学んで行くという内容。

  • ブランチとチェックアウトの違い
  • そもそもの考え方がGitやMercurialと異なる事
    • 例えばメインライン・サブラインについて等。
  • Subversionで慣れている人だとBazaarの考えは受け入れやすい
  • 逆に、GitやMercurialで慣れているとBazaarに戸惑う事も多い
  • メインラインを汚さないという意識が強い側面もある
    • とはいえ、メインのラインを置き換えてしまう操作も普通に出来てしまう
    • 設定如何で回避する方法はあるので、それで予め設定しておく事で悲劇も防げる(bzr init実行時のappend revision onlyオプション)
    • 歴史改変を行わなくても、綺麗な履歴を作る事が出来る

環境としては、Amazon EC2上に@methaneさんが用意して頂いたBazaarリポジトリにHTTPでアクセスする方式を採りました。SSH等アクセス制限ついては今回は特に考慮せず。

また、仕組みとしては以下のようなものを使った形で演習が進められました。それぞれをまだ十分に理解・把握していないのでキーワードのみメモする形で。


休憩を適宜挟んでの残り2つの演習時間は、従来の目的である『チートシート』を作成しつつ、適宜作業の進め方について@methaneさんに聞く形で。『メインラインを綺麗な形で保つ』というルールというか意識があったので、チームとしても『マージ合戦』や『カオスな状態を作り出してそれを解決する』という所まではそんなに意識が行かなかった部分もあったかも。

というより、作業を進める傍らで繰り広げられる『うさみみTA』達の語り合いに耳を傾けてしまった部分も多いかも(笑)


こちらが作業ログ記録。(メインラインのみの表示)

そしてサブラインも含めた作業ログ記録。


チーム作業を通じて、Bazaarを用いた分散バージョン管理の基礎を学ぶことが出来ました。@methaneさん、ありがとうございました!





演習レビュー(計2回)

休憩の合間を利用しつつ、各DVCSで代表者チームによる発表・レビューが行われました。計2回レビューが行われ、Git→Mercurial→Bazaar→Gitと計4チームが発表。

うちらのBazaarチームは左程乱れたラインでは無かったのですが、GitやMercurialのチームのログ結果は(敢えてカオスな状態を作り出した部分もあったりしたとは思うのですが)、結構なカオス度合い。

Mercurialは複雑さがかわいい』『Mercurialはゆるふわ』等と言った@kyon_mmさんの名言(迷言)?もこの辺りの複雑さ(及び複雑さに対する観点)によるものなのでしょうか。演習・レビューを通じて各DVCS間の宗教戦争・DISり合い合戦は聴いていてとても楽しく、聴き応えのあるものばかりでしたね。


講演:DVCSの次の一歩

LT形式・ボリュームで、各DVCS毎のセッションが実演・レビュー終了後に設けられていました。

仕事でbzrを使う

  • 自己紹介
  • which I choose bzr
    • svn以外を使ってみたい
    • Mercurialに手を出す
      • ファイル名unicodeじゃないんだ・・・
    • Bazaarにのりかえる
      • めざせ『みんなのバージョン管理』

  • Bzr関連の活動
    • TortoiseBZR:今は岩田さんにおまかせ(メンテナ)
    • i18nの初期実装中(翻訳者募集中)
    • 翻訳
  • KLabでのbzr導入
    • 分散型使ってみたいね
    • コミッタいるよ
    • じゃあbzrで
    • 血生臭い戦いは無かった
  • bzrにして良かったこと
    • 新人教育が必要
    • 教育コスト:
      • (中略)svnとだいたい一緒だから。
    • コマンド体系
    • 新しいツールの使い方覚えたくない人にも優しい
  • 耐障害性
    • 停電
    • オフィス引っ越し
    • マシン壊れた
    • バックアップは沢山。
    • 臨時サーバ構築も簡単
    • オフラインでも使える
    • ローカルで実験ブランチが作れる
  • 導入戦略しましょうか
  • 必要なもの
    • 熱意
    • 仲間
  • おすすめの方針
    • 1.まずは使ってみる
    • 2.味方を社内に作る
    • 3.経験値をためる
    • 4.小さいチームで勝手に導入
    • 5.おおきいチームで勝手に導入
  • 説得
    • svnと一緒だから新しいコマンドを覚えればすむよ〜
  • サーバーを建てよう
  • Good Luck!
gitのネクストステップに向けてのQ&A

Gitスタッフ全員登壇による、事前アンケートを基にした回答を時間一杯まで。

  • Q.BazaarやMercurialに負けないGitの良いところは?
    • (@bleis):(質問に対して)『怖いですね〜』→速度面。
    • (@sinsoku_listy):githubを覚えてソンは無いと思います。
    • (@tomy_kaira):普通のまともなエンジニアなら使えると思うので勉強しましょう。
    • (@tosikawa):個人的に自由だと思っている。色々出来ちゃって怖い部分もあるが、Gitが自由にやって一番安全なのでは。
  • Q.合わせて使いたいgitとの連携ツールは?
    • (@bleis):Redmineなどのバグトラッキングシステム。
    • (@sinsoku_listy):.filesの管理。
    • (@tomy_kaira):gitk。ビジュアル面で使えるツール。
    • (@tosikawa):gitkは絶対。マージツールをちゃんと設定しよう。エディタを使わずに。

(ここで時間一杯。次のMercurialにバトンタッチ)

mercurial Queue(MQ)の進め


  • 何が嬉しいのか?
    • 対象リビジョンの上に、別な変更を加えられる
  • 気分的には:
    • メモ書きトレーシングペーパー
  • 『環境依存部分の差し替え』ユースケース
    • 本番環境は特殊(or高価な)ハードウェア/フレームワークを使用
    • 簡易テスト環境では、ダミーのスタブモジュールを使用
    • 最終成果物には、ダミーのコードは含められない(受託開発等)
    • 実装やビルドオプションの修正を手動で実施すると、間違いが生じやすい

  • 『プリコミットマージ』ユースケース(2)
    • コミットはレビュアー限定
    • 修正内容はML/BTSで公開
    • レビュー結果によっては、再度の修正

うさみみギャラリー at SCM Boot Camp 2

SCMBCを彩る要素の1つに、『うさみみ』が挙げられるかと思います。

一見不思議且つ異様な現象ではありますが(笑)、簡単に言うと『首謀者@kyon_mmの専売特許』であり、『@kyon_mmの本体』、という感じでしょうか(笑) うさみみの経緯については下記エントリ内の@kyon_mm氏講演内容を参照してください。

今回のSCMBC2に於いても、その『うさみみ』は健在であり、時を経る毎に増殖して行ってました。今回エントリ用に撮った自身の写真も約60枚あったのですが、そのうちのほぼ半数に『うさみみ』が映っているという大変な事態に(笑)

ここではこれまでにUPした写真・当日参加した方々による写真等を併せて『うさみみギャラリー』として一挙公開!!(何かあれば連絡ください)




KPT

ここまでを振り返り、KPTで各自思う事を書き連ねつつ指定の卓に付箋を置いていくという作業を実施。今回も多くの振り返り要素が集まりました。


最後に

SCMBC首謀者である@kyon_mmさんによる〆の言葉。

  • コミュニティとしては何も無いけど、各地で開催予定。
  • 第1弾は名古屋?
    • SCMBC+TDDBC?
    • 東京/大阪/福岡などでも開催したい。
    • scmbcのハンズオン
  • 来年から高度なモノも取り入れていく予定。
  • みんなで良いものを作って行ければ良いと思います。
  • 本日はありがとうございました!

そして本編終了!


懇親会&闇LT

引き続き会場内で懇親会へ。前回の時は懇親会参加せずだったのですが、今回は(前回同様)闇LTも開催されるという事で引き続き参加することに。

こちらも非常に興味深い内容のトークなりLTが終始展開されていたのですが、内容的にも公に出来ないものも含まれているでしょうから(笑)写真とつぶやきで雰囲気を感じ取って頂ければと思います。








朝10時から(懇親会:22時まで続いた)を含めるとおおよそ12時間、半日を費やす形となったSCMBC2。どこを切り取っても中身の濃い(そしてうさみみも濃い)、非常に有意義なイベントとなりました。大事な目的の一つである『分散バージョン管理/Bazaarの基礎を学ぶ』事も達成出来たので、今後は開発環境にDVCS(Bazaar)を組み込んで学んで行く事も推し進めて行こうと思います。(Mac端末購入する事が今後あれば、GitやMercurialも学んで行くこともアリですね)


会場ご提供頂いたYosuke KATSUKI(TwitterID:@yokatsuki)さん、首謀者&スタッフの皆様方、SCMBCに参加された方々。皆さんありがとうございました!!


改めて今回のSCMBCに関するTogetterをご紹介。


そして当日はUstream放送も実施されておりました。当日運営を実施して頂いたMasao Maeda(TwitterID:@brtriver)さん、ありがとうございました!以下は関連Ustream動画へのリンクです。


参加された方々はブログ・Togetter・Ustream、それぞれを連携しつつふりかえりを。
イベントに参加されなかった方々も、これらの情報をそれぞれご覧になりながらイベントを追体験して頂ければ幸いです。

その他関連エントリ等: