バージョン管理システムを使おう(Subversion編)

更新ミスっても大丈夫

バージョン管理システムを使った事はあるでしょうか?
Windows 環境に自分だけのバージョン管理システムを構築する方法に関して説明します。
バージョン管理というとシステム開発者のものといった風に思われている方も多いかと思いますが、デザイナーや事務職等の開発者以外の方々でも、利用する事でドキュメント管理に関わる問題を解決する事ができるかもしれません。

はじめに

バージョン管理システム使ってますか?

システム開発に関わる方であれば、当然使ってるでしょ?

といいたいところですが、私のこれまでの経験ではシステム開発会社でも利用していない場合も...

ある会社(バージョン管理システム等は導入されていない)において、担当するプロジェクトを開始するにあたって Subversion (バージョン管理システム) + BTS (バグ管理システム) を導入し、使い方を教えた際には
 

「Github みたいで便利っすね!!」
 私 :  ( Subversionのが先だけどね ... )

「自分も仕事でああいうの使いたいと思ってたんです!!」
 私 :  ( 是非使いこなしてくれ )


と言われた事があります。

その方はデザイナーだったのですが、

エンジニアでなくともバージョン管理システムを利用する事でメリットを享受する事が可能

だと思います。

ここに書いてある事を実践するとなると、ある程度の時間がかかるかと思いますが、利用法をマスターする事で、データのバージョン管理にまつわる問題で浪費する多くの時間を減らす事ができるかもしれません。

写真 : 写真素材ぱくたそ

Subversion

Subversionとは

Subversion は世界中で利用されているバージョン管理システムです。

近年ではGitの台頭によりバージョン管理システム代表格ではなくなりつつありますが、現在も多くのプロジェクトで利用されています。

今後プロジェクトでバージョン管理システムを導入する場合は、Git 等の分散バージョン管理システムの導入を検討すべきだと思いますが、ここでは初心者がバージョン管理のメリットを最短で体験する事を目指し Subversion を利用する事にします。

Subversion概要

Subversion では リポジトリ ( 保存場所 ) に全てのバージョンのデータを保存します。
※利用者 ( 管理者 ) は先ず最初にリポジトリを作成します。

このリポジトリを利用して、大体以下の流れでバージョン管理を行います。

  1. バージョン管理したいデータを登録する ( インポート )。
    通常データの管理者が初期登録を行います。※今回記事では使いません。
  2. 利用者はインポートされたデータをローカルPCに持ってきます ( チェックアウト )。
  3. ローカルPC上でデータを更新します。
  4. 変更内容をリポジトリに反映します ( コミット )。
    前のバージョンとの差分が登録されます。
  5. リポジトリの変更内容をローカルPCに反映する場合、更新します (アップデート)。

subversion概要

※上図では今回説明する方法に併せて作業コピーは一つになっていますが、複数人 ( PC ) による共同作業も可能

Subversion をローカルPC ( だけ ) で利用する

Subversion を利用する場合、サーバを構築してという手順で説明される場合が多いかと思いますが、ここではローカルPC ( Windows ) 上だけで利用できる方法を説明します。

サーバを構築する方が望ましいのは言うまでもありませんが、利用した事がない方が「とりあえずお試し利用してメリットを実感したい」という場合には敷居が高いと思われます。

比較的簡単に利用できるツールを利用して、バージョン管理システムがどのようなものかを掴んでみましょう。

環境

環境は以下になります。
※TortoiseSVNが動作する環境であれば、Windows8.1に限らず実現可能

OS Windows 8.1 Pro
BTS TortoiseSVN 1.8.11

TortoiseSVNは執筆時点で最新の 1.8.11 を利用します。

参考 : TortoiseSVN ( 日本語ドキュメント )

インストール

環境構築手順を示します。

TortoiseSVN の取得

TortoiseSVN からToroiseSVNを取得します。
Download ページからダウンロードします。
利用しているOSに応じて 32-bit / 64-bit の何れかをダウンロードします。

UI を日本語化する場合、日本語 ( Japanese ) の Language packs もダウンロードします ( こちらも 32-bit /64-bit の何れか )。

TortoiseSVNのインストール

