2011-01-03 月曜日
公式SNES9xのリポジトリをビルドしよう〜来たれコーダー!
あけましておめでとうございます。すっかりTwitterにシフトして新年の挨拶もできてない体たらくでありますが、本年もよろしくお願いいたします。
さて本題ですが、個人的に公式SNES9xにRerecording版の機能追加・バグフィックスをマージしてくださる人を求めています。これまでSNES9xの開発の最前線がどこにあるのかわからず手出ししづらかったのですが、コンタクトを取る中でようやくそれらしき場所を知ることができました。
- Snes9x Git (公式リポジトリ)
- https://github.com/snes9xgit/snes9x
- Snes9x Rerecording (RR版リポジトリ)
- http://code.google.com/p/snes9x-rr/
同じように「パッチ形式で提供してくれ」と言われるのでも、最新のコードにアクセスできるのとできないのでは状況が違います(と個人的に思う)。これを機にマージに着手できればと思うのですが、どうにも時間が経ちすぎて私の気力も落ち気味です。おてつだいやマージ漏れの指摘などしてくださる人がいると、とても助かります。
どうやってビルドするの?(Windows版)
検索サイトからウェブページを開いたとき、ぱっと目当ての内容が見つけられずに他のページに移動した経験はありませんか? 私の場合、すぐにビルド・実行できないプロジェクトには取り組まない傾向があります。
以下の説明では、少しでも興味を持っていただいた皆さんにそんな思いをさせないよう、Snes9x Gitのビルド方法をシンプルに紹介したいと思います。
Gitって、分散型バージョン管理って何?
以前TASer向けにバージョン管理システムでTASプロジェクト管理・共有しよう!という記事でSVNを紹介しました。SVNが「集中型」の管理方式をとっているのに対して、今回取り扱うGitは「分散型」の管理方式をとっているので、両者は少し扱い方が違います。
集中型と分散型の違いについては、分散バージョン管理Git/Mercurial/Bazaar徹底比較 (1/5) - @ITを読みましょう。めんどくさい? それなら、最初のページの図だけ見ることにしましょう。ラーメン大陸と非公式RTの関係よりは、分散型への理解が得られると思います。
ともあれ、わかってもわからなくても、とりあえず使えればいいんです! 次に行きましょう!
Gitクライアントの導入 (TortoiseGit with msysgit)
参考:実用レベルに達したWindows向けGitクライアント「TortoiseGit」でGitを始めよう - SourceForge.JP Magazine
Gitによるバージョン管理のためにTortoiseGitというツールをインストールします。
その前に、TortoiseGitの動作に必要であるのでmsysgitをインストールします。複数のファイルがあってまごつきますが、主流と見られる「Full installer for official Git」の最新版をダウンロードします。インストールは、二つ返事で進めていくだけで完了します。
続いて、TortoiseGitをインストールします。32bitと64bitのインストーラがあるので、お使いのOSにあった最新版をダウンロードしましょう。こちらもインストールは、二つ返事で進めていくだけで完了します。
TortoiseGit日本語化プロジェクトが存在してはいるようですが、執筆時点ではバージョンが古いように見えたので、導入しませんでした。以降、英語のままで利用します。
TortoiseGitを使う
とっても簡単ですよ! 一緒にフォルテッシモしましょう!
クローン
分散型バージョン管理システムでは、手元でファイルの管理を行うために、最初に中央リポジトリの複製(クローン)を作成します。SVNで言えばチェックアウトに相当します。さっそくやってみましょう。
適当なフォルダ(例:C:\snes9xgit\master)を作成して右クリック、メニューから Git Clone... を選択します。
表示されたダイアログのUrlに git://github.com/snes9xgit/snes9x.git を入力してOKを押すと、コードのダウンロードが開始されます。
ダウンロード完了後フォルダを開くと、バージョン管理されたファイルがチェックマークのアイコンつきで表示されることが確認できます。
※チェックのアイコンが表示されない場合は、再度 TortoiseGit のインストーラを起動して、Repair ボタンで構成を復元して再起動してみましょう。
おまけ:コミットについて
Gitなどの分散管理方式でいう「コミット」は、中央リポジトリ(クローン作成元)ではなく、先ほど作成したローカルのリポジトリ(クローン)に対して行われます。SVNと違って、自分の都合で好きなようにコミットすることができるので、コードを変更したいときは便利に活用しましょう!
コミットや、ファイルの追加・削除、変更の差し戻し(Revert)などは、TortoiseSVNの操作と同じです。難しい操作ではありませんが、必要ならバージョン管理システムでTASプロジェクト管理・共有しよう!など、ウェブ上の説明を探してみると良いでしょう。
なお、コミットの際にはバージョン管理に利用する名前とメールアドレスを尋ねられます。適当な内容を入力して続行してください。
ライブラリの追加
snes9x/win32/snes9xw.sln を Visual Studio で開いてビルドするだけ! とはいきません。コンパイルに必要な各種ライブラリはリポジトリに配置されていないからです。
以下、必要なライブラリです。(執筆時点から変更されている可能性にご注意ください)
- Windows SDK (v7.0以降, Visual Studio 2010 C++ で Windows SDK v7.1 を使うには?)
- DirectX SDK
- Cg Toolkit (for OpenGL)
- その他のライブラリ (一括ダウンロード, 中身をsnes9xディレクトリと同じ階層に配置することで利用可能、Cg Library は自分でパス設定が必要)
- zlib & libPNG (自分でビルドする, x86/x64)
- FMOD 3 Final Version & FMOD Ex (x86/x64, ダウンロード前にバージョンに関する後述の注意を参照)
- (その他将来的可能性として、Lua、Anti-Grain Geometry v2.4)
- Visual Studio Express だと、リソースのコンパイルに一手間いる様子。参照:Visual Studioで作ったプログラムをVisual C++ 2010 Expressに移植する
ライブラリに関するいくつかの注意があります。
- 最新のFMOD Exを導入すると、「FMOD_OUTPUTTYPE_OPENAL が定義されていません」と言われます。FMOD_OUTPUTTYPE_OPENAL は2010年7月1日に削除されたようなので、最新版の代わりに 4.30.14 stable を導入することで解決できます。
-
最新のDirectX SDKを導入すると、リンクの際に「DxErr9.libが見つかりません」と言われます。これはCDirect3D.cppの#pragmaの記述を#pragma comment( lib, "DxErr9" )から#pragma comment( lib, "DxErr" )に変更することで解決できます*1。
パッチの作成
SNES9xのフォーラムで「コードを更新したいのであれば、diffを作成して貼ってくれ」と言われたので、自身の変更を取り込んで欲しいときは、unified diff 形式の差分を Snes9x.com Forum 等に貼ってレビューしてもらわなければなりません。
TortoiseGit の機能でパッチを作成する方法を以下に示します。んー、ちょっと変わった形ですね?
- 変更後の内容はローカルリポジトリにコミット済みの状態にしておきます。
方法1. format-patch (推奨?)
- 一番上のディレクトリを右クリックして、Create Patch Serial... をクリックします。
- Version を Range にして、From に変更前、To に変更後のリビジョンを指定します。
- OKを押すと、Directory で指定されたディレクトリにリビジョン分のパッチが作成されます。
方法2. diff
- Diff with previous version をクリックします。
- Version 1 (Commit Data New) に変更後、Version 2 (Base) に変更前のリビジョンを指定します。
- 個々のファイルに Compare revisions を実行することができるので、個別に Create unified diff file を実行してパッチを作成します。
その他の追加情報
個人的に学んだことを、ごく簡単に記しておきます。
- Gitもリポジトリに対する「branch」を作成することができる。執筆時点でsnes9xgitには3つのbranchがあった。
- Githubには「fork」という機能がある。自分のアカウント上に、既存リポジトリのクローンを作成して、派生版を開発することができる。fork上の更新は「Pull Request」で本家に取り込み要望を出すことができる。
- Githubのリポジトリに共同開発者を追加するときは、Adminボタンから「Collaborator」を追加する。これにより、追加されたメンバーは、Githubリポジトリへのpushが可能なURLを得ることができる。
- リポジトリにpushするには、然るべき手順で認証を行わなければならない。詳しくは、TortoiseGit github - Google 検索。手順にしたがってエラーとなるときは今一度 Help.GitHub - Generating SSH keys、Help.GitHub - Troubleshooting SSH issues 参照。
- どういうわけかGithubを日本語表示していると、アカウント設定の「SSH公開鍵情報」に「私たちのRSAフィンガープリントは」の文字列だけが表示され、肝心の値が見られない。
まとめ
みんなでSNES9xの足りないところを足していきましょう! ヾ(*>ヮ<)ノ゙




