分散バージョン管理勉強会に行ってきた

最近,Gitを勉強しようと思っていたらタイミングよく勉強会があったので参加させていただきました。

DVCSについて,外観からディープな話題,ネタ発表までバラエティ豊かな発表でとても楽しかったです。特に,神速さんのゆるふわ愛されキャラ振りはすごいw
以下,各発表のメモ&感想です。

分散バージョン管理システムってなんなん?(おかもとさん)

  • 前説ということで,場を暖めるために様々なネタがちりばめられていましたが,会場の照明が思ったよりも明るく,スライドが見えにくくなってしまったためあまりオチなかったところが逆に面白かったw

  • CVS→現在までのバージョン管理ツールの変遷

    • 書籍とかである程度事前知識を入れてはいたけど,改めて聞いておさらいができた
  • 分散バージョン管理のメリットはよく聞くけど,デメリットはあまり知らなかったので勉強になった

    • 特に,ロックができないというのは*1,バイナリファイルの扱いが難しいということで,Excelなどのファイルを管理するのは難しいのかな?

      • 調べたら,MercurialはTortoiseHgを使えば差分が取れるらしいので,Windowsユーザにも優しいようだ
      • この点は,現場導入するにあたってMercurialかBazaarに揺れる一つの要因になりそう。あとGitのコマンドを現場のメンバに覚えさせるのは難しい気もするし。
  • Git,Mercurial,Bazaarの比較

    • 比較表はもうちょっとじっくり見たかった

    • リビジョン表示は,Gitの場合ハッシュだけど,revertする時はコミットログが頼りになるのかな?そうするとメンバーにしっかりコミットログを書かせるようにしないと厳しそう

  • まとめ

    • デメリットも考慮して,Subversionから移行しないというのも一つの選択肢,というのは肝に銘じておこうと思った

GitとHudsonによるきれいなリポジトリの作り方(id:bleis-tiftさん)

  • テライケメン
前半部(ソフトウェア開発に対する思い)
  • ソフトウェア開発で発生する問題としての手動テスト,Excel管理,Excel設計

    • まずこれらを卒業するのが先決ですよね。汎用機文化の人たちにこれをわからせるためにはどうしたら良いんだろう…*2
  • バージョン管理システムを使っているだけではダメで,正しく使わないとダメ

  • 集中管理型は使っているみんなが変更を知っていないとダメ

    • 使っているみんなに間違った影響が伝播してしまうから
    • そもそもバージョン管理ツールの仕組みから知ってもらわないとこういうことってわからないんですよね…どうやって時間を取ってもらうか。彼らはこういう勉強などいっさいしないし…
後半部(きれいなリポジトリ)

分散バージョン管理初心者の私には結構高度なテーマでしたが,説明がわかりやすかったので聞いていて何となく理解はできました。ただ,自分でこの環境を構築しようとするのは今のレベルでは難しいかも。

  • ここではいつ取ってきてもビルド可能なリポジトリのことをきれいなリポジトリとして定義

    • 自分がミスっても他の人に影響を与えることがない
  • CIを導入することで,リポジトリが更新されたきっかけでビルドを走らせることによって素早いフィードバックを得ることができる

  • ただし,フィードバックだけでは不足で,汚してもよい領域ときれいな(ビルドが通る)領域とに分けて管理することで,きれいなリポジトリが実現できる

  • ブランチ分割

    • 更新をかける開発者ごとのブランチと,実際に更新されるブランチに分ける
  • リポジトリ分割

    • きれいなリポジトリと,開発者が壊しても良いリポジトリに分ける
  • hookでmasterブランチを直接pushできないようにし,privateブランチの更新をhookしてビルドする

  • 利点・欠点

    • 開発者が増えたとき

      • ブランチ分割の場合,CIのジョブを増やすだけ
      • リポジトリ分割の場合,リポジトリも増やして設定する必要がある
    • 最新ではないもののpush

      • ブランチ分割の場合,ロールバック?通知だけ?
      • リポジトリ分割の場合,ロールバックするだけ
    • リポジトリ分割の場合,hookを差し込む場所が多くなる

    • テストの分割

      • privateリポジトリで単体テスト
      • centralリポジトリにpushされたタイミングでhookして結合テスト
      • このアイデアは言われてみれば合理的だけど,すごいと思う。というか実現したのがすごい
  • 最初に試すのはブランチ分割がおすすめ

    • hudsonのgitプラグインのオプションにあるらしい

TracLightningとTortoiseHgのゆるふわな連携(id:wyukawaさん)

ゆかわさんの発表はHudson勉強会に続いて2回目の聴講でした。

  • Mercurialの特徴

    • コマンドがSubversionに似ている

    • 単機能(Gitは多機能)

    • 拡張機能が豊富

      • リベース,歴史改変,チェリーピック,部分コミット,シェルフなど
      • うーむ,勉強不足なのでよくわかってません。勉強します。
    • Mercurial Queue(MQ)というGitのインデックスに似たパッチ管理機能

    • 履歴管理

      • Mercurialは差分
      • Gitはスナップショット
    • ブランチの種類

      • リポジトリをcloneして作るブランチ
      • hg bookmarkで作るブランチ(Gitのブランチに近い)
      • hg brunchで作る名前付きブランチ(削除できない)
      • 名無しブランチ
  • Mercurialである理由

    • WindowsでGitは厳しいってみんな言う

    • GUIがあった方がいい

    • TortoiseHgがいい

      • この辺りはWindowsオンリーなうちの現場では魅力だなぁ
  • 普段Subversionのため,Mercurialと連携するhgsubversionを使う

    • デモ
  • まとめ

    • TortoiseHgはいいらしい

    • hgsubversionは重い,日本語ファイルがダメ

    • 拡張機能をがしがし使う必要がある

      • EclipseやFirefoxが好まれる文化なら受け入れられる?
    • Gitに比べると情報量は少ない

      • 一応Mercurial本持ってるけど積ん読状態だ…

