独りバージョン管理の勧め

    • ギミックを大胆に改造したけど何か違う。しかし元にも戻せない

    • イベントツリーをDeleteで削除した直後にCtrl+S

    • 改変した画像をうっかり元画像に上書き保存

    • シナリオの保存中にエディタが落ちてデータが半壊

シナリオの作成中、上のような経験はありませんか?

結果として失われるものの大小はあれど、実データと共に気力へ甚大な被害を被る点では変わりありません。注意していても、不慮の事故は避けられません。創作を続ける限り、誰にでもいつかは降りかかる災厄です。

こんな時、シナリオのデータを、バックアップしていれば。

いや、もし、シナリオの過去の変更が全て記録されていて、いつの段階にでも戻せるようになっていれば。

果たしてそのような事が可能なのでしょうか。

出来る。出来るのだ。

いにしえよりの知恵――バージョン管理ソフト

その昔、ソフトウェアをチームで開発しようとした人々がいました。

しかし人々はそれぞれソースコードを勝手に改造し、上書き保存する事甚だしく、ソフトウェアはあっという間にめちゃくちゃになってしまいました。

そんな状況を改善するにはどうすればいいか? 大和魂で何とかする? いやいや、およそ精神論では物事は解決しません。

そこで、具体的テクノロジーで何とかしようとして登場したのがいわゆる「バージョン管理ソフト」です。

こいつは次のような特徴を持っています。

    • まず、データ全体の保管庫を用意する。

    • 保管庫内のデータは上書きされず、過去の全てが保管されるようにする。

    • そんな保管庫を手動で管理してたら大変すぎるので、保管庫アクセス用の専用プログラムを持っている。

    • そのプログラムはいくつかの簡単なコマンドで操作できる。例えば……

        • 「チェックアウト」というコマンドで、手元に最新のデータのコピーを作れる。

        • 手元のデータを変更した後、「コミット」というコマンドで保管庫に送る事ができる。

        • 他の人がコミットしたデータは、「アップデート」というコマンドで保管庫から取り出して、

        • 手元のデータに反映させる事ができる。

    • 「コミット」するたびに新しく全体のデータを保管しなおすとデータ量が増えすぎるので、

    • コミット前とコミット後のデータの差分だけを保管するようにして……

    • ついでにある時点のデータにタグをつけたり分岐できるようにしたり……

これによって、好き勝手変更されても元に戻せるし、他の人の変更を簡単に手元に引っ張ってこられるしでチームでソフト開発する事が割と楽になったそうな。

独りでシナリオを作る場合、他の人のコミットしたデータを手元に反映して……とかいう機能は、いりませんしかし、過去のデータが全て保管されるというのは、まさに必要としていた特徴です。当然、過去のある時点のデータを引っ張ってくる事ができるので、悲劇の発生前に戻す事だってできます。

どのソフトを使うか

バージョン管理ソフトの初登場から長い時間が経って、今ではその系列のソフトもたくさん登場、群雄割拠の戦国時代となっています。おかげでその中から使い勝手のいいソフトを選ぶということもできます。

個人的に、CardWirthのシナリオ作りで一番使いやすいのは、「Subversion」というソフトじゃないかなー、と思っています。

バージョン管理ソフトは元々プログラマ向けに発明されたものなので、大抵のソフトはいわゆる「こまんどらいん」で「てきすとこまんど」をカタカタ打って操作を……という、こんなもんやってられるか的な使い方しか出来ません。

しかし、Subversionは状況が違います。「TortoiseSVN」という、Subversionにマウスなどで操作できる画面をくっつけたソフトが存在します。こいつを使わない手はありません。

さらに言うなら、バージョン管理は例によってプログラマ向けなので、大抵はテキストデータを管理する事に特化しているのですが、Subversionは画像やら何やらのテキストじゃないデータもきちんと扱えるように作られています。

CardWirthのシナリオデータは、メモ帳で開いてみるとわかりますが、テキストじゃありません。テキストみたいに管理されては困ります。なのでSubversionです。

で、具体的にどうするの?

とりあえずTortoiseSVNを拾ってきましょう。Subversion本体も同梱されているので、これ一つダウンロードすれば済みます。あっと、日本語で使いたい場合は言語パックも必要ですね。

TortoiseSVN - Downloads

上のサイトから、二つほどファイルを落としましょう。

32 Bit版のWindowsを使っている人は、

    • TortoiseSVN 32-Bit

    • 下のほうの「Language packs」という所から17番の「Japanese」の「Setup」(32 Bit)

