ソースコードのバージョン管理

こんちはプログラムグループのJun-gです。今回もプログラマ定例会で出た質問ネタで一つ。

「新旧のソースファイルの管理をしたいのだが、何かツールなどを使うべきでしょうか?」
なるほど。確かにちょっとしたプログラムなら適当にエディタで書いて実行確認して終了でもいいのですが、ある程度コードの分量が多く開発に時間がかかるものだと、いじってる途中で動かなくなったり、実験用に別バージョンを枝分かれできると便利だったりします。あと書いたコードがうまくいかなくてある時点まで大幅に戻ってやり直したい場合。以前動いてたものがいつの間にか動かなくなって、どの時点からおかしくなったのか変更を一つ一つ調べたい場合。あと複数人のプロジェクトで、同じソースを複数人で編集したい場合はうまく管理しないと明らかに問題が起きますね。そんな悩みを全部解決してくれるのが、バージョン管理システムです。
バージョン管理システムは古くから需要があり、広く使われているフリーで定番のものが存在します。とりあえずこれ使っとけ!的なものをご紹介します。
TortoiseSVN
Subversionという定番のバージョン管理システムがありまして、これをWindowsで使えるようにしたのがTortoiseSVNです。インストールの仕方や使い方などの解説は、ぐぐればいろいろ出てきますので問題ないでしょう。さすが定番。
仕組みとしては、ハードディスクのどこかにリポジトリと呼ばれるディレクトリを作り、そこにソース一式をインポートします。これで準備完了。ファイルの編集を行い、キリの良い所でファイルをリポジトリに「コミット」します。コミットした変更はリポジトリに全部記録されていて、あとからログを見たり任意のポイントに戻すことができます。ある時点でタグ(目印)を打ったり、別バージョンのブランチ分けなどができます。
主にバージョン管理は複数人で仕事をする時に必須と思われていますが、1人でコード書く時も先述したようなメリットがありますので、積極的に使うべきでしょう。ちなみに複数人で作業をする時は、「更新」をすることでファイルを最新にすることができます。ファイルを変更したらコミットします。コミットした変更点は、他人が更新を行うことで同期されます。みんなでコミット・更新を繰り返しながら開発を進めていきます。同じファイルを同時に編集した場合は、後からコミットしようとした人がまず更新をしないとコミットできないようになっています。その際システムが自動で変更点をマージしてくれます。同じ行を書き換えている場合は自動でマージできないので(これを「コンフリクト」という)、手動でコンフリクトを解消してからコミットします。そんな感じで気を付けながらやっていけば、大体うまいこといく感じになっています。
プログラム以外でもテキストファイルなら同様に管理が可能なので、バージョン管理システムプログラマ以外にも使われています。差分を取るなど一部の機能は使えませんが、バイナリファイルの管理も可能です。ちなみに巷のオープンソース製品の開発は、ほとんどこれを使って行われていたりします。SubversionリポジトリがWebで公開されていて、まずそこからソースをチェックアウトするのが一般的です。
そんな感じでまだ使っていない人は是非使いましょう。基本的にツールはどんどん使ってプログラミングは楽に進めるべきです。何か便利なものがあったらまた紹介します。


追記(ELS):
プログラマ大募集中!未経験者から経験者まで、ドンドンどーぞ!
簡単な自己紹介と「ゲームプログラムやりたい!」って書いてメールしてね!
toiawase(あっと)o-games.info