ごちゃログぴこっ

はなまるデジタル創作紀行(DTM、TAS、いろいろな技術)

バージョン管理システムでTASプロジェクト管理・共有しよう! 〜初心者向けSVN入門〜

「TASプロジェクトの管理にバージョン管理システムSVN)を使ってみてはどう?」という、よいこのTASさん向けのおはなし。

ちなみに Subversion は2016年現在も現役ですが、後発の Git というバージョン管理ツールが流行しています。

バージョン管理システムってなぁに?

Wikipediaのページには「ソースコードやその他のデータを管理するために用いられるシステム」と書かれています。これではちょっと、なにができるのかよくわからないですよね。もう少しわかりやすいイメージを与えるのに、ここではバージョン管理システムwikiのファイル版というたとえで表現したいと思います。

Wikipediaをはじめ、昨今の世の中にはwiki形式のサイトが多々あります。誰でもどこからでもページを読むことができて、書くこともできる。変更前の内容は自動的にバックアップされて、更新に問題があったときには、以前のバージョンに差し戻ししたり、ほかの人の更新内容を併合(マージ、くっつけること)したりできます。変更には変更内容を書いておくことができるので、あとからでも履歴を見ればいつなにを変更したのか一目瞭然です。wikiは幅広い操作で文書のバージョン管理を可能にしているシステムなのです。

バージョン管理システムを使うと、普段扱ういろいろなファイルにそれができるようになるのです!

導入のメリット

adelikatさんがフォーラムでメリットについて言及したことがあります。大意を訳して引用するとおおむね次のような感じです。

  • 複数人でのファイル交換が簡単にできる(多人数でもOK!)
  • 更新履歴をつけることができる
  • 各変更に対してコメントすることができるため、作者や観衆が身近に交流できる
  • 観衆が最新のWIP(途中経過)に手軽にアクセスできるようになる
  • あらゆる時点のバックアップを自動作成することができる
  • テキストベースのムービーファイルに対しては差分を取ることができる
  • 結果的に遅かったほかの戦略のムービーも同様に保存・公開することができる
  • フレーム比較のための表計算シートも同様に保存・公開することができる
  • botを通じてIRCチャンネルに更新通知することができる
  • さまざまな場所からアクセスして取り組むことができる(ユビキTAS!)

集団でのソフトウェア開発を強力に支援するバージョン管理システムは、単独でTASムービー制作に用いる場合でも十分強力なのです!

導入に必要なもの - Google CodeとTortoiseSVN

また、wikiになぞらえながら必要そうなものを挙げてみましょう。wikiで文書を書くには、wikiのシステムが動いているサーバ(例: wikipedia.org)と、wikiに書き込みするためのクライアントアプリケーション(例: ウェブブラウザ)が必要です。匿名での書き込みを禁じているようなシステムなら、書き込みにはアカウントが必要なこともあるでしょう。

今回、バージョン管理システムを導入してみるにあたっても、それらのものが必要です。

アカウントとサーバ - Google Code

Google Code はサービスが終了しています。類似のホスティングサービスには GitHubCodeplexSourceforge などがあります。TAS 関係のエミュレータGitHub 上で開発されています。

この紹介では、シンプルで扱いやすいGoogle Codeのプロジェクトホスティングを利用します*1。これを利用するにはGoogleアカウントが必要ですので、アカウントのない人はGoogleアカウント作成ページで作成しましょう。日本語でごく簡単な事項を入力するだけなので、苦労はないと思います。なお、Gmailのアカウントを持っている人は、メールアドレスにつけた名前ですでにGoogleのアカウントを取得していますので、新規に登録する必要はありません。

アカウントが取得できたら新規にプロジェクトを作成します。英語のページですが、さほど熱心に英語を読まなければならない場面はないのであまり心配はいりません。困ったときは検索と翻訳サイトでなんとかなります。また、もし既存のプロジェクトに参加したいのであれば、アカウント名をオーナーに伝えれば対処してくれると思います。

Googleにログインした状態で、Google Codeのプロジェクトホスティングページ(英語)にアクセスして、ページ下部の「Create a new project」をクリックします。

プロジェクト作成ページが表示されるので、必要な項目を入力してプロジェクトを作成します。

