2011/09/05
KAICHO: s_naray[at]yahoo[dot]co[dot]jp
※SPAM防止のため捻ってある

吉里吉里/KAGゲームのインストーラの作り方(Windows 7対応)

■はじめに

本ページでは、(Windows 7 にも対応した)吉里吉里/KAGのインストーラを作成する 方法について述べる。述べるというかもう一意に示しちゃう。なぜか インストーラに関する話題って殆ど無いんだよね、吉里吉里って。そりゃまぁ そんなに困るような話じゃないのかもしんないけど、でも最初のとっかかりが無いと 実際インストーラ作る時に困っちゃうし、ということで。

■使用するインストーラを選ぶ

インストーラを自分で作ろうと思っている人には、可能な限りやめといた方がいいと 忠告したい。アナタが本当にやりたいことはゲームを作ることであって、 インストーラを作ることではないはずだ。 何のためにインストーラを作りたいのか?どうしても新規作成しないとダメなのか? 既存のもので代用できないのか?を常に考える。新規で作るということは、 作成・テストに手間がかかるということで、それだけ「余計」であることを 認識すること。

もちろん、なんとしても新規インストーラを作らねばならん、どうしてもXXという 機能が必要だから!ということであれば、新規にインストーラを作ることは止めない。 しかし、本当にその機能は必要なのか?についても、熟考すべし。

で、ここではさくさくと既存のものを使うことにする。 比較してるサイトもあるが、我輩はメジャーどころで Inno Setup 5を 使うことにした。テキストファイルベースなのでちょっと敷居は高いが、 日本語での解説サイトもあるし、 サンプルも色々くっついてきている。逆にテキストファイルベースだから 「作り方」の保存は楽だ。 Inno Setup 5は、インストールするファイルを一つの実行ファイルに纏めて くれるので、エンドユーザに対して使い方を明示する必要がない(要するに動かせって ことだな!と判る)というメリットもある。よしこれだ!

…正直、Inno Setup 5使うなら、 Gutchieさんのところの解説が非常に丁寧で纏まってると思う。 ここを読みなされ。さすればもうこの後読む必要まるでなし(いいのか)。 インストール方法なんかももうここでは説明しない(いいのか)。

■インストール仕様を決める

本書では、ゲームのインストール仕様を以下のように決め、以下ではこれを実現 するためのスクリプトを書いたり解説したりする。

  1. 現在作成中のゲームは「我輩ゲーム」という名前とする(センスとか聞くな!)
  2. 現在開発中のファイルは全て D:\同人ゲーム\我輩ゲーム\ 以下に存在する
  3. ゲームファイル(とフォルダ)は以下の通り、いずれも2.のフォルダ直下に存在する
  4. インストーラはsetup.exeという名前とし、2.下の\インストーラ フォルダに格納する
  5. サークル名はKeepCreating、サークル連絡先は以下とする
  6. アンインストーラ(unins000.exe)をインストール先ディレクトリに配置する
  7. デフォルトで「デスクトップ」及び「スタートメニュー」にゲームへの ショートカットを作成する

■Windows Vista/7での注意点

「吉里吉里/KAGはWindows7未対応」という話がある。まぁうん、確かに 本家の動作環境の対応OSにWin7はない。 本家がそういうのならそうなんだろう。 とはいえ、現在Win7はWindowsシェアでトップになりそうなイキオイなので、 それを無視するわけにはいかないという現実もある。 本家には是非早急にWin7対応を謳って頂きたいものだ。というか、Vista対応 謳っておいて7対応を謳わないのは、ただ確認が面倒だからとかそれだけの 理由なんじゃないだろうか…。なんか問題あるのかな。
で、じゃぁ実際Win7では動かないの?と聞かれると、64bit版を含め、 うん大体動く、ということが既に先達の実験により判っている。

Win Vista/7で困るのは、ずばりUAC(User Access Control)、主にデータファイルの 書き込み時に問題が発生する(他にもいくつか細かい不具合はあるが、 まぁそれは目をつぶることができなくもないのでここでは省略。詳細は最下部 参考URLをチェッキッタゥ)。