git-svn使ってみる?(riskさん)

SubversionからなかなかGitに移行できないユーザのための発表。自分的にはとてもありがたかったです。特に,とりあえず覚えておくコマンド集は,今すぐ覚えたいと思います。

  • git-svn

    • Subversionリポジトリからチェックアウトすると,masterブランチになる
  • git-svn使えるツール

    • msysgit

      • デフォルトのままでgit-svn利用可能
    • cygwin

    • Linux

      • apt-getでgit,git-svn
  • インストール

    • Google先生
  • とりあえず覚えておくコマンド

    • git-svn

      • clone(clone -s)
      • dcommit
      • rebase
      • help
    • git

      • branch
      • checkout
      • add rm
      • revert reset
      • status log
      • commit
      • merge
      • help
  • gitとsvnを比較してみる

    • 図がとてもわかりやすかった

Mercurialで別オリジンのリポジトリ間で同期を取る運用の仕方について(id:monjudohさん)

分散バージョン管理newbieの自分には高度だったので理解しようとするので精一杯でした。詳しくはblog見てね,とのことだったのでblogみて再度勉強してみたい。

  • machgはだいぶ便利
  • 範囲指定系のオプションはgitよりもhgの方が進んでいると思う

Git での歴史の改変方法の紹介(id:sinsokuさん)

  • LTを通常発表枠にする,という離れ業の歴史改変

  • でもデモは何となく何やってるのかわかったので伝わってきた

  • add -p

  • rebase -i

    • git rebase -i master
    • git rebase –continue
  • 歴史改変はローカルの変更だけにしておくこと←これ重要

SVNユーザのためのBazaarガイド(wonderful_pandaさん)

会場でも希有なBazaarの説明だったので,まずはBazaarについて知るだけでも有益だった。

  • バザーと読む

    • バザールだと思ってた…
  • シェアの図も下駄履いてます

    • そうなんですかw
  • おすすめ

    • デザイナさんとかにもVCSを使ってほしいとき

      • GUIがしっかりしてるから
      • これはうちの汎用機開発者にも魅力になりそう
      • っというかうちの開発者はデザイナレベルの技術なのかorz
    • 日本語ファイル名をSubversionと同じレベルで使える

      • これもうちの職場には必須かも
      • 内部設計書(XXXXXX).xlsみたいなファイルばっかりだし…
    • Subversionを使いながら,段階的にDVCSを導入したい

      • bzr-svnプラグインで実現可能
      • こんなプラグインがあったことも知らなかった
    • 周りのレベルの低さにイライラする

      • そういう人々にGitとか持たせるのはキケン
      • 確かに…orz
  • 非推奨

    • AnkhSVNが便利すぎて手放せない

      • Visual Studioが必須ならMercurial
      • MS系プロジェクトではないので,これはOK
  • コンセプト

    • Version Control For Human Beings

      • プログラマでも,マネージャでも,デザイナでもあらゆる人々が使える分散バージョン管理システム
      • GUIクライアントもbzr本体のコア開発メンバが手がけている
      • リビジョン番号もハッシュではなく番号
    • Better SVN

      • SVNになれたユーザが違和感なく使えるように配慮されている
      • 移行,連携も簡単にできる
      • Subversionのコマンドは,Bazaarでもほぼ同じように使える
  • チェックアウト

    • Git,Mercurialにはない機能

    • リモートブランチを手元に持ってくる際に,「ブランチ」と「チェックアウト」の2つ

    • チェックアウトを使うと,リモートとローカルのブランチは「バインド」された状態になる

    • 手元のブランチをコミットすると,自動的かつアトミックにサーバにコミットされる

      • 手元のブランチだけにコミットして,後でサーバに反映させるのも可能
    • bzr-svnプラグインを使えば,サーバはSubversionのままで同じことが実現できる

  • つまり,Subversionと同じ感覚でDVCSを使うことができる

  • しかも,Subversionと違って

    • オフラインの時もコミットできる

    • マージも嘘みたいにうまく行く

    • updateの時も神様に祈る必要なし

      • たしかにsvn updateするのは,メンバーのスキルが低いときほど怖いですね。

Hudsonからみるバージョン管理(id:cactusmanさん)

  • 第2回Hudson勉強会は2/25開催予定!

  • Hudsonから見たDVCSは,ヒエラルキー構造を持てる

    • Hudsonサーバを構造化して,役割分担
  • Pre-tested Commitを可能とする

  • 誰かHudson勉強会で実践して発表してほしい

bleis-tiftさんが話していた内容の概論,といった印象を受けました。

ビューティフルなデバッグの話(かわにしさん)

  • why programs fail

    • 差分デバッグ
  • git bisectで範囲指定

    • 歴史上から二分探索してバグを探す
    • 検索の開始地点から,検索の終了地点を指定
    • 成功/失敗を判定するテストを書く
  • デモは神速さん無双www

懇親会

  • 22時すぎていたにもかかわらず20名超の参加!
  • 帰りに数名を駅まで先導してたのが私です

まとめ

Shibuya.trac恒例(らしい?)スイーツタイムもよかったです。あれで初参加者としても和むことができましたし。イチゴ大福とチーズスフレ,超美味しかった!!
スタッフさん,参加された方,スピーカーの方,本当におつかれさまでした。ありがとうございました。
とりあえず,積ん読のGit本,Mercurial本を読んで自分で実践するところから始めたい。

*1:アーキテクチャをよくよく考えれば当たり前なのだけれど

*2:彼らの文化全否定ですからね…

-—-