Project name
プロジェクト名です。再編集できない最重要項目です。アルファベット小文字とハイフン(-)のみで記述します。プロジェクトを作成後 http://code.google.com/p/プロジェクト名/ のページ(以降プロジェクトのページ)*2から各種リソースにアクセスできるようになります。

Google Codeでは、1アカウントあたりのプロジェクト数に制限があります(現在の上限は25?)。rondoofbloodプロジェクトのようにゲームごとにプロジェクトを作成すると、いつかはその上限に達してしまう可能性も否定できません。その観点からすれば、gochatasのように個人用のTASプロジェクトをひとつ作って、そのサブディレクトリで各種プロジェクトを進行させる方がいいかもしれません。このあたりは個人の裁量に任せられます。

残りの項目はあとから変更可能です。一応、必須項目についてごく簡単に記しておきます。

Project summary
プロジェクトに関する1行の説明。4文字以上。
Project description
より詳細なプロジェクトの説明。書くことがなければ1行説明をコピーしてもかまいません。4文字以上。
Version control system
バージョン管理システムの種類を指定します。以降の紹介に沿う場合はSubversionを選択してください
Source code license
プロジェクトに適用されるライセンスです……TASプロジェクトに適当なソフトウェアライセンスってなんなんでしょうね*3。各ライセンスの詳細は検索すれば簡単に見つかりますので、好きなものを選んでください。わからなければ MIT License あたりを選んでおけば、比較的ゆるめで無難だと思います。
Project labels
いわゆるタグです。つけたければつけてもよいですが、つけなくても問題はありません。

うまくいけば、プロジェクトのページが作成されます。利用にあたって、次はクライアントアプリケーションをインストールしましょう。

クライアントアプリケーション - TortoiseSVN

TortoiseSVN(英語)は、エクスプローラからのSubversion(以下SVN)の各種操作を可能にする、Windows用のシェル拡張型クライアントです。ページは英語ですが、TortoiseSVNそのものは日本語サポートがされているので安心してください。

インストールはとても簡単。Downloadページの上の方にある本体インストーラと、Language packsセクションのJapaneseSetupをダウンロードして、それぞれを実行してインストールするだけです。インストール完了後、右クリックメニューにTortoiseSVN関連の項目が追加されているはずです。もし日本語になっていなければ、メニュー TortoiseSVN → Settings からダイアログを出して、Languageから日本語を選んでOKしてください。再起動要求があった場合は再起動してください(アップグレード時は再起動しなくても問題ないかもしれません。もちろんした方が無難ですが)。

Windowsユーザの方はごめんなさい。検索して探してみるときっとよいクライアントと出会えると思います。コマンドベースの操作体系を覚えると、どのプラットフォームでも通用するかもしれません。

操作の基礎 - アップロードとダウンロード

プロジェクトを作成したら、早速ファイルのアップロードやダウンロードを試してみましょう。

バージョン管理システムでは、ファイルを溜めておくサーバの空間をリポジトリと呼びます。また、リポジトリに対してファイルをアップロードする操作をチェックインコミットと呼び、ダウンロードする操作をチェックアウトと呼びます。なじみのない言葉かと思われますので、以降の説明ではアップロード、ダウンロードと書きます。

なにはともあれ、まずはプロジェクトからファイルをダウンロードします。空のフォルダをひとつ作成して、右クリックメニューからSVNチェックアウトを選択します。

ダイアログにはいくつか項目がありますが、リポジトリのURL以外は初期状態のままでOKです。肝心のURLですが、プロジェクトのページのSourceタブを見ると、コマンドラインでのアクセス例が次のように示されています。

# Project members authenticate over HTTPS to allow committing changes.
svn checkout https://プロジェクト名.googlecode.com/svn/trunk/ プロジェクト名 --username アカウント名
When prompted, enter your generated googlecode.com password.


# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://プロジェクト名.googlecode.com/svn/trunk/ プロジェクト名-read-only

英文はおおよそ「プロジェクトのメンバはhttps経由で変更をアップロードできます。パスワードを求められたら、設定ページにあるものを入力してください。メンバでない人もhttp経由でのダウンロードは可能です」ということを述べています。今回はプロジェクトのメンバとしてリポジトリに操作をすることを想定していますので、https://プロジェクト名.googlecode.com/svn/trunk/ のURLを入力してOKしてください。認証が出たら、ユーザ名にはGoogleのアカウント名を、パスワードにはGoogle Code 設定ページに記されているパスワードを入力してください。認証を保存しておくと、次回以降の操作でこの入力を省略できるので便利です。