具体的には、「UACが有効なとき、または制限つきユーザが、C:Program files 以下に ゲームをインストールし、ゲームのセーブデータをゲームと同じ場所に保存する時」 に問題になる。Win2k/XPでもそうだが、 制限つきユーザは C:Program files 以下にファイルを作成することはできない、 Vista/7ではUACが有効だと一般ユーザもそゆことできなくなったため。 なんでMicrosoftはそういういろんなものの根幹に関わる変更をびっくりするくらい さくさく許してしまうのか。

これを解決する方法はいくつかある。

  1. インストール先としてC:Program filesを許可しない(例えばC:\GAMES\などにする)
     → いかにも頭悪くない…?
  2. データ保存フォルダのパーミッションを「Everyone フルコントロール」にする
     → セキュリティ的に大丈夫か?マルチユーザで使う時はどうする?
  3. セーブデータの保存先を、"%APPDATA%ゲーム名" 以下に固定する
     → 今までのユーザ(セーブデータはゲームディレクトリ以下にあると知っているユーザ)は混乱しないか?
色々考えたが、我輩は最後の3.を推したい。これが初心者に最も優しく、 最もセキュリティ上の問題がなく、マルチユーザに対応し、最も新たな問題が 起きにくいと思うから。環境変数 %APPDATA% はOSによって異なるので、以下に メモしておく。 で、「セーブデータはゲームディレクトリ以下にあると知っているユーザ」のために、 ゲームディレクトリにはダミーで"savedata"というディレクトリを掘って、そこに 「セーブデータは上の場所に移動しました」みたいなドキュメントをひとつ入れて おくと親切。上のインストール仕様で述べた「savedata/Readme.txt」が これに該当する。

なお、 セーブデータの保存場所の変更方法はこちら。我輩は.cfファイルは作らない派。

■実際のInno Setup 5の設定ファイル例

ということで、ここまでの設定を満たす設定ファイルはこちら。 これをInno Setup 5のエディットウィンドウに貼り付けてbuildするだけで インストーラが完成する。これだけならInnoEditXは不要。 ただ、InnoEditXのscript欄にこれを貼り付ければ、どう設定しているかわかりやすく なるだろう。

[Setup]
Compression=bzip/9
AppContact=master@keepcreating.com
DefaultGroupName=我輩ゲーム
AppVersion=1.00
AppPublisherURL=http://www.keepcreating.com/
AppUpdatesURL=http://www.keepcreating.com/update.html
AppSupportURL=http://www.keepcreating.com/support.html
AppPublisher=KeepCreating
UninstallFilesDir={app}
UninstallDisplayName=我輩ゲーム
OutputDir=D:\同人ゲーム\我輩ゲーム\インストーラ
OutputBaseFilename=setup
DefaultDirName={pf32}\我輩ゲーム
AppVerName=我輩ゲーム Ver 1.00
AppName=我輩ゲーム
SetupIconFile=D:\同人ゲーム\我輩ゲーム\インストーラ\ゲームアイコン.ico
WizardImageFile=D:\同人ゲーム\我輩ゲーム\インストーラ\インストーラ1.bmp
WizardSmallImageFile=D:\同人ゲーム\我輩ゲーム\インストーラ\インストーラ2.bmp

[Files]
Source: "D:\同人ゲーム\我輩ゲーム\我輩ゲーム.eXe"; DestDir: "{app}";
Source: "D:\同人ゲーム\我輩ゲーム\data.xp3"; DestDir: "{app}";
Source: "D:\同人ゲーム\我輩ゲーム\plugin\*"; DestDir: "{app}\plugin";
Source: "D:\同人ゲーム\我輩ゲーム\savedata\*"; DestDir: "{app}\savedata";
Source: "D:\同人ゲーム\我輩ゲーム\readme.txt"; DestDir: "{app}";

[Icons]
Name: "{group}\我輩ゲーム"; Filename: "{app}\我輩ゲーム.eXe";
Name: "{group}\アンインストーラ"; Filename: "{app}\unins000.exe";
Name: "{group}\ReadMe"; Filename: "{app}\readme.txt";
Name: "{commondesktop}\我輩ゲーム"; Filename: "{app}\我輩ゲーム.eXe";

