Mercurialの勉強会に参加してきた

これは恵比寿にあるビープラウドさんという会社が主催してやっている勉強会で、MCの用意したネタをもとに参加者がいろいろ意見を出し合うという形式の会。
たまたまmoongift氏に声をかけてもらったので行って参りました。

ちなみに7/11にやったのにいまさらレポするのは、富士登山準備 → 富士登山 → 空前の筋肉痛で精神的にスリップダメージを受け続けて死亡状態という鬼コンボでしばらく書く余裕がなかったという事情による・・・

さてセッションのタイトルは「高1からのMercurial入門」
分散バージョン管理システムであるMercurialについて概要の説明から実際の操作までを見ていった。

表題は「CVSは小学生まで」 → 「Subversionの次は分散バージョン管理システム」 → 「じゃあSubversionは中学生までで高校生からはMercurial」という流れを汲んでの半ばネタ的なもの。

実際に仕事などでバリバリ使っている人たちの意見が聞けて面白かった。
なおこの次のセッションにコードレビューツール宍道湖の話もする予定であったが、Mercurialのセッションが白熱して長引いたため時間が足りずに終了。居酒屋になだれ込んだ。

以下当日のメモより抜粋。聞き違えている可能性もあるのでなにかツッコミどころがあれば指摘してもらえるとこれ幸い。

分散バージョン管理システムのメリットとデメリット

メリット
  • リポジトリがローカルなので操作が高速
  • オフライン開発可能
  • 安定してない変更もローカルにならガンガンコミットできる
  • リポジトリのセットアップが簡単
  • マージが簡単
  • Subversionと違って.svnがディレクトリごと増えないので気持ちいい
デメリット
  • リポジトリが大きすぎるとcloneで手元に持ってくるのが大変
  • ツールサポートが少ない(Windowsクライアントとかないかあっても微妙とか)
  • 使いこなせる人が少ない
  • ワーキングディレクトリ、ローカルのリポジトリ、リモートのリポジトリと場所が増えるのでどこに対して操作しているのか混乱しやすい
  • バイナリの差分は取れない
  • メインリポジトリを決めるなどの運用ルールが必要
  • ブランチやマージが多発しない環境ではあんまりメリットを感じられないかも

MercurialとGitの比較

Mercurial
  • Pythonで出来ていていじりやすい。機能拡張も楽
  • TortoiseHgというWindowsクライアントがある(でも微妙)
  • Java系、Python系のプロジェクトでよく使われている
Git
  • リーナスが作った
  • SVNとの連携がしっかりしてて移行が楽
  • GitHubがすげぇ
  • 速い
  • Linux、Rails界隈でよく使われている
  • 日本語リソースがしっかりしてる
どっち使ったらいいの?

好きな方使え。

実際どっちを使ったらいいのかという疑問に関してGitもMercurialも両方使い込んでいるらしい人が「Git」と言ったときにMCから「今日の発表全否定っすか」という声があがったのにはワラタ。
発言の意図としてはGitHubがすごいのと日本語リソースが手厚いのでGitオススメらしい。

Subversionは本当に中学生まで?

というのはネタ。
分散してないバージョン管理システムで8割の人のニーズは満たせるだろう、という意見もあるようで。

不特定多数が参加してブランチやマージが多発するようなオープンソース的な開発は分散バージョン管理システムとの相性がよいので、オープンソース開発ではそちらがメインで使われることになりそう(すでになってる?)
でも企業内における開発環境としては今のところそこまで分散バージョン管理システムの方に決定的なアドバンテージがあるわけではない。

その他の話題

みんな銘々に自分のリポジトリにコミットしていったらマージが多発するのではないか?

その通り。
だがマージも簡単なのでそれほど問題ではないそうだ。

大きなプロジェクトにはマージの専門家がいるという話

直接pushはせずにパッチを投げてスペシャリストにマージしてもらう。
マージスペシャリストのマージの鮮やかさはすごいらしい。

小さいプロジェクトでもうまく回るらしい。
開発者は好き勝手ガンガンコミットしてマージスペシャリストがうまくマージしていくという流れになる。(でもマージスペシャリストって能力高くないと務まらなそうだし、そういう人が務めるにはマージ作業って物足らなくない?というツッコミもあり)

品質管理を厳格にやるという用途にも使えるのかも。
というか厳格にしないとしても品質管理に使いやすいな。

BranchとTag

Branchの機能は基本的に使わないでコピーした別のリポジトリをBranchとして使うそうだ。

Tagは前のリビジョンから何も変更のないチェンジセットが作られるだけ、という話だった。たしか。自信なし。まあ問題なくできるよと。

参加しての感想

面白い会だった。

プロジェクタにPCをつないで実際にMercurialの操作をしながら見せてくれたのでわかりやすかったし、久しぶりに技術者の集まりに参加できたのも有意義だったなぁと。

スキあらばまた押しかけたい。