MercurialとDropboxを使った構成管理

今年の最優秀サービス賞〜Dropbox」で使い始めたDropboxだけど、最近は「MercurialをNetBeansで使う」のMercurialと組み合わせて構成管理(ソースコード管理)ツールとして使っている。手順はこんな感じ。

  1. Dropboxのフォルダ内にMercurialの共有リポジトリを用意する。
    • %hg init
  2. 各PCにおいて上記の共有リポジトリからソースを取得してローカルリポジトリを作成する。
    • %hg clone /path/to/dropbox/project
  3. 以後、このローカルリポジトリソースコードを使って開発を進め、コミットする。
    • %hg commit -m "Added my greatest code!"
  4. 適当なタイミングでローカルリポジトリの変更を、共有リポジトリへ反映させる。
    • %hg push /path/to/dropbox/project
  5. 変更はDropbox経由で即座に他のPCにも反映される。

具体的なメリットはこんなところ。

  • 作業環境のPCを変えても、他のPCでそのまま作業が継続できる。
    (例:自宅のデスクトップPCでの作業を外出先のノートPCで続ける等)
  • 複数の異なる環境で同時に動作確認しつつ開発できる。
    (例:XPとVistaWindowsMacでのGUIレイアウト調整等)

なかなか便利ですね。ちなみに注意する点は下記の通り。

  • 共有リポジトリへの反映を忘れるとDropboxでの同期が行われないので、作業終了時などには必ず反映させる必要あり。これが面倒ならDropbox配下のファイルを対象に直接作業すればよいけれど、こうするとファイルを編集して保存する毎にDropboxの同期が行われることになってしまう。(Dropboxでもファイルの履歴が管理されるので、これも悪くない使い方かも知れないが、ゴミデータまで残しておく必要は無いよね)
  • Dropbox管理下のファイルを同時に複数の異なるPC上で変更すると、Subversionのようなコンフリクト状態になってファイル名がその旨を示す形に変更されるけれど、Mercurialの共有リポジトリのデータがそのような状態になってしまうと少々厄介。但し、分散管理のメリットを生かし、改めてローカルリポジトリから複製し直せば復活できる。なお、ネットワーク未接続によりリポジトリ同期のタイミングが遅れても、Mercurialによる柔軟な管理機能(バージョンのマージ機能等)により後で対処可能なので、共有リポジトリへの反映はオンライン状態であることを確認してから行った方が良い。

以前、USBメモリSubversionリポジトリを入れておけば何処でも作業できることを知って、試したことがある。これは確かに便利なのだけど、なんせ唯一のマスターリポジトリを持ち歩くと紛失した時のダメージが大きい。その点、Dropboxならサーバ上に保管されているので安心できる(この点の感じ方は個人差があるかも知れない)し、仮にDropboxのサービスが止まったり同期されるデータが壊れても、各PCに分散してリポジトリがある状態だから直ぐに復旧可能。と言う訳でこの組み合わせはなかなか良い感じ。Dropboxの上手い活用方法はまだまだ出てきそうな気がする。