初回ダウンロード操作が完了すると、ダウンロードされたファイルがチェックのアイコンつきで表示されているかと思います。新規プロジェクトの場合も、空のフォルダにアイコンがついた状態になるはずです。このアイコンは、ファイル・フォルダがバージョン管理システムで管理されている証です。

さて、空のプロジェクトでは意味がありませんので、続けてリポジトリに新規ファイルをアップロードしてみましょう。プロジェクトのフォルダにアップロードしたいファイルを入れて右クリック、TortoiseSVN → 追加からファイルを管理下に追加してください。

ファイルが管理下に追加されると、緑色だったチェックマークのアイコンが赤色の!マークアイコンに変わるはずです。この赤色の!マークアイコンは送信対象のファイルにつけられるものです。管理下にはあるけれどリポジトリに存在しないファイルや、リポジトリの内容から変更されているファイルにこのアイコンがつけられます。既存のファイルを更新したいときには、ファイル内容を変更するだけで自動的にこのアイコンに切り替わります。

この段階では変更が認識されただけで、ファイルは送信されていません。ファイルを送信するには、プロジェクトのフォルダを右クリックしてSVNコミットを選択します。

出てきたダイアログに更新内容を書いてOKすれば、その内容がリポジトリに送信されます。wiki同様、自分と他人の変更が衝突してしまったときは警告が出て中断されますが、そうでない多くの場合はすぐに送信が完了します。

これでプロジェクトに無事ファイルが追加できました。最後に、手元の管理ファイルを最新の状態に更新する方法を紹介します。ファイルはほかの人が更新する可能性もありますから、作業前には最新の状態に更新する癖をつけておくことが大事です。

とはいっても、難しいことはなにもありません。プロジェクトのフォルダを右クリックして、SVN更新を選択するだけです。

おめでとう! きょうからあなたも立派なSVN充です!

追加情報 -ちょっとしたあれこれ-

ここまでの情報でもプロジェクトを扱えるはずですが、ちょっとしたTipsを簡単な形で記しておきます。

ファイルの削除はどうするの?

紛失扱いを防ぐために、右クリックメニューのTortoiseSVN → 削除から削除します。普通の手段で消して紛失扱いになってしまった場合も、アップロード時にダイアログでテキストの状態削除に切り替えれば削除操作が可能です。

ファイルの移動・名前の変更はどうするの?

右クリックメニューのTortoiseSVN → 名前の変更からおこないます。ディレクトリ移動を伴う場合「ディレクトリ名\ファイル名」のように相対パスを指定すればOKです。

新しいファイルをコピーして、古いファイルを削除することでも実質的には移動が可能です。しかしながら、ファイルのログの引き継ぎに影響するので、こうした手段で変更することが望ましいです。

プロジェクトの履歴はどうやってみるの?

プロジェクトのページからUpdatesページを開くと、変更の一覧があります。フィードも同ページからリンクされていますから、Google Reader等でプロジェクトの最新情報を追うこともできます。

もちろん、変更履歴はTortoiseSVNからも閲覧が可能です。プロジェクトのフォルダを右クリックして、TortoiseSVN → ログを表示を選択すると、変更の一覧を閲覧することができます。

ファイルを古い内容に戻すにはどうするの?

ファイルを右クリックして、TortoiseSVN → 特定のリビジョンへ更新を選択します。最新のリビジョンではなくリビジョンを選択、横のボックスにリビジョン番号を入力してOKすれば、古いファイル内容に戻すことができます。

現行のリビジョンに存在しないファイルを元に戻す方法はいろいろあるかと思いますが、ログから対象リビジョンを選択、対象ファイルを右クリックして、リビジョンを保存などで受信できます。あとは適当にプロジェクトに追加し直せばOKです。

プロジェクトへのメンバ追加はどうするの?

まず、プロジェクトのページから Administer → Project Members と進んでください。