ダウンロードしたインストーラを実行します。

  1. インストーラが起動します。
    TortoiseSVNインストール
  2. EULA が表示されるので問題なければ "I accept the thems ... " ( 同意する ) を選択し [ Next ] ボタンをクリックします。
    TortoiseSVNインストール
  3. セットアップする機能の選択画面に遷移します。そのまま [ Next ] ボタンをクリックします。
    TortoiseSVNインストール
  4. インストール確認が表示されます。[ Install ] ボタンをクリックするとインストールが開始されます。
    TortoiseSVNインストール
    開始直後は管理者権限が必要となるため、ダイアログで確認を促されます。
  5. インストール完了画面になります。[ Finish ] ボタンをクリックすれば完了です。

日本語Language Packのインストール

UIを日本語化する場合 Language Packを続けてインストールします。
ダウンロードした Language Pack のインストーラを実行します。

  1. インストーラが起動します。
    [ 次へ ] ボタンをクリックします。
    LangPackインストール
  2. インストールが行われ完了画面が表示されるので、[ 完了 ] ボタンをクリックして終了です。

動作確認

TortoiseSVN は Windows エクスプローラの拡張機能 (シェルエクステンション) として動作します。

エクスプローラで適当なフォルダを選択、右クリックして、表示されるコンテキストメニューに [ TortoiseSVN ] メニュー ( 以下 TortoiseSVNメニュー ) が表示されればOKです。
TortoiseSVNメニュー

初期設定

インストールが無事完了したら初期設定を行います。

言語設定

UIの言語設定を変更します。

  1. [ TortoiseSVN ] メニュー > [ Settings ] をクリックします。
  2. Settings ウィンドウが開くので、[ General ] にある [ Language ] 設定を "日本語(日本)" に設定し、[ 適用 ] ボタンをクリックします。
    Language設定

UIが日本語に設定されます。

リポジトリの作成

Subversionのデータ保存場所であるリポジトリを作成します。

場所を決める

先ずリポジトリの場所を決めましょう。ディスク上の適当なディレクトリを割り当てる事になります。
以下では C:\svn をリポジトリのディレクトリとする事にして話をすすめます。

ディレクトリの作成

保存先として決めたディレクトリが存在しない場合、作成します。
エクスプローラからフォルダの作成を行ってください。

リポジトリの作成

TortoiseSVNを利用してリポジトリを作成します。

  1. リポジトリ保存先フォルダを選択した状態で [ TortoiseSVN ] メニュー > [ ここにリポジトリを作成 ] をクリックします。
  2. 以下ダイアログが表示されるので、[フォルダー構造を作成] をクリックし、その後 [ OK ] をクリックします。
    リポジトリ作成

[ フォルダー構成を作成 ] をクリックした場合、以下フォルダが作成されます。( 裏でフォルダのインポートが行われる )

trunkメインライン
開発のメインラインを保持するディレクトリです。文書管理であれば公開用のドキュメントを保存するディレクトリになるでしょう。
branchesブランチ用
開発を行う場合、新機能をテスト実装したい場合があります。これら変更はメインラインには入れたくありません。こういった場合ブランチ(枝分かれのライン)を作成し、ここに保存します。ブランチで管理された変更は、メインラインに取り込みたくなった時点で trunk にマージします。
tagsタグコピー用
開発を行う中で、リリース時の状態(リビジョン)をマークしたいといった場合にはタグ付けを行います。この場合に利用します。

このフォルダ構成はSubversionを利用する場合の推奨フォルダ構成です。
この記事ではブランチやタグに関しては扱いませんが、今後利用する場合を考えこれらディレクトリは作成しておいた方がよいかと思います。

上記推奨構成を利用した場合、通常、これらディレクトリ下にプロジェクト毎のサブディレクトリを作成する形でデータを管理する事になります。

  • /trunk/project1
  • /trunk/project2

※branches, tags に関しても同様 ( 利用しない場合は作成しなくてもよい )

リポジトリの確認