64 Bit版のWindowsを使っている人は、

    • TortoiseSVN 64-Bit

    • 下のほうの「Language packs」という所から17番の「Japanese」の「Setup」(64 Bit)

をダウンロードします。

TortoiseSVN本体→言語パックの順でダブルクリックしてインストールしましょう。OSと一体化して動くソフトであるため、再起動を求められるので注意してください。

自分が使っているWindowsが 32 Bit か 64 Bit か調べるには?

Windows Vista以降なら、「コンピュータ」アイコンの上で右クリックしてプロパティを選ぶと、OSの情報が出ます。

(図) Windows Vistaのコンピュータのプロパティ

Windows XP以前なら、だいたいは32ビットと考えて問題ないと思います。XPの64ビット版なんてマニアのためのものだしー。

そしたらどうなる?

TortoiseSVNをインストールした後、デスクトップ上で何気なく右クリック。すると。

(図) TortoiseSVNのメニュー。「チェックアウト」や「リポジトリブラウザ」など

なんかメニューが増えてます。

「チェックアウト」という言葉が見えますね。先ほど書いた通り、これは「保管庫からデータを取り出して、手元にコピーを作る」事を意味します。

「リポジトリブラウザ」という言葉も見えますね。横文字でも恐れることはありません。「リポジトリ」というのが、実は保管庫の事です。「リポジトリ」の「ブラウザ」、要は保管庫の中身を見るよ、という事です。

そして「ここにリポジトリを作成」という言葉があります。つまり今すぐ保管庫(リポジトリ)を作成してデータの管理をはじめる事ができるという事です。

ここまでで行き詰まっていなければ、めでたくSubversionを使う準備が整いました。では、実際にやってみましょう。

リポジトリの作成とシナリオ管理の開始

まず、先に保管庫を作ってみましょう。適当な場所に空っぽのフォルダを作成します。

(図) リポジトリ用のフォルダを作る

そのフォルダの中で右クリックして、「TortoiseSVN」→「ここにリポジトリを作成」を選択。すると、

(図) リポジトリの作成が完了したとのダイアログ

(図) リポジトリフォルダの中身

なんだかよくわからないファイルやフォルダがたくさん出来ましたが、恐れる事はありません。こいつらの管理はSubversionがやってくれます。むしろ保管庫内のデータが破損する恐れがあるので、自分の手で触ってはいけません。

この状態で右クリックして「TortoiseSVN」→「リポジトリブラウザ」を選ぶと……

(図) リポジトリブラウザ

なんだこの画面はぁ!

実は保管庫の中身を表示しています。保管庫を作ったばっかりなので、まだファイルが一つも入っていないというわけです。

では、ここに入れるシナリオを作成していきましょう。もちろん、すでに存在しているシナリオを使っても構いません(練習無しでやるのもどうかと思うけどね……)。

さて、いつものようにシナリオを作成します。CardWirthEditorでシナリオ名を入力してOKを押せば、自動的にシナリオのフォルダとSummary.wsmが作られます。

(図) シナリオの作成。シナリオ名は「孤独のSVN」

(図) シナリオフォルダ

で、これを保管庫に入れるにはどうすればいいの? さっき、「保管庫からデータを引っ張ってきて……」と言ったよね? 手順が違うんじゃね?

心配ご無用。逆に「保管庫にデータを押し込む」という機能だって用意されているのです。

右クリックして「TortoiseSVN」→「インポート」を選ぶと次のようなダイアログが表示されます。

(図) リポジトリへのインポート

「リポジトリのURL」には、先ほどリポジトリブラウザを開いたときに「URL:」というところに表示されていたものを使います。TortoiseSVNが覚えていてくれるので、何も触る必要はないでしょう。

インポートメッセージは別に書かないでもいいですが、後から変更履歴を見たときにちょっと便利なので、「最初のデータ」とか何とか書くのもいいでしょう。OK。

(図) リポジトリへのインポート完了

かくしてインポートが完了しました。改めてリポジトリブラウザを開くと、Summary.wsmが入っているのが確認できると思います。

ここでやにわにシナリオフォルダ上で再び右クリックして「SVN チェックアウト」を選択。するとこんなダイアログが出ます。

(図) チェックアウトのダイアログ

なんだかよくわからない事がたくさん書いてありますが、あらかた無視して大丈夫です。

