🌊

Inno Setupを利用しGithub ActionsでUnityアプリをインストーラーを作成する手順

2025/01/18に公開

はじめに

この度、MidraLabコミュニティからOSS uDesktopMascot をリリースしました。
デスクトップ上でVRMなどの3Dモデルを表示するアプリケーションになります!

https://x.com/ayousanz/status/1878474281098805641

https://github.com/MidraLab/uDesktopMascot

今回は、このアプリケーションのインストーラーを様々な方法で作成する方法を紹介します。

背景

インストーラーにするメリット

https://x.com/i/grok/share/svqJFWfLseJRsIPrUlKzDCnpK

個人的には、アンインストールする際に関連するファイルを一度に削除できることや、更新時に複数の同じアプリが共存することなく更新できる点が良いと思っています。

ローカル環境でインストーラにする

以下の記事を参考にしました。
https://ci-en.net/creator/16842/article/1326580

Inno Setup のインストール

下記のURLからインストーラーセットアップソフトをダウンロードします。
https://jrsoftware.org/isinfo.php

Inno Setup のセットアップ

Create a new script file using the Script Wizardを選択して、OKを押します。
alt text

Nextを押します。
alt text

application名バージョンパブリッシャー名アプリケーションWebSiteを入力し、Nextを押します。
alt text

Application folder nameには、団体/アプリケーション名を入力するのがよさそうです。
alt text

以下のようにインストールした先に団体/アプリケーション名が入ります。
同じ団体で複数のアプリケーションを出した場合に一緒にまとめられてフォルダが整理できるのでよさそうです。
alt text
Nextを押します。

実行ファイルのパスを指定と実行するのに必要なファイルやフォルダを指定します。
alt text
この二つを指定します。
alt text
alt text
Nextを押します。

とりあえず変更なしでNextを押します。
alt text

インストーラーの実行時にショートカットを作成するかどうかだったりその設定をします。
Defaultの設定のままNextを押します。
alt text

ライセンスファイルやアプリに関する設定ファイルのパスを指定したりします。
alt text

続いて、管理者権限でインストールするかどうかを選択します。
alt text

アプリのセーブデータを保存するときに使ったりするレジストリの設定もできます。
alt text

アプリのサポートする言語を選択します。
alt text

インストーラーをどのフォルダに出力するかとそのインストーラーの名前を指定します。
alt text

出力されるissファイルのコードを読みやすいものにするかどうかを選択します。
alt text

これで設定完了です!
alt text

インストーラーの実行

ここではいボタンを押すと、インストーラーができます。
alt text

Github Actionsでインストーラにする

以下のレポジトリを参考にしました。
https://github.com/Minionguyjpro/Inno-Setup-Action

Workflowを見てみる

https://github.com/MidraLab/uDesktopMascot/blob/92e05a790019074f25d7c60ce9c1cd4085dd014e/.github/workflows/build.yml#L114-L141

Game CIというサービスがあり、そこでUnityのビルドを行っています。
https://game.ci/

ビルドの成果物がbuildというフォルダに入るようになっています。

その後、Inno Setup Actionを使って、プロジェクトのRootにあるsetup.issを実行してArtifactsにインストーラーを出力しています。

issファイルの設定

ビルドの成果物があるbuildフォルダとその中にある実行ファイルのパスを指定しています。
https://github.com/MidraLab/uDesktopMascot/blob/92e05a790019074f25d7c60ce9c1cd4085dd014e/setup.iss#L45C1-L47C110

インストーラーをArtifactsにアップロードするためパスを合わせます。
https://github.com/MidraLab/uDesktopMascot/blob/92e05a790019074f25d7c60ce9c1cd4085dd014e/setup.iss#L33-L34

https://github.com/MidraLab/uDesktopMascot/blob/92e05a790019074f25d7c60ce9c1cd4085dd014e/.github/workflows/build.yml#L136C6-L141C59

これで実行すると、ArtifactsにインストーラーができArtifactsにアップロードされます。

おまけ

ビルドしたアプリのバージョンをインストーラーに反映する

Unity側でビルド後にPostBuildProcessor.csを実行して、ビルドしたアプリのバージョンを指定の形でテキストファイルに書き込むようにします。

https://qiita.com/tetr4lab/items/1cf4e5e01d71d73a276e

// ビルドしたアプリのバージョン
var appVersion = PlayerSettings.bundleVersion; 
// バージョンを書き込むファイルのパスをissファイルと同じ階層にします。
var configFilePath = Path.Combine(Path.GetDirectoryName(examplePath), "..", "..", "setup.txt"); 
// インストーラーの設定ファイルにバージョンを書き込む
var configText = $"#define MyAppVersion \"{appVersion}\""; 
File.WriteAllText(configFilePath, configText);

ビルド後に以下のようなテキストフォルダができます。

#define MyAppVersion "1.0.0"

以上のテキストファイルをissファイルで読み込むようにします。

[Setup]
; バージョン設定を読み込む
#include "setup.txt"
; バージョン設定からバージョンを取得する
#define AppVersion GetFileVersion("Input\" + AppExec)

AppName={#AppName}
AppVersion={#AppVersion}

; このようにすることでインストーラーのファイル名にバージョンを含めることができます。
OutputBaseFilename=uDesktopMascot_win64_installer_{#AppVersion}

つまづいたところ

issファイルはアンダースコア(_)のファイル名のテキストファイルは読み込めないというのに数時間費やしました。

inno_setup_setup.txt <-- これは読み込めない
innoSetupSetup.txt <-- これは読み込める

https://stackoverflow.com/questions/6498750/how-do-i-automatically-set-the-version-of-my-inno-setup-installer-according-to-m

GitHubで編集を提案
MidraLab(ミドラボ)

Discussion