TortoiseSVNでリポジトリを作成すると、エクスプローラのフォルダアイコンがTortoiseSVNのものに変わります。
リポジトリの中身を確認する場合、リポジトリブラウザを利用します。

  1. リポジトリを作成したディレクトリを選択した状態で [ TortoiseSVN ] メニュー > [ リポジトリブラウザー ] をクリックします。
  2. リポジトリブラウザーウィンドウが開きリポジトリの状態を確認できます。
    リポジトリブラウザ

リポジトリ作成直後なので中身はありません。フォルダー構造を作成した場合には trunk, branches, tags ディレクトリが作成されているはずです。

バージョン管理する

リポジトリが作成されたので実際にファイルのバージョン管理をしてみましょう。

上の概要の部分でも書きましたが、Subversionではリポジトリの内容を一旦ローカルPC上に作業コピーとして取り出し ( チェックアウト/アップデート )、この作業コピーに対して変更を加えた後、リポジトリに反映 ( コミット ) するという流れになります。

作業コピー用フォルダを決める

リポジトリの内容を取り出す場所が必要です。このフォルダ ( 以下作業フォルダ ) を決めましょう。ここでは
c:\svn-work
というフォルダにします。無い場合は作成します。

リポジトリからチェックアウトする

リポジトリの内容を作業コピーとして取り出すにはチェックアウトしなければなりません。

  1. 作業フォルダを選択した状態で [ TortoiseSVN ] メニュー > [ SVN チェックアウト ] をクリックします。
  2. チェックアウトウィンドウが開くので、リポジトリのURLを指定してチェックアウトします。
    チェックアウト
    リポジトリのURLリポジトリのURLを指定します。今回はローカルにあるリポジトリを指定するため file:///... という指定になります。
    C:\svn にリポジトリを作成した場合、file:///c:/svn になります。
    trunk だけチェックアウトしたい場合には file:///C:/svn/trunk と指定します。
    ※[...]ボタンクリックで、リポジトリブラウザを利用したチェックアウト元の選択が可能。
    チェックアウト先のディレクトリ作業フォルダを指定します。上記手順で行った場合、エクスプローラで選択していたディレクトリが設定されているはずです。
    ※[...]ボタンクリックで、フォルダ選択ダイアログを利用してディレクトリ選択が可能

    ※以下ではリポジトリURLとして file:///C:/svn 、作業フォルダとして C:\svn-work を指定したものとして話を進めます。

  3. チェックアウトを行うと以下のようにチェックアウト状態が表示されます。エラーが発生せず完了すればOKです。
    チェックアウト終了

作業フォルダで作業する

チェックアウトが無事行われていれば、C:\svn-work フォルダには trunk, branches, tags サブディレクトリが作成されます。
これ以外に管理用の .svn というディレクトリも作成されます ( 隠しフォルダのためエクスプローラ設定によっては見えない )。

ディレクトリ、及び、ファイルを追加する。

バージョン管理を体験するにあたって、変更内容が判るファイルが必要です。
今回は最もシンプルにテキストファイルを作成してコミットします。
前述の通り、trunk 等のディレクトリ下にはプロジェクト単位等でサブディレクトリを切るのが普通なので、サブディレクトリも作成しましょう。
作成先はメインラインである trunk 下とします。

  1. trunk フォルダ ( C:\svn-work\trunk ) 下にサブフォルダを作成します。
    ここでは test1 ( C:\svn-work\trunk\test1 ) にします。
  2. 作成した test1 フォルダ下にテキストファイルを作成します。
    ここでは sample1.text ( C:\svn-work\trunk\test1\sample1.txt ) とします。
  3. 作成したテキストファイルを開いてテキストを入力します。
    私は以下で設定しました。
    吾輩は犬である。名前はまだない。
    

変更をコミットする

