ユーザ用ツール

サイト用ツール


ハイハイスクールアドベンチャー_qt版

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_qt版 [2025/09/26 07:50] – [概要] arakiハイハイスクールアドベンチャー_qt版 [2025/10/01 05:02] (現在) – [環境非依存化] araki
行 39: 行 39:
 下にある説明に従ってビルドしてもいいかと思います。 下にある説明に従ってビルドしてもいいかと思います。
  
-  * [[https://www.wildtree.jp/~araki/qhhsadv_setup.exe|Windows版]]+  * [[https://www.wildtree.jp/~araki/QHHSAdv110.zip|Windows版]]
   * [[https://www.wildtree.jp/~araki/qhhsadv_1.0.0_ubuntu24.04.02_amd64.deb|Ubuntu 24.04(x64)版]]   * [[https://www.wildtree.jp/~araki/qhhsadv_1.0.0_ubuntu24.04.02_amd64.deb|Ubuntu 24.04(x64)版]]
   * [[https://www.wildtree.jp/~araki/qhhsadv_1.0.0_ubuntu25.04_amd64.deb|Ubuntu 25.04(x64)版]]   * [[https://www.wildtree.jp/~araki/qhhsadv_1.0.0_ubuntu25.04_amd64.deb|Ubuntu 25.04(x64)版]]
行 52: 行 52:
  
 <code bash> <code bash>
-$ sudo apt install -y ./qhhsadv_1.0.0_ubuntu24.04.02-md64.deb+$ sudo apt install -y ./qhhsadv_1.0.0_ubuntu24.04.02_amd64.deb
 </code> </code>
  
行 60: 行 60:
 QtCreatorを使用して作成したので、QtCreatorを使ってビルドするのが簡単だが、cmakeで直接ビルドすることも可能である。 QtCreatorを使用して作成したので、QtCreatorを使ってビルドするのが簡単だが、cmakeで直接ビルドすることも可能である。
 ソースはM5版同様[[https://github.com/wildtree/qhhsadv.git|GitHub]]から取得可能である。 ソースはM5版同様[[https://github.com/wildtree/qhhsadv.git|GitHub]]から取得可能である。
-[[https://www.wildtree.jp/~araki/HHSAdv_data.zip|データファイル]]は ~/.HHSAdv の下に展開る。+[[https://www.wildtree.jp/~araki/HHSAdv_data.zip|データファイル]]は実行時に自動的に ~/.local/share/WildTreeJP/QHHSAdv の下に展開される。
  
 GitHubからは git clone で取得する。 GitHubからは git clone で取得する。
-<code>+<code bash>
 $ git clone https://github.com/wildtree/qhhsadv.git $ git clone https://github.com/wildtree/qhhsadv.git
 </code> </code>
行 70: 行 70:
 cmakeでビルドするなら、 cmakeでビルドするなら、
  
-<code>+<code bash>
 $ mkdir build $ mkdir build
 $ cd build $ cd build
-$ cmake ..+$ cmake -DCMAKE_INSTALL_PREFIX=/ ..
 $ make $ make
 +$ sudo make install
 </code> </code>
  
 と、通常の cmakeの作法に従えばいい。 と、通常の cmakeの作法に従えばいい。
  
-実行は qhhsadv を実行すればいい+実行は qhhsadv を実行す 
 + 
 +インストールは /opt/qhhsadv に実行ファイル、リソースなどをインストールし、/usr/bin/qhhsadv に起動用のラッパーを、また、デスクトップ環境用のメニューへの追加用の設定ファイルもインストールされる、
  
 {{:hhsadv:qhhsadv.png?400|ハイハイスクールアドベンチャー}} {{:hhsadv:qhhsadv.png?400|ハイハイスクールアドベンチャー}}
行 504: 行 507:
  
 とりあえず、WindowsとLinux ((Ubuntu 24.04LTS, Ubuntu 25.04、Debian 12(ARM64)で確認))でのビルドが可能なことは確認しました。 とりあえず、WindowsとLinux ((Ubuntu 24.04LTS, Ubuntu 25.04、Debian 12(ARM64)で確認))でのビルドが可能なことは確認しました。
 +((なお、Apple系のデバイスは持ってないし買う気もないのでできるかどうかはどなたか試してください。))
  
 ==== Windows版 ==== ==== Windows版 ====
行 568: 行 572:
 </code> </code>
  
 +==== インストーラとパッケージ ====
 +
 +Qtはマルチプラットフォームなので、ビルド後の扱いをまじめに考えるとちょっとめんどくさい。
 +
 +基本的に、[[https://github.com/wildtree/qhhsadv.git|GitHub]]から持って行って、自分でビルドして遊んで、でもいいんですが、Linuxはともかく、WindowsにいちいちQtをインストールしてっていうのはなかなかにハードルが高く、遊んでもらえません。
 +
 +Linuxにしても、今どきのユーザはパッケージをインストールして使うスタイルの人も多いのでしょう。
 +何しろ、環境をセットアップして最初にやるべきことが build-essentialsをインストールすることなのですから。
 +
 +なので、インストールとパッケージについてあれこれ書いておきます。
 +
 +=== Linux ===
 +
 +Linuxの場合は、ビルドしてインストールすることから始めます。
 +パッケージも、インストールされたイメージをもとに作るので、まずはインストールなのです。
 +
 +make を走らせるのだから、make install すればいいだろうということですが、そのためには installターゲットが生成されなければなりません。
 +
 +Makefileは cmakeが作るのだから、cmakeに作るように指示しなければなりません。
 +
 +<code cmake>
 +if(UNIX AND NOT APPLE)
 +    # 実行ファイルを /opt/qhhsadv に配置
 +    install(TARGETS qhhsadv DESTINATION /opt/qhhsadv)
 +
 +    # data ディレクトリを /opt/qhhsadv にコピー
 +    install(DIRECTORY ${CMAKE_BINARY_DIR}/data DESTINATION /opt/qhhsadv)
 +
 +    # ラッパースクリプトを /usr/bin にインストール
 +    install(PROGRAMS ${CMAKE_SOURCE_DIR}/scripts/qhhsadv.sh
 +            DESTINATION /usr/bin
 +            RENAME qhhsadv)
 +    # .desktop ファイル
 +    install(FILES ${CMAKE_SOURCE_DIR}/resources/linux/qhhsadv.desktop
 +            DESTINATION /usr/share/applications)
 +
 +    # アイコン(48x48 の例)
 +    install(FILES ${CMAKE_SOURCE_DIR}/resources/icons/qhhsadv.png
 +            DESTINATION /usr/share/icons/hicolor/48x48/apps)
 +endif()
 +</code>
 +
 +ビルドはマルチターゲットなので、Linuxは **UNIXかつ非APPLE**という扱いになります。
 +ここに、インストールするものとその行先をずらずらと書いていきます。
 +
 +DESTINATIONに行き先を指定するわけですが、PREFIXとかつけないでいいのか?
 +といわれれば、それはcmakeがよしなにやってくれるから、気にせず、/から書いておけばいいのです。
 +
 +データリソースの扱いは、本来、UNIX系の慣習に倣うなら、/usr/share/qhhsadv の下に置くべきなのでしょうが、Windowsっぽく、プログラムバイナリのある場所にある想定なので、今更、ソースから書き換えるのもめんどくさいです。
 +
 +なので、こういう感じでインストールする先として、最近では /opt が使われるので、/opt/qhhsadv の下に、プログラムもリソースも一緒くたに置くことにしています。
 +
 +/usr/bin には /opt/qhhsadv/qhhsadv を呼び出すだけのスクリプトを置いておきます。
 +
 +あとは、
 +
 +<code bash>
 +$ cmake -DCMAKE_INSTALL_PREFIX=/ ..
 +$ make
 +$ sudo make install
 +</code>
 +
 +とすれば、インストールしてくれます。
 +
 +== パッケージング ==
 +
 +以前なら、Slackware系、RedHat系、Debian系がしのぎを削っていましたが、今どきはもうDebian系一択でいいでしょう。
 +deb形式のパッケージにまとめることを想定しています。
 +
 +<del>パッケージングするためには、仮想ルートフォルダの下にイメージをインストールします。
 +
 +<code bash>
 +$ make install DESTDIR=$PWD/package-root
 +</code>
 +
 +これで、./package-root ができて、その下にインストールされた形になります。
 +
 +次に、パッケージ用のファイルを作ります。
 +
 +<code bash>
 +$ mkdir ./package-root/DEBIAN
 +</code>
 +
 +./package-root/DEBAIN というフォルダを作ったら、その下に control という名前のファイルを作ります。
 +これは Ubuntu24.04.02 用のファイルになります。
 +
 +<file ini control>
 +Package: qhhsadv
 +Version: 1.0.0
 +Section: games
 +Priority: optional
 +Architecture: amd64
 +Maintainer: Hiroyuki Araki <wildtree@gmail.com>
 +Depends: libc6 (>= 2.31), libqt6core6t64 (>= 6.4), libqt6multimedia6 (>=6.4), libqt6widgets6t64 (>= 6.4)
 +Description: High High School Adventure for Qt
 + A Qt-based High High School Adventure implementation.
 +</file>
 +
 +あとは、パッケージの作成を行います。
 +
 +<code bash>
 +$ dpkg-deb --root-owner-group --build package-root qhhsadv_1.0.0_ubutu24.04.2_amd64.deb
 +</code></del>
 +
 +パッケージングでcontrolファイルを毎回作るの面倒くさいとAIにもちかけたら、CPackにすればいいじゃん、といわれました。
 +なにそれ?
 +
 +<code cmake>
 +if(UNIX AND NOT APPLE)
 +    # パッケージの基本情報
 +    set(CPACK_PACKAGE_NAME ${APP_NAME})
 +    set(CPACK_PACKAGE_VERSION ${APP_VERSION})
 +    set(CPACK_PACKAGE_CONTACT "wildtree@gmail.com")
 +
 +    # Debian パッケージ用のメタ情報
 +    set(CPACK_GENERATOR "DEB")
 +    set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Hiroyuki Araki") # 必須
 +    set(CPACK_DEBIAN_PACKAGE_SECTION "games")
 +    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt6core6 (>= 6.4.0), libc6 (>= 2.34), libqt6widget6 (>= 6.4.0)")
 +
 +    # アーキテクチャ指定(自動判定も可能)
 +    string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" DETECTED_ARCH)
 +
 +    if(DETECTED_ARCH STREQUAL "x86_64")
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
 +    elseif(DETECTED_ARCH STREQUAL "aarch64")
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64")
 +    elseif(DETECTED_ARCH MATCHES "armv7")
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf")
 +    else()
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${DETECTED_ARCH}") # fallback
 +    endif()
 +
 +    include(CPack)
 +endif()
 +</code>
 +
 +インストールターゲットとか特には必要としません。
 +パッケージの作成までは以下の手順になります。
 +
 +<code bash>
 +$ git clone https://github.com/wildtree/qhhsadv.git
 +$ cd qhhsadv
 +$ cmake -B build -DCMAKE_BUILD_TYPE=Release
 +$ cmake --build build --target all
 +$ cpack -G DEB -C Release --config build/CPackConfig.cmake
 +</code>
 +
 +インストールは dpkgでも aptでも好きなのでインストーラを走らせるだけです。
 +カレントフォルダに qhhsadv_1.1.1_Linux.deb のようなファイルができます。
 +バージョン番号は、CMakeLists.txtの頭の方に書いてあります。
 +
 +<code cmake>
 +# Application basic information
 +set(APP_NAME "qhhsadv")
 +set(APP_VERSION_MAJOR "1")
 +set(APP_VERSION_MINOR "1")
 +set(APP_VERSION_PATCH "1")
 +set(APP_VERSION "${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}.${APP_VERSION_PATCH}")
 +</code>
 +
 +<code bash>
 +$ sudo apt install -y ./qhhsadv_1.0.0_ubuntu24.04.02_amd64.deb
 +</code>
 +
 +=== Windows ===
 +
 +Windowsの場合は、Linuxのように、直接 make でインストールするのは現実的ではありません。
 +なので、インストーラを作ってそれでインストールする形をとります。
 +
 +WiXかInno Setup 6のどっちかが定番らしいですが、WiXは基本的に Visal Studio 2022のプラグインとして使うのが普通なので、Qt Creator や cmakeでやるのはちょっとめんどくさそうです。
 +
 +なので、Inno Setup 6を使うことにします。
 +Inno Setup 6は winget でインストールできます。
 +
 +<code powershell>
 +PS C:\> winget install JRSoftware.InnoSetup
 +</code>
 +
 +DEBIANのcontrol同様、Inno Setup には Setup.issという設定ファイルを作る必要があります。
 +
 +<file ini setup.iss.in>
 +; ハイハイスクールアドベンチャー インストーラ (Inno Setup)
 +
 +[Setup]
 +AppName=High High School Adventure Qt
 +AppVersion=@APP_VERSION@
 +AppPublisher=WildTreeJP
 +DefaultDirName={commonpf}\QHHSAdv
 +DefaultGroupName=ハイハイスクールアドベンチャー
 +UninstallDisplayIcon={app}\qhhsadv.exe
 +OutputBaseFilename=qhhsadv_setup
 +Compression=lzma
 +SolidCompression=yes
 +
 +[Languages]
 +Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
 +Name: "english"; MessagesFile: "compiler:Default.isl"
 +
 +[Tasks]
 +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
 +
 +[Files]
 +; Qtアプリ本体と依存DLLをまとめたフォルダを指定
 +Source: "deploy\qhhsadv.exe"; DestDir: "{app}"; Flags: ignoreversion
 +Source: "deploy\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs ignoreversion
 +
 +; リソースディレクトリ
 +Source: "deploy\data\*"; DestDir: "{app}\data"; Flags: recursesubdirs createallsubdirs ignoreversion
 +
 +[Icons]
 +Name: "{group}\ハイハイスクールアドベンチャー"; Filename: "{app}\qhhsadv.exe"
 +Name: "{commondesktop}\ハイハイスクールアドベンチャー"; Filename: "{app}\qhhsadv.exe"; Tasks: desktopicon
 +
 +[Run]
 +; インストール完了後に起動するオプション
 +Filename: "{app}\qhhsadv.exe"; Description: "{cm:LaunchProgram,ハイハイスクールアドベンチャー}"; Flags: nowait postinstall skipifsilent
 +</file>
 +
 +デプロイするのに必要なファイルやフォルダを、インストーラの作業ディレクトリの下の deploy にまとめることにします。
 +この方針に合うように CMakeLists.txt に WIN32用の記述を追加していきます。
 +
 +<code cmake>
 +if(WIN32)
 +    # デプロイ先ディレクトリ
 +    set(DEPLOY_DIR ${CMAKE_BINARY_DIR}/installer/deploy)
 +
 +    # コピー対象
 +    set(APP_EXE $<TARGET_FILE:qhhsadv>)
 +    set(DATA_DIR ${CMAKE_BINARY_DIR}/data)
 +
 +    # デプロイ処理
 +    add_custom_command(
 +        TARGET qhhsadv POST_BUILD
 +        COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPLOY_DIR}
 +        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:qhhsadv> ${DEPLOY_DIR}
 +        COMMAND ${CMAKE_COMMAND} -E copy_directory ${DATA_DIR} ${DEPLOY_DIR}/data
 +        COMMENT "Copying files to installer/deploy..."
 +    )
 +
 +    # Qt DLL やプラグインを集める場合(windeployqt)
 +    # Qt bin ディレクトリを探す
 +    get_target_property(QT_QMAKE_EXECUTABLE Qt6::qmake IMPORTED_LOCATION)
 +    get_filename_component(QT_BIN_DIR "${QT_QMAKE_EXECUTABLE}" DIRECTORY)
 +
 +    set(WINDEPLOYQT_EXECUTABLE "${QT_BIN_DIR}/windeployqt.exe")
 +
 +    add_custom_command(
 +        TARGET qhhsadv POST_BUILD
 +        COMMAND "${WINDEPLOYQT_EXECUTABLE}" --dir ${DEPLOY_DIR} $<TARGET_FILE:qhhsadv>
 +        COMMENT "Running windeployqt..."
 +    )
 +
 +    add_custom_command(
 +        TARGET qhhsadv POST_BUILD
 +        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/installer
 +        COMMENT "Copying setup.iss..."
 +    )
 +    configure_file(${CMAKE_SOURCE_DIR}/installer/setup.iss.in ${CMAKE_BINARY_DIR}/installer/setup.iss @ONLY)
 +
 +    # Inno Setup コンパイラを探す
 +
 +    find_program(INNO_SETUP_COMPILER
 +        NAMES ISCC iscc
 +        HINTS
 +            "$ENV{LOCALAPPDATA}/Programs/Inno Setup 6"
 +    )
 +    # PATH に入っている場合も探す
 +    if(NOT INNO_SETUP_COMPILER)
 +        find_program(INNO_SETUP_COMPILER NAMES ISCC iscc)
 +    endif()
 +
 +    if(INNO_SETUP_COMPILER)
 +        message(STATUS "Inno Setup found: ${INNO_SETUP_COMPILER}")
 +
 +        # .iss スクリプトの場所
 +        set(INNO_SCRIPT ${CMAKE_BINARY_DIR}/installer/setup.iss)
 +
 +        # 出力先(例: build ディレクトリ内)
 +        set(INSTALLER_OUTPUT ${CMAKE_BINARY_DIR}/installer/qhhsadv_setup.exe)
 +
 +        add_custom_command(
 +            OUTPUT ${INSTALLER_OUTPUT}
 +            COMMAND "${INNO_SETUP_COMPILER}" "${INNO_SCRIPT}"
 +            DEPENDS qhhsadv  # アプリ本体がビルドされてから実行
 +            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
 +            COMMENT "Building Inno Setup installer..."
 +        )
 +
 +        add_custom_target(installer ALL
 +            DEPENDS ${INSTALLER_OUTPUT}
 +        )
 +    else()
 +        message(WARNING "Inno Setup (ISCC.exe) not found. Skipping installer target.")
 +    endif()
 +endif()
 +</code>
 +
 +Windows版Qtには、必要なDLLなどをまとめてくれる windeployqt.exe というツールが入っていて、これがDLLをかき集めてくれます。
 +ランタイムパッケージなどの提供がないQtなので、これはWindows版をデプロイするのには必須です。
  
 +生成されたプログラム、リソースなどをコピーして、DLLなどをかき集めたら、ISCC.exe を呼び出して、インストーラに仕上げます。
  
 +ここまでを、Windows環境でビルドを走らせると一気にやってくれます。
  
ハイハイスクールアドベンチャー_qt版.1758873029.txt.gz · 最終更新: by araki