[Languages]
Name: "jp"; MessagesFile: "C:\Program Files\Inno Setup 5\Languages\Japanese.isl";

こうやって作成したインストーラバイナリが、Win2k(32bit)、WinXP(32bit)、 Win7(64bit)で共通してちゃんと動作することを確認している。

■もちょっと細かい説明

細かい説明は以下の通り。これらのパラメータが全て必ずしも必要なわけではないし、 他にも沢山細かい指定ができたりするんだけど、まぁそれはおいおい。 あと、{app}とか{group}、{pf32}などは定数。Inno Setup 5のヘルプで「Constants」を 引けば詳細説明が出てくるが、それは英語。日本語のは…うーん、InnoEditXで [Setup]タブの[デフォルトインストール先]右のボタン押して出てくるのを 参照してみては如何。個人的には{pf}じゃなくて{pf32}を指定すべき(吉里吉里には 64bit版がないので)だと思うのだがどうだろうか。

セクション(灰色)・パラメータ名値の例意味
[Setup] - インストーラ全体で利用する一般的な値を設定するセクションの開始を表す
Compression= zip、bzip/9、lzma, noneなど インストーラ内部の圧縮形式を指定する。圧縮しなければ指定不要
AppContact= a@b.com コンタクト先メールアドレスを指定する。指定されていると、 「プログラムの追加と削除」のところに「サポート情報を参照するには、ここをクリックしてください」というリンクが現れ、押すとサポート情報として表示される。
DefaultGroupName= 我輩ゲーム グループ名を指定する。Windowsのスタートメニューに登録する時のフォルダ名だと思って頂ければ。
AppVersion= 1.00 ゲームバージョンを指定する。ただ、通常ゲームは全体バージョンアップせず、 パッチ形式でバージョンアップしていくので、これは逆に指定しない方がいいかも しれない。
AppPublisherURL= http://www.keepcreating.com/ サークルのホームページを指定する。指定されていると(以下AppContactと同じ)
AppUpdatesURL= http://www.keepcreating.com/update.html サークルの製品更新ページを指定する。指定されていると(以下AppContactと同じ)
AppSupportURL= http://www.keepcreating.com/support.html サークルのサポートページを指定する。指定されていると(以下AppContactと同じ)
AppPublisher= KeepCreating サークル名を指定する。指定されていると(以下AppContactと同じ)
UninstallFilesDir= {app} インストール後にアンインストーラ(unins*.*)が設置される場所を指定する。
UninstallDisplayName= 我輩ゲーム 「プログラムの追加と削除」に表示される名前
OutputDir= D:\同人ゲーム\我輩ゲーム\インストーラ インストーラの作成先を指定。もちろん、作成後のインストーラは任意に移動してよい。
OutputBaseFilename= setup 作成するインストーラのファイル名(.exeを除く)
DefaultDirName= {pf32}\我輩ゲーム インストール先のデフォルトフォルダ名。{pf}だと64bit版Win7なんかに インストールした時にもC:Program Files\ ... に変換されるが、{pf32}だと C:Program Files(x86)\ ... に変換される。WinXP 32bit だとちゃんと C:Program Files\ ... になるので、まぁうんこう書いておけばいいかなー、と。
AppVerName= 我輩ゲーム Ver 1.00 バージョン名を含むゲーム名を指定。指定されていると 「プログラムの追加と削除」で表示されるプログラム名となる。あとインストール する時にダイアログに表示するプログラム名もこれに。
AppName= 我輩ゲーム ゲーム名を指定する。いろんなところで使用されるので間違えると恥ずかしい。
SetupIconFile= D:\同人ゲーム\我輩ゲーム\インストーラ\ゲームアイコン.ico インストーラのアイコンを指定する。
WizardImageFile= D:\同人ゲーム\我輩ゲーム\インストーラ\インストーラ1.bmp インストーラの最初の画面で左側に表示される縦長画像を指定する。 サイズが164x314dotと決まっているので注意。 詳細はここいらへん
WizardSmallImageFile= D:\同人ゲーム\我輩ゲーム\インストーラ\インストーラ2.bmp インストーラの右肩に表示される画像を指定する。 サイズが55x58dotと決まっているので注意。 詳細はここいらへん
[Files] - インストールするファイルをリストする。Source:が現在ファイルが存在する 場所、DestDirがインストール先フォルダ。
Source: "D:\同人ゲーム\我輩ゲーム\我輩ゲーム.eXe"; DestDir: "{app}";
Source: "D:\同人ゲーム\我輩ゲーム\data.xp3"; DestDir: "{app}";
Source: "D:\同人ゲーム\我輩ゲーム\plugin\*"; DestDir: "{app}\plugin";
Source: "D:\同人ゲーム\我輩ゲーム\savedata\*"; DestDir: "{app}\savedata";
Source: "D:\同人ゲーム\我輩ゲーム\readme.txt"; DestDir: "{app}";
この例では、5つのファイル・フォルダを、{app}(=インストール先)に ディレクトリ構成を保ったままインストールする。
[Icons] - Iconsという名前だが、要するにインストール後にショートカットをどう 作成するかを指定する。
Name: "{group}\我輩ゲーム"; Filename: "{app}\我輩ゲーム.eXe";
Name: "{group}\アンインストーラ"; Filename: "{app}\unins000.exe";
Name: "{group}\ReadMe"; Filename: "{app}\readme.txt";
Name: "{commondesktop}\我輩ゲーム"; Filename: "{app}\我輩ゲーム.eXe";
この例では、以下の二つを実施する。
  1. スタートメニューに{group}(=DefaultGroupName)で指定した サブディレクトリを掘り、そこに「我輩ゲーム」、「アンインストーラ」、「Readme」 という三つのショートカットを登録する
  2. デスクトップ上にインストール先の「我輩ゲーム.eXe」へのショートカットを「我輩ゲーム」という名で作成する
