プログラム・プロブレム

ティータイム 3 バージョン管理システム(VCS)


I はじめに

初(以下H):初(はじめ)だ。実は4人兄弟で、続、終、余という名の弟達が…
涼(以下S):居たりはしませんよね。あらためまして、こんにちは。涼(すず)です。
H:上のネタが分からん場合には「創竜伝」で検索するといいぞ。ちょっと古いが。
S:…全然プログラムと関係無い話ですみません。
H:さて、今回はプログラミングの最強の友、バージョン管理システムの話だ。
S:非常に重要です。プログラマ以外でも有用なんですが、テキストファイル以外には効果が薄いのが難点ですね。

II 概要

H:その名の通り「ファイルのバージョンを管理するシステム」だ。以上。
S:いえ、それだけでは説明になってませんから…(嘆息)
H:むむっ、それじゃあ「ファイルの履歴を管理するシステム」だ。これでどうだ。
S:あんまり変わってませんね。まあ、一言で言うならそんな感じになるのは仕方無いんですが。

H:具体的に説明すると、アレだ。ファイルのバックアップを取る時にコピーして名前変えておくだろ、それの自動版。
S:プログラミングだと、ある版のソースコードを保存しておきたくなりますよね?その為のツールなんです。
H:よくある方法としては、ソースの入ったフォルダを丸ごとコピーして名前に日付とか書いておくんだが、経験は無いか?
S:それで、後で必要になった時に変更点を調べたりするのに使うわけですね。
H:こんな作業を高度にまとめなおして、ツールとして提供しているのがバージョン管理システムだ。
S:英語だと「Revision Control System」になるので、検索の時にはちょっと注意が必要です。
H:紛らわしい話だな。

一般的な機能

S:基本的な機能は、ファイルが登録されるたびに版として全て保存しておくことです。
H:特定のファイルが何回も登録されると、その全てのバージョンが好きな時に取り出せるぞ。
S:もちろん、履歴はファイルごとに管理されるので、ファイルAとファイルBの履歴が混ざることはありません。
H:そんなわけで、コーディングが一区切りつく度に、登録(チェックイン)するのが基本だな。
S:そうすると一まとまりの変更ごとに版が一つ記録されることになり、後で使う時に便利になります。

H:で、チェックインの時にメモを残せるのが普通で、その履歴ログを見ることもできる。
S:どんな変更をしたのかメモするのが一般的です。じゃないと、後からどれがどれだか分からなくなりますからね。
H:その他にも、バージョンごとに付加情報を追加しておけるツールもあるな。

S:そして重要なのが、バージョンごとの比較結果を表示できることです。
H:ファイルの任意の版Aと版Bを比較して、変更点をチェックできるわけだ。
S:これで変更内容が一目瞭然というわけです。一般には「diff を取る」と言われます。
H:「differences(差分)」の意味だな。ツールのジャンルとしても diff ツールってのが存在するくらい有名だ。
S:その機能が版管理と統合されて便利に使えるようになっているわけですね。

H:もう一つ重要な機能があるな。「ブランチ」と呼ばれるものだ。
S:これは履歴を枝分かれさせます。複数人で独立して作業できるようにするのに便利です。
H:新機能の追加とバグフィックスを並行して行ったり、リリース管理をしたりするのに使われる。
S:もちろん一人で使うこともできますよ。テスト実装の時などに利用するといいですね。

H:その他には、ディレクトリ構造を保持したまま履歴が取れるとか、変更者の履歴も残るとか、いろいろあるな。
S:細かい部分は VCS ツールによっても違いますので、その辺は以降で説明しますね。

III VCSカタログ

H:ここでは有名どころの VCS を集めてみたぞ。
S:詳しい情報については Wikipedia などを参照してくださいね。

III.a オールドスタイルな VCS

RCS

H:VCS の走りにあたる、歴史的には重要なツールだ。今でも使おうと思えば使えるな。
S:ファイル単位でバージョンが管理されるツールです。ディレクトリ構成や名前の変更は扱えません。

CVS

H:たぶん一番広く使用されてる VCS だな。名称は Concurrent Version-control System の略だったはずだ。
S:これも RCS と同じでファイル単位で管理されるので、ディレクトリや名前の変更には非対応です。

III.b 最近のフリーな VCS

Subversion

H:CVS の後継として開発された VCS だ。これはディレクトリ構成や名前の変更が扱える。
S:サーバクライアント方式ではメジャーどころですね。
H:一極集中管理タイプの運用なら、これがいいかもな。

Git

S:最近の注目株がこれですね。分散型 VCS になります。
H:開発支援サイトでのサポートも多いな。Sourceforge とか、GitHub とか。
S:CodeRepos もそうですかね。後は開発プロジェクトに利用しているフリーソフトも多いですね。
H:何しろ Linux の開発者が原型を作ったくらいだしな。

Mercurial

S:Python ベースの VCS です。分散型になりますね。
H:コマンドライン用で GUI がまだ無いらしいから、Windows ユーザが使うには難しいかもな。
S:利点は Git よりもデータ容量が小さくて済むことらしいですよ。