フォルダとファイルを追加したので、この変更をコミットしましょう。

  1. 作業フォルダを選択した状態で [ TortoiseSVN ] メニュー > [ SVN コミット ] をクリックします。
    コミット
  2. コミットウィンドウが開きます。ウィンドウ下部には変更した項目が表示されます。コミットする項目にチェックします。
    ウィンドウ上部はメッセージ入力欄になっています。ここには変更内容を記載しましょう。開発プロジェクトでもコミットの際に変更内容を記載しない不届き者がいてどんな変更が行われたのか判らずに後々カオス状態になる場合があります。
    「個人だし覚えているからいいや!」と思うかもしれませんが、もし大事なデータであるなら変更内容は記載しておいた方がいいでしょう。人間忘れるものです。
    コミットウィンドウ
    コミット対象の選択、及び、メッセージ記入が完了したら [ OK ] ボタンをクリックします。
  3. コミットが行われます。コミットに関しても状態表示が行われます。
    エラーが発生せずに終了していればコミット完了です。 コミットウィンドウ
  4. コミットされたかどうか確認したい場合、リポジトリ作成後と同様にリポジトリブラウザで確認してみましょう。
    test1 ディレクトリ、及び、sample1.txt が追加されているはずです。リビジョンが2になっている事も確認できるでしょう。

ファイルを変更する

リポジトリ上にファイルが登録されたのでこれを変更して、差分管理が行われるか確認してみましょう。

最新版を取得 (アップデート) する

上で作成したテキストファイルを変更しましょう。
とその前に、Subversion を利用している場合、通常はファイル変更を行う前には最新版をリポジトリから取得します。
これらバージョン管理を行う場合、複数人で利用する事がほとんであり、誰か他の人がファイルに対して変更を入れているかもしれないからです。

この場合アップデートします。

  1. 作業フォルダを選択した状態で [ TortoiseSVN ] メニュー > [ SVN 更新 ] をクリックします。
  2. 更新の場合も状態が表示されます。
    更新

※この記事はローカルリポジトリを利用した "ぼっち開発/ぼっち履歴管理" 想定ですが、複数人で作業している事も想定した操作をするようにしておいた方がいいかも。
いざ複数での開発になった際にぼっち時の癖が抜けずに周りとトラブルになったりしないように。

テキストファイルの内容を変更する

最新版が取得できたので、テキストファイルの内容を変更します。

先に書いた内容は一部誤りがあったので以下で保存しなおします。

吾輩は猫である。名前はまだ無い。

再コミット

変更したので再コミットします。前のコミット手順と同様です。
コミットされるリビジョンが3に上がるはずです。

変更履歴を見る

ここからがバージョン管理を利用するメリットになります。変更履歴を確認してみましょう。

  1. 作業フォルダを選択した状態で [ TortoiseSVN ] メニュー > [ ログを表示 ] をクリックします。
  2. ログメッセージウィンドウが表示されます。
    いつ、どういった変更が、誰によって行われたかをここで見る事ができます。 ログメッセージ
  3. ※この手順では作業フォルダのログを表示しましたが、サブフォルダや個々のファイル単位でのログ表示を行う事も可能です。サブフォルダやファイル単位で選択したのちに上記と同様の操作を行ってください。

ファイル内容を比較する

次は変更前と変更後のファイル内容の比較を行ってみましょう。

  1. sample1.txt を選択した状態で [ TortoiseSVN ] メニュー > [ 直前のバージョンとの差分を表示 ] をクリックします。
  2. TortoiseMerge ウィンドウが開き、作業コピー、及び、一つ前のリビジョンとの差分が表示されます。
    差分

    上図では左が直前のリビジョン、右が作業コピーとなっています。
    変更箇所がきちんとマークされているのが確認できます。

    ここでは単純なテキストファイルでの確認ですが、MS Office 文書や PDF等の差分確認も行う事が可能です。( ファイルによってはTortoiseSVNに含まれない外部ツールを利用したり、プラグインを導入する必要があるものがありますが )

任意のリビジョン間で比較する

上は直前のリビジョンと作業コピーの比較でしたが、任意のリビジョン間で比較する事も可能です。

  1. 比較したいファイルを選択した状態で [ TortoiseSVN ] メニュー > [ ログを表示 ] をクリックします。
  2. ログメッセージウィンドウが開くので、比較したいリビジョンを二つ選択します。
    ( 複数選択には Ctrl + 左クリック )
  3. リビジョンを選択した状態で右クリックし、[ リビジョンを比較 ] をクリックします。
  4. TortoiseMerge ウィンドウが開きリビジョン間の差分が確認できます。

前のリビジョンのデータを取得する

