More Related Content Similar to mercurial-users.jp speech at OSC2013 Tokyo/Spring (20) mercurial-users.jp speech at OSC2013 Tokyo/Spring2. 自己紹介
2 OSC 2013 Tokyo/Spring
3. • 藤原 克則(FUJIWARA Katsunori)
@flyingfoozy
http://d.hatena.ne.jp/flying-foozy/
• Mercurial プロジェクトへの関与
– メッセージ日本語翻訳のコミッタ
– コントリビュータとして、日々修正を提案
• 『入門Mercurial』(秀和システム刊)を執筆
3 OSC 2013 Tokyo/Spring
4. GUIメインの入門書を出版します!
• TortoiseHgを利用した、
GUIによる履歴管理の入門書
• 2月27日頃から順次、
店頭に並ぶ予定
(地域によって異なります)
http://www.lares.dti.ne.jp/~foozy/fujiguruma/scm/mercurial-books.html#thgbook
4 OSC 2013 Tokyo/Spring
6. 履歴管理の機能
• ファイルの変更内容の記録/参照
– 変更内容ベースの情報:
• 変更対象ファイル(What)
• 変更箇所(Where)
• 変更内容(How)
– 変更に関するメタデータ:
• 変更実施者(Who)
• 実施日時(When)
• 変更理由(Why)
6 OSC 2013 Tokyo/Spring
7. 履歴管理の利点
• 特定時点の状態への復帰
– 想定外の変更の取り消し
– 以前の状態での動作確認
• 記録内容を元にした履歴の検索/情報抽出
– 障害発生時の原因となった変更の特定
– 別視点での分析: ファイル別/作業者別の変更頻度など
• 並行して実施される作業の隔離/統合
– 記録された情報をベースに行うので、何度でもやり直しができる
7 OSC 2013 Tokyo/Spring
9. 履歴管理ツールの世代分類
• Bryan O'Sullivan 氏の
『Mercurial: The Definitive Guide』における分類
– http://www.lares.dti.ne.jp/~foozy/fujiguruma/scm/mercurial-
books.html#bosbook
9 OSC 2013 Tokyo/Spring
10. 第0世代
• (一般的な)専用ツールを、全く使用しない履歴管理
– 『履歴管理』という名の『無法地帯』
• 変更前/後ファイルの手動保存
– ファイル名末尾に日付をつけて保存
– 定期的に作業成果のアーカイブを作成
• 複数人で並行作業する場合は
– 同一領域を共有して並行作業するか、あるいは
– 各自の作業後に、成果物を共有領域に上書き
10 OSC 2013 Tokyo/Spring
11. 第0世代の問題点
• メタデータ/変更内容の管理が面倒
– 別ファイル(テキストファイル or エクセル)で管理
– メターデータ相当の情報や、修正前の内容をコメントとして残す
– 結果として、整合性の維持が困難になったり、可読性が低下するなど
• 必要になってからの、履歴の振り返りが面倒
– 人手が介在するため、誤操作の可能性も高い
• 成果記録の安全性確保が難しい
– 操作ミスにより、他人の成果を上書きする危険性
• エトセトラエトセトラ……
11 OSC 2013 Tokyo/Spring
14. 第2世代
• リポジトリと作業領域が分離(『中央リポジトリ』型)
– 代表的ツール: CVS, Subversion, Visual SourceSafe etc…
• 独立した作業領域を使用できるので、
各自の作業成果の独立性が確保できる
• クライアント/サーバモデルを導入したことで、
リモートホストでも作業可能
14 OSC 2013 Tokyo/Spring
15. 第2世代の問題点
• リポジトリへの常時アクセスが前提
– オフライン/ネットワークアクセス制限のある環境での作業が困難
– 応答性が、ネットワーク帯域やサーバ性能に左右される
• 履歴記録内容が即時リポジトリに反映
– 作業の途中成果を、バックアップ代わりに記録したりできない
• 機能実現上、並行開発に難あり
– 履歴の記録が一本道であることが前提
– 継続的なブランチ運用が困難(マージに関しての配慮が不十分)
• エトセトラエトセトラ… …
15 OSC 2013 Tokyo/Spring
16. 第3世代
• リポジトリと作業領域が隣接(ただし『分散リポジトリ』型)
– 代表的ツール: Git, Mercurial, Bazaar etc …
• 並行開発への配慮
– 履歴の枝分かれ/ブランチ運用の簡便化(=マージの簡便化)
– 履歴管理で今最も熱い話題の1つが『ブランチ運用方法』なのは、
第2世代での不満の反動か?(笑)
• 個々のリポジトリが、完結した(completed)履歴情報を保持するため、
他リポジトリと連携できない(オフラインな)状況でも、単独で動作可能
• リポジトリ間で、相互に履歴情報の伝搬が可能
– 複数の手段/経路を選択可能
– 負荷分散が容易
16 OSC 2013 Tokyo/Spring
17. 第3世代の問題点
• 難しい(と思われている)
– 『分散リポジトリ』という肩書が問題?
• 運用の自由度が高い
– ブランチ運用などは、最終的に組織としての、
『開発プロセス』や『品質保証方針』などとの兼ね合いになる
– それぞれの組織にとっての『最適解』に到達するには、
ある程度の試行錯誤が必要かも?
17 OSC 2013 Tokyo/Spring
20. 概念モデルが簡単
• 記録された履歴は、常に参照可能
– デフォルトの履歴一覧で常時出力される
– 『HEAD を移動させると記録した履歴が見えなくなる』といったことが無い
– 『一定期間参照されない履歴が破棄される』といったことが無い
• 履歴の枝分かれ/ブランチの概念が単純
– Mercurialの『(名前付き)ブランチ』は、CVS/Subversionの『ブランチ』に近い概念
– Gitの『ブランチ』は概念レベルで別物
http://d.hatena.ne.jp/flying-foozy/20120801 参照
• CVS/Subversion経験者や、履歴管理初心者にとって、
理解の障壁が低い
20 OSC 2013 Tokyo/Spring
22. 強力な履歴検索機能
• 複雑な条件指定でのリビジョン抽出が可能
– コミット実施ユーザ名
– コミット実施日時(期間指定可能)
– 特定のリビジョンの子孫、あるいは祖先のみの抽出
– 特定のファイル/フォルダに関する修正実施リビジョン
– マージ実施の有無
– エトセトラエトセトラ…
– さらに、and/or や括弧(優先度指定)による任意の条件の組み合わせ
• 使用例に関しては以下のブログエントリ等を参照
– http://d.hatena.ne.jp/flying-foozy/20120511/
22 OSC 2013 Tokyo/Spring
24. 各種IDE向けプラグイン
• 詳細は Mercurial の Wiki ページで
– 『Information about other tools that work with Mercurial. 』
http://mercurial.selenic.com/wiki/OtherTools
24 OSC 2013 Tokyo/Spring
27. 情緒的な障壁
• 履歴管理ツール自体に対する無理解
– 『履歴管理ツールなんて必要ない』、『手動管理で十分』
– 『自前のツールの方が良い』、『OSSは品質が不安』
• 変化への抵抗
– 『変更を”管理”されるのは嫌だ!』
– 『新しいことを覚えるのは面倒だ!』
27 OSC 2013 Tokyo/Spring
31. 31 OSC 2013 Tokyo/Spring
37. 連携先からの履歴取り込み
• Mercurialリポジトリ repo-sync に、連携先から履歴取り込み
– 基本的には、標準同梱の convert エクステンションで変換可能
• CVS, Subversion, Git, Bazaar etc …
– 状況/形式次第では、3rd party エクステンション/外部ツールの利用も
• hgsubversion エクステンションや Tailor など
• 詳細は『Converting Repositories』参照
http://mercurial.selenic.com/wiki/RepositoryConversion
• 連携先でのブランチ/タグもそのまま取り込み可能
– メイントランク(main trunk)の履歴は default ブランチに記録
– それ以外は、同一名称のブランチに記録
37 OSC 2013 Tokyo/Spring
38. 38 OSC 2013 Tokyo/Spring
41. 41 OSC 2013 Tokyo/Spring
43. 独自作業成果の記録
• 独自作業成果は、hg-default ブランチ上で記録
– sync-default の最新リビジョンから、ブランチを作成(初回のみ)
– 連携先から継続的に取り込まれた履歴は、
sync-default ブランチを経由して hg-default にも都度マージ
– チームメンバは、共有リポジトリ repo-shared 経由で成果を共有
– Mercurial の機能をフルに使用可能
• 独自の(=連携先には見せない)ブランチ作成
• 名前なしブランチで複数ヘッド状態
• 共有リポジトリを経由しない履歴伝搬などなど
43 OSC 2013 Tokyo/Spring
44. 44 OSC 2013 Tokyo/Spring
48. ハイブリッド領域の同期
• 連携先の最新リビジョンで、作業領域を更新
– 最新内容で強制的に上書き: “cvs update –C” など
• sync-default ブランチの最新リビジョンで、作業領域を更新
– 最新内容で強制的に上書き: “hg update –-clean sync-default”
• 連携先に対して、差分の有無を確認
– “cvs diff”, “svn diff” など
• 差分があるなら、『連携先からの履歴取り込み』から繰り返し
– こちらの作業中に、連携先に新規リビジョンが追加されている筈
48 OSC 2013 Tokyo/Spring
51. 連携先への独自作業成果の反映
• hg-default ブランチから sync-default にマージ
• repo-hybrid リポジトリにマージ結果を反映
• repo-hybrid の作業領域をマージ実施リビジョンで強制更新
– “hg update –-clean sync-default”
– 事前に適切に同期されていれば、
マージした独自作業成果=連携先との差分=連携先への反映内容
• 連携先に変更内容を記録
– “cvs commit”, “svn commit” など
– 必要であれば、新規ファイルの add や、不要ファイルの remove も、
commit 前に手動で実施
51 OSC 2013 Tokyo/Spring
55. リポジトリ/ブランチが多数登場するが…
• 役割を固定化することで:
– 作業手順を固定化可能
– 『状況に応じた判断』に由来する誤操作の危険性を低減可能
• 1つのリポジトリ/ブランチで、役割を兼務させると:
– うっかり他の作業を実施してしまうかも?
– 『ハイブリッド領域の同期』などで、手順が増えてしまうかも?
• これだけブランチ/マージを多用しても、
Mercurialなら楽々運用可能
55 OSC 2013 Tokyo/Spring
57. メーリングリスト
• mercurial-ja
– https://groups.google.com/forum/?fromgroups#!forum/mercurial-ja
– リリース情報/障害情報等もアナウンスしてます
57 OSC 2013 Tokyo/Spring
61. 勉強会開催情報
• “TokyoMercurial” と題して、
03/23(土)に勉強会を開催します
http://connpass.com/event/1855/
• お菓子を食べながらの和やかな会ですので、
『履歴管理ツールの利用は初めて』な方から、
『Mercurialの中身を知りたい』な方まで、
お気軽に参加ください!
61 OSC 2013 Tokyo/Spring