CSRのプログラマな皆さん、楽しくプログラミングしてますか?
ソフトウェアを作るのは楽しいですが、ある程度の規模になるとバックアップを取る必要が生じたり、前回いじった箇所のメモや次やるべきことを管理したくなってきます。
「バックアップは変更するたびに開発フォルダ全体を圧縮して・・・」
「変更点はテキストにメモしてバックアップと一緒に・・・」
「やることはTODOをコメントしとくか・・・」
なんてやろうとしてませんか?そんなのはHDDの無駄だし1日の作業の変更点なんかメモしきれない、TODOコメントも優先度を考慮しだすと管理仕切れませんよね。
じゃあどうすりゃいいのさ?
つ Subversion
Subversion(以下SVN)とは上記のような問題を解決するバージョン管理システムと呼ばれる部類のソフトです。バージョン管理システムとして有名なのはCVSなどがありますがSubversionはCVSの改良版で便利な機能が満載です。機能例を挙げると、
等々、いろいろあります。
SVNは本来複数人での開発を管理するためのソフトですが個人での利用でも非常に便利だと思います(複数人での開発の場合はむしろ必須と言って良い)。
皆さんも積極的に使って良いソフトを作りましょう!
SVNはサーバ・クライアント型のソフトです。データを一元管理するサーバに複数のクライアントがアクセスします。
SVNでは一つの開発に関わるファイル群をリポジトリという単位で管理します。使い方は次のような流れになります。
1〜3を繰り返して開発を進めます。変更点は差分で記録されるので丸ごとバックアップよりHDD効率がよく、いつどこを変更したか等が確実に記録されます。
複数人での開発の場合は1つのファイルを同時に変更してしまう場合もありますが、それぞれの変更箇所が重ならない場合はうまく変更を統合(merge)してくれますし、各ユーザの更新の統計なんかも記録されます。
サーバもクライアントも無料のものがあるのでそれを使いましょう。
まずはサーバです。私は自分のサーバマシンにインストールしましたがそれが困難な場合もあるので今回は外部サーバを使用することにします。
無料でそれなりに自由に使えそうなWebスペースを探したら↓のサイトが見つかりました。
http://www.assembla.com/
暗号化通信は使えませんが1プロジェクトあたり200MBのスペースが無料で使えます。
登録が必要なのでさくっと登録してしまいましょう。
一応、例をあげておきます。不要な方は読み飛ばしてください。
#ref(): File not found: "001.jpg" at page "Subversionのすすめ"
#ref(): File not found: "002.jpg" at page "Subversionのすすめ"
#ref(): File not found: "003.jpg" at page "Subversionのすすめ"
アカウントが作成されました。#ref(): File not found: "004.jpg" at page "Subversionのすすめ"
#ref(): File not found: "005.jpg" at page "Subversionのすすめ"
#ref(): File not found: "006.jpg" at page "Subversionのすすめ"
#ref(): File not found: "007.jpg" at page "Subversionのすすめ"
#ref(): File not found: "008.jpg" at page "Subversionのすすめ"
『SVN Url』が今回作ったリポジトリのURLになります。次にクライアントです。上記のスペースを利用する場合は『Source/SVN』ページから『Browse your code repository』をクリックしてもアクセスできますが、あまり見やすくないし変更も加えにくいのでクライアントソフトをインストールしましょう。
CUI版の例: CollabNet? Subversion Command-Line Client v1.5.4(http://www.collab.net/downloads/subversion/)
GUI版の例: TortoiseSVN 1.5.5(http://tortoisesvn.net/downloads)
CUI版はNetBeans?やEclipse等の統合開発環境(IDE)に組み込むときに便利です。(NetBeans?はCollabNet?のものがEclipseはSubclipseというのが対応しているようです。)
GUI版のTortoiseSVNはWindows限定でエクスプローラを拡張するのでインスト後にPC再起動が必要だったりとちょっと面倒ですがGUIでリポジトリを操作できるので後は楽です。また、エクスプローラから操作するのでIDEがSVNのサポートしていなくても使用できます。
今回はTortoiseSVNをインストールしてみましょう。
ではリポジトリにアクセスしてみましょう。
#ref(): File not found: "rp_brw.jpg" at page "Subversionのすすめ"
#ref(): File not found: "009.jpg" at page "Subversionのすすめ"
管理したいファイルをまとめてリポジトリに入れるには『インポート』を使用します。
まずは元となるデータを用意します。現在開発中のプロジェクトフォルダ等ですね。今回はVCで新たにHello,Worldプロジェクトを作り、そのフォルダを管理してみます。
プロジェクトフォルダ(.vcprojファイルが入っているフォルダ)の右クリックメニューから『TortoiseSVN』→『インポート』をクリックします。
#ref(): File not found: "010.jpg" at page "Subversionのすすめ"
リポジトリのURLを選択し、ログメッセージを入力します。ログはずっと残るので変更内容がわかるような内容にしてください。
インポートが開始されるとサーバのリポジトリに無いファイルが追加されていきます。『完了』と表示されたら『OK』をクリックしてください。
これで手元のデータでリポジトリが更新できました。リポジトリブラウザで確認してみてください。
ツリーにファイルが追加されていますね。右クリックして『ログを表示』をクリックしてみましょう。今までのリポジトリの変更(1回しかしてませんが)が表示されます。ログメッセージも表示されていますね。
『リビジョン』とはリポジトリのバージョン番号です。これはリポジトリに変更が加えられるたびにインクリメントされます。リビジョンはリポジトリ全体に付けられるので、どのファイルが変更されても全体のリビジョンが更新されます。
つまりリビジョンを指定することでリポジトリの過去の状態にアクセスすることができるのです。
次に手元にリポジトリの作業コピーを作りましょう。インポートしてもそのフォルダは作業コピーになりません。作業コピーを作るにはサーバから『チェックアウト』します。
プロジェクトフォルダ内で右クリックメニューから『チェックアウト』をクリックします。
リポジトリURL・チェックアウトディレクトリ・リビジョンを確認して『OK』をクリック。リポジトリから情報が送られ、チェックアウトディレクトリが作業コピーになります。(作業コピーフォルダ及びその中のファイル・フォルダにはアイコンに印が付きます。)
#ref(): File not found: "011.jpg" at page "Subversionのすすめ"
チェックマークはコミットする必要がないことを示しています。
では適当に作業コピー内のファイルを変更してみましょう。アイコンのマークが『チェック』から『!』に変化します。『!』はファイルに何か変化があり、まだコミットされていないことを示しています。
#ref(): File not found: "012.jpg" at page "Subversionのすすめ"
『!』が付いているファイルまたはフォルダの右クリックメニューから『TortoiseSVN』→『変更をチェック』をクリックしてみましょう。変更があったファイル一覧が表示されます。
ファイル一覧から変更したファイルをダブルクリックすると差分が表示されます。
#ref(): File not found: "013.jpg" at page "Subversionのすすめ"
変更を確定し、リポジトリを更新するには作業コピーフォルダの右クリックメニューから『SVNコミット』をクリックします。コミットが完了するとアイコンのマークが『チェック』に戻ると思います。
特定のファイルだけをコミットしたい場合はコミットしたいファイルの右クリックメニューからコミットしてください。
開発作業は常に同じ場所で行われるとは限りません。家ではデスクトップPCで開発、出先ではノートPCで開発、といったことはよくあることです。また、複数人での開発では同じPCでは同時に開発できませんね。
そんなわけで異なる場所に複数の作業コピーが作られることは自然です。そのような場合には作業コピーに変更を加える前に更新(update)しましょう。更新するとリポジトリのファイルより古いファイルが更新されます。つまり作業コピーを最新の状態にするわけですね。
どこで開発しようと作業前に更新、作業後にコミットすることでどこでも開発可能、しかも変更されたファイルだけ更新されるのでプロジェクト全体をやり取りするより効率的です。
また、複数人開発ではファイルが同時に更新されることもあります。例えばAさんとBさんがそれぞれhoge.cというファイルに変更を加えた場合、Aさんがコミットした後、Bさんがコミットしようとすると衝突が起こります。もちろんBさんが上書きなんてしてしまうとAさんの作業結果が消されてしまいますね。
SVNでは変更ファイルの衝突があった場合、変更箇所が互いに影響しない場合は自動的にマージされます。互いに影響がある場合は競合といい、自分で解消(A,Bどちらの変更を優先するか選択)する必要があります。
TortoiseSVNの詳しい使い方は説明書を読んでください。SVN自体の説明も結構書いてます。
また、最初にTODOに関する話題を少し出しました。SVNのログメッセージを使えばちょっとしたTODOのメモはできますがあまりオススメできません。
1つのTODOは、
ソフトウェア開発では変更点の記録、複数の場所での同期などが問題になります。バージョン管理システムやその他の便利なサービスを利用して効率良くプロジェクトを管理し、一歩進んだソフトウェア開発ができるようになりましょう。