Java FX インストーラーを作成する

Java FXでJavaで手軽にGUIアプリを作れますが、いざそれを配布しようとすると少しハードルが高いです。少しトリッキーですが成功した実例をもとに手順を紹介します。

使用したツールは以下の通りです。Windows環境です。

  • pleiades-2025-03-ultimate-win-64bit-jre_20250319(Java開発、作業用)
  • openjdk-22.0.2_windows-x64_bin(Java開発、作業用)
  • openjfx-23.0.1_windows-x64_bin-sdk(JavaFX開発、作業用)
  • openjfx-23.0.1_windows-x64_bin-jmods(JavaFX実行用モジュール)
  • wix314(jpackageから使用される)
  • innosetup-6.4.2(インストーラー作成ツール)

システム環境変数設定

  • JAVA_HOME=C:\pleiades\2025-03\java\jdk-22.0.2(jdkを置いた場所)
  • WIX=C:\Program Files (x86)\WiX Toolset v3.14\(WIXインストール時に書き込まれている)
  • path=%JAVA_HOME%\bin(リストに追加)(Javaコマンド実行用)

以下手順です

まずはJava FXのプロジェクトを作ります。

eclipseでMavenを使ってJava FXアーキタイプ(ひながた)から作成します

プロジェクトができてビルドまでできました。このまま実行すると

アプリが動作します。

インストーラーを作成する。

プロジェクトをエクスポートします

jarファイルとlibフォルダが出力されます

次にカスタムJREを作成します。上図のパス上からコマンドラインを開きjlinkコマンドを実行します

jlink --module-path "C:\pleiades\2025-03\java\javafx-jmods-23.0.1" ^
--add-modules java.base,javafx.controls,javafx.fxml,javafx.graphics,java.management,java.naming ^
--output custom-jre

コマンドラインからjpackageコマンドを実行してMSI インストーラーを作成します。

jpackage --type msi ^
--input . ^
--main-jar jfxsample.jar ^
--main-class jp.co.abridge.jfxsample.App ^
--runtime-image custom-jre ^
--name JavaFXSample ^
--dest result

resultフォルダが出力されて中にmsiファイルがあります。これを実行してアプリをインストールします

インストールされました。ただしこれは仮のインストールでこれをもとに正式なインストーラーを作成します

Inno Setup を使って日本語インストーラーを作成する

Inno Setupを起動して以下のようなスクリプトを実行します

[Setup]
AppName=JavaFxSample
AppVersion=1.0
DefaultDirName={pf}\JavaFxSample
OutputBaseFilename=JavaFxSampleInstaller
DisableDirPage=false
CreateAppDir=true
PrivilegesRequired=admin
Compression=lzma
SolidCompression=no
UninstallDisplayIcon="{app}\JavaFxSample.exe"

[Languages]
Name: "Japanese"; MessagesFile: "compiler:Languages\Japanese.isl"

[Files]
Source: "C:/Program Files/JavaFxSample/app/*"; DestDir: "{app}/app"; Flags: ignoreversion
Source: "C:/Program Files/JavaFxSample/runtime/*"; DestDir: "{app}/runtime"; Flags: recursesubdirs
Source: "C:/Program Files/JavaFxSample/JavaFxSample.exe"; DestDir: "{app}"; Flags: ignoreversion

[UninstallDelete]
Type: filesandordirs; Name: "{userappdata}\JavaFxSample"

~/Documents/Outputフォルダにファイルが出力されます。これが最終のインストーラーファイルです

インストーラーを実行すると

インストールされて、起動すると

アプリが動作します

以上です。

AIはどのレベルまでの質問を回答できるのか?

昨今のインターネットでは、AIによるコンテンツが増えてきており、日常生活で活用する場面も珍しくありません。
その中で、かなり専門的な内容でも答えてくれるAIチャットに対して、「どのレベルまで難しい質問を回答できるのか?」と少し疑問に思いました。
今回は、「普段使いできるAIはどのレベルの複雑な質問を回答できるのか?」という観点でいろいろ試してみようと思います。

◯今回使用するAI

今回は「普段使いするAIで試したい」ので、AIの中でも最も普及率の高いChatGPTを使用していきます。
ChatGPTはWeb検索機能を備えているので、ユーザの質問に対して精度の高い回答が可能です。

◯早速いろいろ聞いてみる

では、ChatGPTの性能を確かめるべく、段階にわけて質問をしていきます。

レベル1:家事の基礎的な内容
我々人間には切っても離せない、家事についての質問をしてみます。
簡単な内容を聞きたいので、ここでは「カレーの作り方」を質問してみます。


ざっくりと質問を投げてみると、一般的なチキンカレーの材料と作り方を回答してくれました。さらに、美味しく作るためのコツや、別のカレーの作り方を追加で提案してくれます。

レベル2でもう少し細かい条件を付け加えて質問しようとしていたので、先回りをされてしまう形となりました。

レベル2:少し専門的な内容に関する質問を条件付きで
レベル1の時点で期待以上の回答が返ってきたので、次は仕事で使うような専門的な内容を、条件付きで質問してみたいと思います。
今回は、Java言語を使った簡単なソースコードを、条件付きで質問してみます。

配列、三項演算子を用いたコンパクトなコードを生成してくれました。switch文を使わないという条件も意識してくれてるので、条件は満たせていると見ていいでしょう。
もう少し欲を言えば、例外発生時の処理も記載してくれていれば言う事なしでしたが、出力された内容でも動くので問題ないでしょう。(条件に入れていれば記載してくれていると思います)

レベル3:趣味レベルの内容について質問
次の段階では、専門的な知識が必要な趣味について質問してみます。
今回、ChatGPTには以下の簡単な詰将棋の譜面を見せて、正しい詰め方を聞いてみます。

(▲=打ち手、△=相手)
正しい回答としては、▲3二銀→△1(2)二玉→▲2三金の3手詰めとなります。
そしてAIに聞いた回答がこちらです。

結果は、▲2二銀打→△2二玉→▲3二金打となりました。最初の銀の置き場所が誤っているため、成立しませんでした。
念の為もう一度同じ内容で質問したところ、やはり正解にはたどり着けませんでした。。(むしろひどくなってる。。)

◯結果

ChatGPTでは、一般的な内容や仕事に関する内容の質問は、内容を理解して正確に回答できるレベルだということがわかりました。趣味などのプライベートに関する内容については、少し学習させないと難しそうです。
このように、普段使いでも便利なAIですが、内容によっては誤った内容を伝えてくる可能性もあるため、AIから得た情報のみを鵜呑みにせず、自身でその情報の正確性を調べる力が、今後AIと付き合っていくうえで必要になってくるでしょう。