Darcs

H:Haskell で書かれた分散型 VCS だ。以上。
S:すみませんが、作者さんが詳しいことを知らないんです。興味がある方は調べてみてくださいね。

Monotone

H:C++ で書かれた分散型 VCS で、管理機構に SQLite データベースを使っているそうだ。
S:GUI もあるみたいですね。C++ だから処理速度も速いんでしょうか?
H:これも作者がよく知らんらしいから、その辺は不明だな。

Fossil

S:C で書かれていて、SQLite データベースにデータを格納するそうです。
H:VCS 機能の他に Wiki とチケットシステムが入って、しかも単一実行ファイルで動く。
S:HTTP でアクセスして操作するための Web UI もありますね。
H:作者が密かに注目しているそうだ。乏しい英語力で公式サイトの翻訳をしてたりする。
S:翻訳したのは結構前なので、だいぶ情報が古くなってるみたいですが、参考にはなるかと。

III.c 商用の VCS

H:商用でも、いくつかの VCS が出回っている。個人で使う機会はあまり無いだろうがな。

Microsoft Visual Source Safe

S:Microsoft 謹製の VCS です。サーバクライアント型ですね。
H:ぶっちゃけ、作者は「使いにくくてダメだ」と言っていた。有料でもあるしな。
S:同社の Visual Studio と統合できる関係で使っている場合が多いみたいですね。

Perforce

H:Perforce 社の VCS でサーバクライアント型みたいだ。
S:利用料金が高いので、作者さんは使ったこと無いそうです。よって評価できず。
H:商用ではかなりのシェアがあるらしいな。

Bitkeeper

S:分散型 VCS ですね。詳しくは Wikipedia などをご覧下さい。
H:一時期 Linux カーネルの開発とかにも使われてたらしいな。その時は無料だったそうだが。
S:提供する時の条件の問題で、これの代わりに Git が開発されたそうですね。

IV 実際の利用

H:さて、一通り有名な VCS を挙げてみたが、ここらで実際の利用について見てみよう。
S:環境としては Windows の方がほとんどだと思いますので、そのように仮定しますね。
H:サーバが作れる状況ならば、Subversion がいいだろうな。GUI もあるし。
S:TortoiseSVN ですね。エクスプローラに統合されるので使いやすいという話です。
H:サーバなしでも使えなくはないし、まあ試してみるにはいいかもな。

S:Monotone にも GUI があるようですね。
H:しかし、日本語の情報は少ないな。人柱向けか。

S:コマンドラインでの操作が苦にならないのであれば、Git が便利ですよね。
H:ああ、ローカル環境だけで全ての操作が行えるから、ネット未接続でも作業できる。
S:あ、調べてみたら「Git GUI」っていう GUI ソフトがあるみたいですね。
H:Windows インストーラもあるし、これも VCS を試してみるのには良さそうだ。

利用風景

S:それでは、Git を例にして利用風景を紹介してみましょうね。
H:まずは対象ディレクトリまで移動して「git init」を実行する。これで初期化される。
S:それから、版管理したいファイルを「git add ファイル名」で追加していきます。
H:現在の状態を見たい時は「git status」で分かるぞ。見方とかは解説サイトを参照してくれ。
S:そして最初の登録処理を行うのが「git commit」です。エディタが立ち上がるので、コメントを入力してくださいね。
H:この登録処理のことを「コミット」あるいは「チェックイン」と呼ぶな。
S:後は普通にファイルを編集して書き換えますよね。
H:最後に登録した版と、現在編集しているファイルとの差分を見たい時は「git diff」だ。
S:切りのいい所まで編集が進んだら「git add ファイル名」「git commit」で新しい版を登録です。
H:Git の場合は「git commit」で登録されるのは最後に「git add」した時のファイルの内容だから注意が必要だ。
S:これを繰り返すことで、だんだんファイルの版が蓄積されていくわけですね。
H:コミットログは「git log」で見られる。分かりやすいコミットログを書く癖を付けておくといいな。
S:その他、指定バージョン間の diff や、指定バージョンの取り出し、行を最後に変更した人の確認などができますね。
H:これで「あの時、どこ編集したっけ?」とか「コード書いてたら動かなくなった!動く版に戻したい。」とかに対応できるわけだ。

V 終わりに

S:プログラミングは複雑な作業なので、こういうツールの手助けは必須です。
H:プログラマなら VCS の一つくらいは使ってて当たり前なんだが、意外と紹介とか説明は無いんだよな。
S:プログラマに限らず、テキスト文書で作業する方には便利なツールですから、知り合いにも紹介すると喜ばれるかもしれません。
H:普通に使うだけなら、概念と基本コマンドの理解くらいだから、そんなに難しくはないはずだ。
S:この話が理解の手伝いになれば嬉しいですね。
H:それじゃ、今回はここで。じゃあな。

ティータイム 3 終了


一覧に戻る