デスクトップアプリのビルド手順
概要
MorningStatusApp デスクトップアプリ(Electrobun)のビルドとインストーラ・DMG 作成手順。
インストーラ/アプリバンドルには Next.js standalone サーバーが同梱されており、アプリ起動時に自動的にサーバーが立ち上がります。
前提条件
Windows
.env.local(プロジェクトルート)が存在すること(接続先 Blob URL・API キーを含む)- 初回ビルド時、Hutch(Electrobun 2.0.1 のビルドツールチェーン)が
~/.hutchへツールチェーンをネットワーク経由で自動ダウンロードする
Electrobun 2.0.1(Hutch)移行前は Inno Setup 7 が必要だったが、Hutch 純正インストーラへの移行(#1548)により不要になった。
macOS
- Bun がインストール済であること(
curl -fsSL https://bun.sh/install | bash) .env.local(プロジェクトルート)が存在すること(接続先 Blob URL・API キーを含む)
Windows ビルド手順(推奨:一括ビルド)
build-installer.ps1 が以下をすべて自動実行します:
DESKTOP_MODE=1で Next.js standalone ビルド- Electrobun アプリ・インストーラビルド(
electrobun build --env=stable。Next.js standalone サーバーの同梱、アイコン埋め込み、インストーラ生成までHutchが一括で行う)
pwsh -File setup/build-installer.ps1
備考(バグとして顕在化した問題と対策、#1599):
build-installer.ps1は冒頭でSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Processを実行する。Hutchはインストーラ生成の最終段階(配布用zip作成)で内部的にpowershell.exe -Command "Compress-Archive ..."を子プロセスとして起動するが、実行元シェルの実行ポリシー設定によってはこの呼び出しがReleaseCommandFailedで失敗していた(MorningStatusApp-Setup.exe本体の生成自体には影響しない)。プロセススコープでの上書きのため管理者権限は不要で、スクリプト実行後に元の設定へ影響を残さない。
成果物: desktop/build/stable-win-x64/MorningStatusApp-Setup.exe
macOS ビルド手順(推奨:一括ビルド)
build-macos.sh が以下をすべて自動実行します:
DESKTOP_MODE=1で Next.js standalone ビルド- Electrobun アプリ・インストーラ(DMG)ビルド(
electrobun build --env=stable。Next.js standalone サーバーの同梱まで一括で行う)
bash setup/build-macos.sh
成果物:
.appバンドル:desktop/build/stable-macos-arm64/MorningStatusApp.app(Apple Silicon)- DMG:
desktop/artifacts/(Electrobun が自動生成する場合)
注意: macOS ビルドは macOS 環境で実行すること。Electrobun 2.0.1(Hutch)移行後の手順はApple Silicon実機(v9.25.0)でビルド〜インストール〜起動まで検証済。
ビルド手順(ステップ別)
1. Next.js standalone ビルド
DESKTOP_MODE=1 bun run next build
DESKTOP_MODE=1 を指定すると next.config.ts が output: 'standalone' を有効化し、
.next/standalone/ に自己完結型サーバーが生成されます。
2. Electrobun アプリ・インストーラのビルド
--env=stable を指定すると、Hutch が build.scripts.preBuild フック経由で Next.js standalone サーバーの同梱(build.copy。デスクトップアプリ(Electrobun)設計書 §2.1 参照)からインストーラ生成までを一括で行う。
cd desktop
bunx electrobun build --env=stable
成果物:
- Windows:
desktop/build/stable-win-x64/MorningStatusApp/、インストーラdesktop/build/stable-win-x64/MorningStatusApp-Setup.exe - macOS(Apple Silicon):
desktop/build/stable-macos-arm64/MorningStatusApp.app/
--env=stableを省略するとdevチャンネル(desktop/build/dev-win-x64/等)になり、開発中の動作確認用ビルドとして扱われる。配布用インストーラには必ず--env=stableを指定すること。UI言語(Windows): v1(Inno Setup、日本語UI)と異なり、Hutch純正インストーラのUIは英語表示のみ(日本語ローカライズ手段が現時点でHutchに用意されていない)。
3. インストール
Windows: 生成した MorningStatusApp-Setup.exe を実行する。
- インストール先:
%LOCALAPPDATA%\Programs\MorningStatusApp(実機確認済。管理者権限なしでインストールされる) - 実行時展開先:
%LOCALAPPDATA%\{app.identifier}\stable\app\(デスクトップアプリ(Electrobun)設計書 §3.1 参照)。launcher.exeが初回起動時に自己展開する - スタートメニュー:
MorningStatusAppグループが作成される - アンインストール: コントロールパネル/設定からアンインストール可能
macOS: MorningStatusApp.app を /Applications にコピーして起動する。
アプリを改修した場合のフロー
1. package.json のバージョンを更新する(必要な場合)
2. (Windows)pwsh -File setup/build-installer.ps1
(macOS) bash setup/build-macos.sh
起動フロー・プロセス終了時のクリーンアップ・WebViewのキャッシュ制御など、アプリ実行時のアーキテクチャは デスクトップアプリ(Electrobun)設計書 を参照。
インストーラに含まれるファイル
| 配置先 | 内容 |
|---|---|
{app}/bin/ |
Electrobun バイナリ(bun.exe, launcher.exe 等) |
{app}/Resources/app/bun/ |
Electrobun ワーカー (index.js) |
{app}/Resources/app/nextjs/standalone/ |
Next.js standalone サーバー |
{app}/Resources/app/nextjs/standalone/.next/static/ |
静的アセット |
{app}/Resources/app/nextjs/standalone/public/ |
public ディレクトリ |
{app}/Resources/app/nextjs/standalone/.env.local |
接続設定(Blob URL・API キー) |
{app} は実行時展開先(Windows: %LOCALAPPDATA%\{app.identifier}\stable\app\)を指す。インストール先そのもの(%LOCALAPPDATA%\Programs\MorningStatusApp\)には bin/launcher.exe と圧縮パッケージ(Resources/*.tar.zst)のみが置かれ、上記の構成は含まれない(デスクトップアプリ(Electrobun)設計書 §3.1 参照)。
3箇所に分かれたバージョン管理・アイコン素材の詳細は デスクトップアプリ(Electrobun)設計書 を参照。
注意事項
desktop/build//desktop/artifacts//desktop/.hutch//desktop/.next-standalone-staging/はリポジトリから除外(.gitignore設定済).env.local(プロジェクトルート)には API キー等が含まれるため、インストーラに同梱されるファイルを公開しないこと