ただ、「チェックアウトディレクトリ」だけは別です。手元のデータ(専門用語で作業コピーといいます)は、この例の場合、「孤独のSVN」フォルダにすでに入っています。「孤独のSVNのリポジトリ」なんてフォルダの中に新しく作業コピーを作られても困ります。削ってしまいましょう。

ちなみにディレクトリというのはフォルダの別名です。

(図) チェックアウトディレクトリを編集した

これでOKを押すと、いきなりダイアログが出て脅されます。

(図) ターゲットフォルダが空じゃないという警告

なんでこんな警告が出るかというと、チェックアウトによって手元にファイルが送られてくるので、そのファイル名が既存のファイルと被ると上書きされてしまうため、です。

しかしこの場合、手元に出来てくるはずの作業コピーとターゲットフォルダ内にあるデータは完全に一致するはずなので、上書きとかされても何の問題もありません。「はい」を押して強行しましょう。チェックインの時と同じようなダイアログが出て、成功するはずです。

さて、チェックアウト後のフォルダは次のようになります。

(図) チェックアウト後のシナリオフォルダ

「.svn」という隠しフォルダができています。

隠しなので、隠しファイルを見えない設定にしていると見えないかもしれません。別に見なくても問題ないです。そして、Summary.wsmには謎のチェックマークが(マークが出るまでにタイムラグがあることもあります)。これは、「Subversionを使って管理してるよ」というマークです。

緑のチェックマークが出てる時は、「リポジトリにあった時のまま、変更してないよ」という意味です。なので、ファイルの中身を編集すると……

(図) Summaryの編集

(図) 編集後のフォルダ

赤い「!」マークが出ました。「このファイルは変更されたよ」マークです。

これを保管庫に押し込むには、「コミット」というコマンドを使います。実は、チェックアウトしたフォルダで右クリックすると、「SVN コミット」というメニューが増えています。

(図) バージョン管理されたフォルダでの右クリックメニュー

これを選べばいいわけですね。

するとダイアログが出て、変更したファイルの一覧が表示されます。これを保管庫に押し込む事に問題なければ、OKを押しましょう。

(図) コミットダイアログ

チェックインの時と同じようなダイアログが出て、無事に完了するはずです。Summary.wsmのマークも「変更してないよ」マークに変わったのではないでしょうか。リポジトリ内のファイルが更新されて手元のデータと同じになったので、「変更してないよ」状態になったわけです。

さて、無事に保管庫に入ったようなので、今度はエリアやら素材やらを追加してみましょう。

(図) ファイル追加後のシナリオフォルダ

今度は追加されたファイルに「?」マークがついています。これは「保管庫にはこんなファイル無いよ? 全然関係ないファイルじゃね?」というマークです。

これを「いや、お前に関係あるよ」と保管庫に教えてやる専用のコマンドもあるのですが、TortoiseSVNならそんなコマンドを使う必要はありません。気にせず「SVN コミット」してみましょう。

(図) コミットダイアログ。追加したファイルの一覧

「関係ないかも?」なファイルも一覧に表示されています。ただし、ファイル名の左側のチェックボックスに、チェックが入っていません。

ここにチェックを入れると、「これも保管庫に入れるよ!」という目印になります。また、一番下の「全て選択/全て非選択」にチェックを入れると、全てのファイルにチェックを入れたり、チェックを解除したりする事が出来ます。

(図) チェックを入れた

この状態でOKを押せば、追加したファイルが保管庫に入って、緑のチェックマークがついた状態になるはずです。

この繰り返しで、どんどん保管庫にデータが蓄積されていきます。

さて、ミスったぞ

月日は流れ、シナリオの製作も進み、ファイル数も増えて、完成に近づいてきました。

そんなとき、悲劇が起きます。とあるキャスト用画像を改変して表情をつけようとしたところ、うっかり元の画像に上書きしてしまったのです。

(図) 表情改変前

(図) 表情改変後

とりあえず改変後の画像は別のファイル名で保存し直すとして、元となったファイルを以前の表情に戻すのは非常に面倒です。

しかし、心配ご無用。今の我々にはSubversionという強い味方がいます。

慌てず騒がず、改変後の画像を別のファイル名にして保存しなおします。そして、うっかり変更してしまったファイルの上で右クリックし、「TortoiseSVN」の中を見ると……

(図) 元に戻すメニュー。ちなみにVista付属の「以前のバージョンの復元」は役に立たない事が多い

「元に戻す」があるじゃあないか!

まさに必要だったそのコマンドを選択し、出てきたダイアログでOKを押せば、最後にコミットした時点より後の変更が取り消されます。

こうして、無事に元の画像を取り戻す事ができました。

