Hatena::ブログ(Diary)

悟茶辞苑ッ このページをアンテナに追加 RSSフィード

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... を選択します。

f:id:GOCHA:20110103111458p:image

表示されたダイアログのUrlgit://github.com/snes9xgit/snes9x.git を入力してOKを押すと、コードのダウンロードが開始されます。

f:id:GOCHA:20110103114150p:image

ダウンロード完了後フォルダを開くと、バージョン管理されたファイルがチェックマークのアイコンつきで表示されることが確認できます。

f:id:GOCHA:20110103114129p:image

※チェックのアイコンが表示されない場合は、再度 TortoiseGit のインストーラを起動して、Repair ボタンで構成を復元して再起動してみましょう。

おまけ:コミットについて

Gitなどの分散管理方式でいう「コミット」は、中央リポジトリ(クローン作成元)ではなく、先ほど作成したローカルのリポジトリ(クローン)に対して行われます。SVNと違って、自分の都合で好きなようにコミットすることができるので、コードを変更したいときは便利に活用しましょう!

コミットや、ファイルの追加・削除、変更の差し戻し(Revert)などは、TortoiseSVNの操作と同じです。難しい操作ではありませんが、必要ならバージョン管理システムでTASプロジェクト管理・共有しよう!など、ウェブ上の説明を探してみると良いでしょう。

なお、コミットの際にはバージョン管理に利用する名前とメールアドレスを尋ねられます。適当な内容を入力して続行してください。

ライブラリの追加

snes9x/win32/snes9xw.sln を Visual Studio で開いてビルドするだけ! とはいきません。コンパイルに必要な各種ライブラリはリポジトリに配置されていないからです。

以下、必要なライブラリです。(執筆時点から変更されている可能性にご注意ください)

ライブラリに関するいくつかの注意があります。

  • 最新の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. 変更後の内容はローカルリポジトリにコミット済みの状態にしておきます。
方法1. format-patch (推奨?)
  1. 一番上のディレクトリを右クリックして、Create Patch Serial... をクリックします。
  2. Version を Range にして、From に変更前、To に変更後のリビジョンを指定します。
  3. OKを押すと、Directory で指定されたディレクトリにリビジョン分のパッチが作成されます。
方法2. diff
  1. Diff with previous version をクリックします。
  2. Version 1 (Commit Data New) に変更後、Version 2 (Base) に変更前のリビジョンを指定します。
  3. 個々のファイルに 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 keysHelp.GitHub - Troubleshooting SSH issues 参照。
    • どういうわけかGithubを日本語表示していると、アカウント設定の「SSH公開鍵情報」に「私たちのRSAフィンガープリントは」の文字列だけが表示され、肝心の値が見られない。

まとめ

みんなでSNES9xの足りないところを足していきましょう! ヾ(*>ヮ<)ノ゙

*1:「DXERR9ライブラリはDirectX SDK August 2009で削除されました」とのことなので、最新のDirectX SDKではなく DirectX SDK (March 2009) を利用することでも解決できます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/GOCHA/20110103/compile_snes9x_git