Project ownersリポジトリ・プロジェクト設定へのあらゆる変更が可能な人、Project committersはファイルへの変更はできてもプロジェクト設定は変更できない人、Project contributorsは非メンバと権限は同じですが、明らかに何らかの役回りにいる人です(例: テストユーザ)。

いずれかふさわしい欄に、追加したい人のアカウント名を書き込んでください。改行区切りでよいので、適当に新しい行を追加して名前を書けばOKです。書いたら Save changes で変更を保存してください。

branches、tags、trunkってなぁに?

おしえてあげないよ、ジャン!

知らなくても十分Google Codeは扱えます。興味があれば調べてみよう!

通常は trunk というディレクトリに最新のファイルを置きます。SourceForgeなどのように、svn最上位のURLがリポジトリURLとして書かれている場合、末尾に /trunk を付け足してチェックアウトするのが無難かと思われます。

Google Code はリポジトリ以外にも機能があるの?

Downloadsページにファイルをアップロードして公開したり、Wikiページに簡単な書式でページを作成したり、Issuesページで不具合情報を集積・管理したりできます。単純明快ながら強力な機能です。

IRCチャンネルに変更を通知するのはどうするの?

CIA.vcというサービスを利用すると、IRCチャンネル(たとえばfreenode上のチャンネル、日本でよく使われているWIDEは対象にないかも)に更新通知botを呼び出すことができます。詳細な解説は省きますが、大まかな手順は次の通りです。

  1. Google Code側のAdministerページからSourceサブページに移動(最上段のタブではない)。最下段のPost-Commit web hooksの、Post-Commit URLhttp://cia.vc/deliver/simplejson/ を設定する。
  2. CIA.vc のアカウントを取得する。
  3. アカウント設定ページからBotsを開いて、Add bot...をクリック。対象チャンネルにbotを召還する。
  4. チャンネルに関する設定より、Basic FilteringFilter by projectに改行区切りでプロジェクト名を羅列してSave。複数プロジェクトを書く場合は、とくにPrefix each commit with its project nameにチェックをおすすめ。

このような手順で通知できるようになります。設定の反映には若干の遅延がありますが、さほど時間をかけず動くようになります。

最初の項目1.の、Google Code側でのURL設定だけでもしておくと、ほかの人がCIAのbotを好きに召還できるようになって、利便性が広がるかもしれません。個人的には「とりあえずやっておく」ことをおすすめします。

番外: ソースコードにリビジョン番号を含めるにはどうするの?

TortoiseSVN付属のSubWCRevを使えばできます。TASと関係ないことなので、詳細は検索したり、DeSmuMEのソースコードをチェックアウトしたりしてお確かめください。

さいごに -TASerとバージョン管理システムのおつきあいのはじまり-

世は大オープンソース時代。インターネットを通じてたくさんの人がソースコードを書き換えて、大きなソフトウェアが作られるこの時代。そういった資産をより効率的に扱うべく開発されたバージョン管理システムは、その便利さから多くの場で使われるようになりました(たぶんね!)。

TAS向けのエミュレータ開発も、かつてはひとりが中心に立って管理されているような形でしたが、昨年頃から積極的にプロジェクトがGoogle CodeやSourceforgeに移動されて、今ではすべてのエミュレータバージョン管理システムのもとで開発されています(詳細なリポジトリの情報はこちら: TASVideos / Emulator Resources / Development)。

そして今年、夏になる頃に「悪魔城ドラキュラX 血の輪廻」のTASがsubmitされました。投稿者テキストの中で、このTASは3名が公開リポジトリ上で作り上げたものだと記されているのを見たとき、わたしは「動画制作にバージョン管理システムを導入する手もあるのか!」衝撃を受けました。

このスタイルはまだ、流行しているというほど広がっているものではありませんが、その便利さゆえか一部の積極的な動画制作者の間で盛んに用いられています。ムービー制作のひとつのスタイルとして、TASerの皆様の選択肢に加えてもらう価値はあるのではということで、こうしてささやかながら紹介することにしました。TASerの方々の活動の一助になれば幸いです。

*1:他のサービスに関しては、OSSホスティングサービスの比較 - Wikipediaに多くのサービスが列挙されています。

*2:http://プロジェクト名.googlecode.com/ も利用できます。

*3:参考: TASVideos Forum - License about the movie input files