install4j 13.02026-06-03変更履歴
install4j 13では、Windows MSIXメディアファイルを作成できるようになりました。
MSIXは、Windowsアプリケーション向けの最新のパッケージ形式です。Microsoft Storeのネイティブパッケージ形式でもあり、Microsoft Intuneなどの管理された展開ツールと統合できます。MSIXパッケージは、Windows自体が完全に元に戻せる形でインストールとアンインストールを行い、管理者権限を持たない標準ユーザーでもインストールできます。
MSIXはMSIとは完全に独立しています。MSIの場合、install4jが生成するのは、install4jが生成したインストーラーを包むラッパーだけです。これは、スクリーン、アクション、スクリプトといったinstall4jの概念をMSIモデルにシームレスにマッピングできないためです。一方MSIXは宣言的な形式であるため、サービス、ファイル関連付け、スタートアップタスクなどの概念はマニフェストエントリに直接変換されます。
MSIXパッケージは、.msixファイルをダブルクリックするか、PowerShellでAdd-AppxPackageを実行することでインストールされます。インストール時には、install4jのインストーラーウィザードは実行されません。
このメディアファイルタイプを配布するにはコード署名が必須です。署名されていないMSIXパッケージは、Windowsの開発者モードでしかインストールできないためです。
MSIX固有の設定はすべて、メディアファイルウィザードの専用サブステップで行います。「MSIX options」ステップでは、パッケージID名、パッケージバージョン、テスト済みの最小および最大Windowsバージョンを設定します。ランチャーをサインインランチャーとして設定することもできます。サインインランチャーはユーザーのログオン時に自動的に実行され、ユーザーは後からWindowsの「スタートアップアプリ」設定で無効にできます。
パッケージアイコンは、「Package icon」サブステップでカスタマイズします。このアイコンはWindowsのインストールダイアログに表示されます。背景色を設定できるため、透明部分を含むアイコンにも不透明なタイルが与えられます。スタートメニューとタスクバーには、ランチャーウィザードで設定されたアイコンが使用されます。
サービスは、生成されたサービスランチャーから選択され、マニフェストを通じてWindowsサービスとして登録されます。スタートアップの種類とサービスアカウントは、「Services」サブステップでランチャーごとに設定します。
ファイル関連付けは、1つ以上のファイル拡張子をランチャーに結び付けます。こうしたファイルをダブルクリックすると、アプリケーションが開くようになります。関連付けごとに、説明、オプションのMIMEタイプ、カスタムアイコンを設定できます。
URLスキームハンドラーも同じように宣言できます。これにより、myapp://のようなカスタムスキームがランチャーにルーティングされるようになります。どちらも「File associations and URL handlers」サブステップで設定します。
App URIハンドラーを使用すると、ランチャーが特定のホスト向けの通常のhttps://リンクを処理できるようになります。一致するリンクが開かれると、Windowsはブラウザーの代わりにアプリケーションにルーティングできます。Webサイトの同意なしにそのリンクを関連付けることはできないため、ホスト側は、お使いのパッケージを記載した生成済みのwindows-app-web-link.jsonファイルを/.well-known/の下で公開する必要があります。
アプリ実行エイリアスにより、選択したランチャーが実行ファイル名でユーザーのPATH上に公開され、コマンドプロンプトや「ファイル名を指定して実行」ダイアログから名前で呼び出せるようになります。エイリアスのスコープはパッケージに限定されており、パッケージと一緒に削除されます。エイリアスは、「Applications on PATH」サブステップで選択します。
自動アップデートには、install4jのアップデートアーキテクチャではなく、Windowsに組み込まれたApp Installer機構が使用されます。必要な.appinstallerファイルはinstall4jが生成し、そのホストURLをWindowsが定期的にチェックすることで、新しいパッケージバージョンがバックグラウンドでインストールされます。ホスティングURLと、チェック頻度やユーザーに確認するかどうかといったアップデートの動作は、「Auto-update」サブステップで設定します。
プロジェクトに設定されたすべての言語は、マニフェストで自動的に宣言されます。
ソフトウェア開発は急速にエージェント化しており、日々の作業の多くがAIコーディングアシスタントを通じて行われるようになっています。install4j 13は、インストーラーの作成をそのワークフローに取り込みます。同梱のAIエージェントスキルにより、コーディングアシスタントがinstall4jプロジェクトファイルの読み取り、編集、作成を行えるため、変更内容を自然言語で記述するだけでプロジェクトに直接適用できます。これにより、インストーラーの構築と保守のハードルが下がり、プロジェクトファイルはエージェントが扱うコードベースの単なる一部になります。
スキルは自己完結型のナレッジパッケージです。プロジェクトファイルのスキーマ、利用可能なすべてのBeanクラス(スクリーン、アクション、フォームコンポーネント、スクリーンスタイルとウィジェットスタイル)のカタログ、実行可能なサンプルプロジェクト、install4j API、完全なドキュメントが、一般的なワークフローの手順とあわせてAIが扱いやすい形式で1つにまとめられています。これにより、アシスタントは正確な情報に基づいて検証でき、推測に頼る必要がありません。
対応するアシスタントは、install4jに関連するタスクを与えると、スキルを自動的に読み込みます。たとえば、helloサンプルに、インストール済みのバージョンを検出して2回目のインストールの前に確認を表示するスタートアップチェックを追加するよう依頼すると、アシスタントは適切なレジストリAPIを見つけ、新しいアクションをプロジェクトファイルに挿入し、プロジェクトが引き続きコンパイルできることを確認します。
スキルをインストールするには、ツールバーの「Install AI Skill」ボタンをクリックします。ダイアログから、AIエージェントのスキルディレクトリに書き込むことができます。対応するエージェントは、Claude Code、Claude Desktop、Cursor、Codex CLI、Gemini CLI、OpenCode、Junieです。
グローバルにインストールすればマシン上のすべてのプロジェクトで利用でき、プロジェクトごとにインストールした場合は、エージェントがそのプロジェクトから実行されているときにのみ利用できます。スキルはお使いのinstall4jのバージョンに合わせて生成されるため、そのスキーマ、Beanカタログ、サンプルは常にインストール済みのコンパイラと一致します。
install4j 13では、install4jプロジェクトファイル用のXMLスキーマが導入されました。スキーマ(install4j.xsd)はinstall4jインストールのresourceディレクトリに同梱されており、.install4jファイル形式のすべての要素、属性、列挙値をインラインの説明付きで文書化しています。230を超える要素、450の属性、150の列挙値を網羅し、それらを説明する約600件のドキュメントエントリが含まれています。
XMLエディターでスキーマを.install4jファイルに関連付けると、編集時にオートコンプリート、インラインドキュメント、検証が利用できるようになります。さらに、コマンドラインからコンパイルする際にプロジェクトファイルがスキーマに対して検証されるようになったため、構造的なエラーを正確なメッセージとともに早期に検出できます。
新しいinstall4j Test APIを使用すると、テストJVM内からGUIモードのインストーラーUIを操作する、自動化されたエンドツーエンドテストを作成できます。このAPIはフレームワークに依存しないため、JUnit、TestNG、Spock、または単純なmainメソッドから使用できます。
セッションは、いずれかのセッションビルダーで開始します。生成されたインストーラーをテストするにはInstallerSessionBuilder.forMediaFile(...)、アンインストーラーをテストするにはUninstallerSessionBuilder.forInstallation(...)、アップデートダウンローダーなどのカスタムインストーラーアプリケーションにはInstallerApplicationSessionBuilder.forInstallation(...)を使用します。ビルダーのオプションには、タイムアウト、追加のコマンドライン引数、システムプロパティ、作業ディレクトリ、ログファイル、およびブレークポイントデバッグを容易にするためにインストーラーをインプロセスで実行するデバッグモードがあります。
セッション内では、IDを指定してスクリーンを待ち受け、「Next」「Previous」「Cancel」「Finish」ボタンでナビゲートし、フォームコンポーネントとダイアログ用の厳密に型付けされたハンドルを操作します。最後に、インストーラー変数、インストールディレクトリ、ログ、終了コードを検証します。
InstallerSession session = InstallerSessionBuilder
.forMediaFile(new File("media/myApp_windows-x64.exe"))
.installationDirectory(targetDirectory)
.start();
session.waitForScreenId("welcome").nextScreen();
// Accept the license, then fill in a custom form screen
session.currentScreen().checkBox("acceptCheckBox").setSelected(true);
session.currentScreen().nextScreen();
session.currentScreen().textField("port").setText("8443");
session.currentScreen().nextScreen();
// Modal dialogs can be handled when they appear
session.alert().clickYes();
session.currentScreen().finish();
// Verify the outcome after the installer has exited
int exitCode = session.awaitExit(Duration.ofMinutes(2));
assertEquals(0, exitCode);
Kotlinユーザーのために、APIをより自然に記述できる拡張関数も用意されています。useSession { }ブロックはセッションを開始して自動的にクローズし、onScreenやonAlertのようなヘルパーはスクリーンやダイアログ上でコードブロックを実行し、session["name"]アクセサーはインストーラー変数を読み取ります。
InstallerSessionBuilder
.forMediaFile(File("media/myApp_windows-x64.exe"))
.useSession {
onScreen("welcome") { nextScreen() }
onCurrentScreen {
checkBox("acceptCheckBox").setSelected(true)
nextScreen()
}
onAlert { clickYes() }
onCurrentScreen { finish() }
awaitExit()
}
Test APIは、com.install4j:install4j-testとしてMaven Centralで公開されており、インストールのresourceディレクトリにinstall4j-test.jarとして同梱されています。
これらのGUIテストは、CIでヘッドレス実行することもできます。GitHub ActionsランナーのようにディスプレイのないLinuxでは、インストーラーのサブプロセスが自動的にxvfb-runと軽量ウィンドウマネージャーでラップされるため、インストーラーは仮想フレームバッファに描画され、物理的な画面なしでテストが実行されます。マシンに必要なのはxvfb-runと、サポートされているウィンドウマネージャー(metacity、mutter、openbox、fluxbox、marco)のいずれかだけです。
コンソールモードにリッチなターミナルUIが追加されました。コンソールモードは、グラフィカルなディスプレイがない環境でinstall4jインストーラーが実行される方式です。以前のバージョンのinstall4jは、プレーンなコンソールモードしかサポートしていませんでした。
Java 25以降でANSI対応のターミナル上でインストーラーを実行すると、コンソールモードはモダンでインタラクティブなUIを描画するようになりました。
-
成功メッセージとエラーメッセージが際立つ
カラー出力。
-
パーセント表示付きの
ライブプログレスバー。ステータス行と詳細行がスクロールアウトせずにその場で更新されます。長いファイルパスは途中が省略され、先頭と末尾が常に見えるようになります。
-
-
矢印キーで操作する
単一選択リスト。オプションメニューやはい/いいえ、OK/キャンセルの確認に使用されます。
-
-
テキスト入力とマスク表示のパスワード入力、および
タブ補完付きのファイル・ディレクトリ選択プロンプト。
-
ライセンス契約書などの長いテキストのための
組み込みページャー。オプションで、ユーザーに末尾までスクロールさせることもできます。
古いJavaバージョンで実行している場合や、出力をファイルにリダイレクトしたり別のプロセスにパイプしたりするなど、十分な機能を持つターミナルがない場合には、リッチレンダラーは自動的にプレーンなコンソールにフォールバックします。インストーラーに-J-Dinstall4j.plainConsole=trueを渡すことで、プレーンレンダラーを強制することもできます。
「Label」および「Key-value pair」フォームコンポーネントに、新しい「Ellipsize file paths」プロパティが追加されました。ラベルに含まれるファイルパスが利用可能な横幅に収まらない場合、パスの内側のコンポーネントが省略記号に置き換えられ、パスの先頭と末尾が見えるままになります。
install4j IDEが完全にスケーラブルになりました。一般設定で、倍率をパーセントで指定するか、任意のサイズのカスタムUIフォントを設定すると、UIがそれに応じて拡大/縮小されます。
この機能により、install4j IDEをすべてのOpenJDK系ランタイムで、すべてのHiDPI解像度のLinux上で実行できるようになりました。以前は、HiDPI解像度のLinuxでサポートされていたのはJetBrainsランタイムだけでした。
新しいユーザーホームランチャー変数が追加されました。他の${launcher:...}変数と同様に、ランチャー自体が起動時に展開し(Linuxの.vmoptionsファイルでも展開されるようになりました)、現在のユーザーのホームディレクトリに解決されます。
これは、たとえばVMパラメータや引数をユーザー固有の設定ディレクトリに向ける場合に便利です。
JEP 512の新しいmainメソッドのサポートが追加されました。Java 25で最終化されたJEP 512(「Compact Source Files and Instance Main Methods」)により、mainメソッドをインスタンスメソッドとして宣言し、String[]パラメータを省略できるようになりました。
ランチャーは、従来のpublic static void main(String[] args)に加えて、たとえばインスタンスのvoid main()メソッドをエントリポイントとするクラスを指定できるようになりました。