[Languages] - インストーラの表示言語を決める。最初から日本語で表示させたいなら必須。
Name: "jp"; MessagesFile: "C:\Program Files\Inno Setup 5\Languages\Japanese.isl";
インストーラが日本語で表示されることを指定。

■残作業

あとは、CD-RなりDVD-Rなりの上に、上で作成したインストーラ(上の例ではsetup.exe)と、以下のような内容のautorun.infファイルを配置するだけ。これで、CD-R/DVD-R挿入 したらオートランしてインストーラが起動するディスクが出来上がる。簡単ね!

[autorun]
open=setup.exe 
icon=setup.exe

Win Vista/7とかだと、インストーラが起動されるときに「なんやらファイル書き換え そうなツールが動くけどええかのぅ?続けるなら管理者権限必要じゃけぇどのぅ」 みたいなダイアログが表示されるが、 もうこれはOSレベル(本当はshellレベルだと思う)で 避けられないので対策はしない。マニュフェスト書いたら云々みたいな話はあるが、 我輩はそんなの書かないでユーザに色々知らせた方がいいんじゃないか派。

■おわりに

うん、Inno Setup 5、便利だ!ちょっと捻ろうと思ったら なんかPascal(うわー懐かしー)っぽい言語で色々書く必要があるそうだが、 まぁそこまでやらなくてもそれっぽいものはごく簡単に作れるということで。 同人レベルだったら、できればゲームファイルは纏めずにそのままCD-ROM上に配置して おけた方が、「最後の手段で手でコピーする」というのが使えてハッピーだと 思うが、まぁうん…そのくらいはいいか。

2015/11/24追記。 こちらでご指摘頂いたとおり、ゲームファイルを纏めずにそのままCD-ROM上に 配置することはできる。確かに上の書き方は誤解を招く表現で、 これを見て「できないんだー」と思ってしまった方々には本当に申し訳ない。 伏してお詫び申し上げる所存…。
一方、インタァネットの集合知が有効に機能してることには 感動を禁じえない。指摘歓迎!

■参考URL