何らかの問題で前の版のデータに戻したいという事は、システム開発に限らずあると思います。
バージョン管理を行っていなかったために、記憶をたどって前の状態に戻すといった作業を行った事がある方もいるのではないでしょうか。
バージョン管理システムを適切に利用していれば、こういった問題も解決できます。

作業コピー全体を以前のリビジョンに戻したい

作業コピー全体を以前の状態に戻す事ができます。これは、リビジョンを指定してチェックアウトするか、更新します。
現在の作業コピーを上書きしていい場合更新、何らかの理由で上書きしたくない場合は、作業フォルダをもう一つ作ってそこにリビジョンを指定してチェックアウトすればOKです。

※更新ウィンドウで 任意のリビジョンを指定して更新すればよい。

更新

作業コピーは更新せずに中身だけ見たい。

前のバージョンの内容をちょっと確認したい。作業コピーの変更はしなくてもよいという場合も多いでしょう。こういった場合は以下のようにします。

  1. 確認したいファイルを選択した状態で [ TortoiseSVN ] メニュー > [ ログを表示 ] をクリックします。
  2. ログメッセージウィンドウが開くので確認したいリビジョンを選択し、右クリックして表示されるメニューから [ 開く ] をクリックします。
    ※データによってはうまく開けない場合があるかもしれません。その場合は [ プログラムを指定して開く ] 等をお試しください。

その他

バックアップ

Subversion等のバージョン管理を行った場合、重要なデータがリポジトリに保存される事になります。
バックアップもきちんと行った方がよいでしょう。

バックアップに関して最も簡単なのはリポジトリのディレクトリ ( この記事なら C:\svn ) をバックアップする方法です。
定期的に NAS等の外部ストレージ等にバックアップすればよいでしょう。
この方法を採る場合、リポジトリにアクセスしているプロセスがない状態で行ってください。

よりおすすめの方法は リポジトリのバックアップ に記載されています。

注意点

今回のローカルにリポジトリを作成する方式は複数で利用する事は推奨されていません。
ネットワークドライブにおいて利用する事も可能ですが、これに関しても非推奨となっています。
複数人で利用する場合、別途 Apache+Subversion 等でのサーバ構築を行う方法を検討して下さい。

参考 : リポジトリ

まとめ

今回 Subversion の基本的な機能に絞って説明しました。
ローカルのWindows PCだけで環境を構築できるので、バージョン管理システムを利用した事がないのであれば試してみてはいかがでしょうか。

私は文書管理 (作業メモや、業務で利用するマニュアル等) でもバージョン管理システムを利用していますが、これを使っていた事で助かったという事が結構あります。

  • 開発で問題が発生して前のリビジョンに戻さざるを得なくなった。
  • お客様から過去に途中プレゼンしたバージョンのソースツリー(納品物ではない) が欲しいと言われた。
  • あるメンバーがドキュメントを破壊した(偏見含む)が、バージョン管理システムにも突っ込んでいたために元に戻す事ができた。

過去バージョンを保存する場合には、別ディレクトリ等を作成して行っている場合もあるかと思います。
現場のメンバーのスキルセットによっては、こういった形式を取らざるを得ない場合も多いかと思いますが、バージョン管理システムを導入する方がよいケースもあるでしょう。

チームに導入したいと感じていてもなかなか難しい場合も多いと思いますが、メリットを実感できれば周りを感化して導入につなげるといった事もしやすくなるかもしれません。

バージョン管理なんていらないとお思いの方もいるかもしれませんが、
冒頭で書いたように、若年層はバージョン管理システムとは知らずに既にメリットを享受している場合も多いようで ( 非エンジニアでも )、不要論を強制し続けるようだと「老害」扱いされる日もそう遠くないかもしれません。

もし、食わず嫌い状態であるのなら、試しに使ってみては。
周りを感化できる位になれば、ちょっとは株も上がるかもしれません。

※複数人で利用可能な形で Subversion (+プロジェクト管理ツール)を導入する方法に関しては RedmineをCentOSにインストールする に書いた。

追記
Office 文書を比較するための設定/手順等はまた別記事で書くかも。


バージョン管理システム と プロジェクト・タスク管理システムを連携したシステム導入も可能です。 お気軽にお問合せ下さい。