さて、この「元に戻す」、個々のファイルに加えてフォルダ全体に対して適用する事も可能です。

つまり、

    • イベントツリーをDeleteで削除した直後にCtrl+S

    • 改変した画像をうっかり元画像に上書き保存

    • シナリオの保存中にエディタが落ちてデータが半壊

こまめにコミットさえしていれば、上に挙げた悲劇はことごとく回避可能、という事になります。

もっと昔に戻すには?

さて、この記事のはじめ、筆頭に挙げた悲劇がこれです。

    • ギミックを大胆に改造したけど何か違う。しかし元にも戻せない

改造中に何度かコミットしているとすれば、直前のコミット時点に戻せるだけでは不足です。もっと前まで遡れなければなりません。そう、大改造をはじめる直前まで。

心配ご無用。最初にバージョン管理ソフトの紹介をしたとき、書いたはずです。保管庫には「過去の全てが保管される」と。

過去の全ての履歴を見るには、フォルダ上で右クリックして、「TortoiseSVN」→「ログを表示」を選択します(この時ファイルの上で右クリックすると「そのファイルだけのログ」が出ちゃうので注意しましょう)。

すると、過去のコミットの履歴が出ます。

(図) コミットログ。都合により作者列を隠しましたがご了承下さい

ここで、戻したい時点のコミットの上で右クリックしてみると、「このリビジョンに戻す」というメニューが見えると思います。

リビジョンというのは、バージョン番号みたいなものだと思ってください。コミットするたびに増えていく番号です。

(図) 右クリックメニュー。「このリビジョンに戻す」

さて、「このリビジョンに戻す」コマンドを実行すれば、手元のデータを、その時点の状態まで戻せます。なんだかよくわからないメッセージのダイアログが出るかもしれませんが、構わず「はい」を押しましょう。

(図) こんなメッセージ出されてもわかるか、の図

さて、手元のデータは改造前に戻りました。

しかし、保管庫内のデータまで過去に戻ったわけではありません。大改造後のデータもきちんと保管されています。

実際、過去に戻した手元のファイルには「変更したよマーク」がついているはずです。これは、保管庫にある最新のデータと違うからです。過去に戻したのだから当然と言えます。

この状態でもう一度コミットすることで、この「過去のバージョン」を保管庫上の最新版とする事ができます。

後で「やっぱりあの改造があった方が……」と思ったら、「過去データを上書きする直前に戻す」ことだって出来ます。

かくして平和が訪れた……が、しかし

さて、こうして数々の悲劇を回避する事に成功した我々ですが、ここにもう一つ新しい問題が発生します。

いよいよシナリオが完成し、フォルダを圧縮してWebにアップロード……ちょっと待った!

そのフォルダには、あの「.svn」が入っていませんか? それを圧縮したら、シナリオのサイズが物凄く増えちゃうよ?

「.svn」を消してから圧縮する? まあ、それでもいいですが……後で戻してくださいね。バージョン管理できなくなっちゃいますよ。

さて、今までバージョン管理用のフォルダとして我々を助けてくれた「.svn」ですが、ここに来てお荷物となってしまいました。

Subversionには、このお荷物を回避するだけのために、専用の機能がわざわざ用意されています。適当なフォルダで右クリックしてみましょう。

(図) TortoiseSVNのメニュー。「エクスポート」

エクスポートというやつがあります。これを使うと、「.svn」を含まない状態で、保管庫の中身を手元にコピーしてくることが出来ます。それを圧縮すればいいわけです。

面倒ですね。

俺は面倒が嫌いなんだ。

しかし、上に挙げた数々の悲劇を回避するためなら、許容してもいい程度の手間ではないかと、個人的には思います。

おわりに

一度失ってしまったものを作り直すと、もっとよいものが出来上がる傾向にあります。この記事の内容を実践することは、悲劇転じての作り直しのチャンスを逃すことに繋がるのかもしれません。

しかしながら、データが吹き飛ぶというのは基本的には困った事態なのです。何より気力へのダメージが甚大なのです。下手をすると、シナリオ自体がお蔵入りになるという、最大の悲劇の幕開けとなるかもしれません。

そういうわけで、より多くのシナリオが、無事に作成され、世に出てほしいという想いから、この記事を書くことに決めました。少しでもお役に立てば幸いです。

それでは皆さん、よいCardWirthライフを。

あ、そうだ、この記事の内容に加えて、保管庫のバックアップを忘れないようにね。ハードディスクはいつか絶対壊れるからね!