ユーザ用ツール

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_qt版 [2025/09/25 11:32] – [テーマ対応] arakiハイハイスクールアドベンチャー_qt版 [2025/10/01 05:02] (現在) – [環境非依存化] araki
行 34: 行 34:
 入出力部以外はM5版と同じである。 入出力部以外はM5版と同じである。
  
 +===== ダウンロードとインストール =====
 +
 +いくつかの環境用にビルドしたパッケージを用意してあるので、それを使ってインストールすればいろいろ面倒なことなく遊べます。
 +下にある説明に従ってビルドしてもいいかと思います。
 +
 +  * [[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_ubuntu25.04_amd64.deb|Ubuntu 25.04(x64)版]]
 +  * [[https://www.wildtree.jp/~araki/qhhsadv_1.0.0_debian12_arm64.deb|Debian12(ARM64)版]]
 +
 +Windows版はインストーラを走らせるだけです。
 +
 +Linux版はdeb形式のパッケージになっています。
 +今どきのデスクトップ環境だと、メニューにも登録されるかと思います。
 +
 +ご自分の環境にあったパッケージを取得したら、
 +
 +<code bash>
 +$ sudo apt install -y ./qhhsadv_1.0.0_ubuntu24.04.02_amd64.deb
 +</code>
 +
 +などとしてインストールしてください。
 ===== ビルド ===== ===== ビルド =====
  
 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>
行 48: 行 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|ハイハイスクールアドベンチャー}}
行 197: 行 222:
 しかも、Windows版と違って、書くこと少なくていいです。 しかも、Windows版と違って、書くこと少なくていいです。
  
-<file qss light.qss>+<file css light.qss>
 /* light qss */ /* light qss */
 QWidget { QWidget {
行 211: 行 236:
 </file> </file>
  
-<file qss dark.qss>+<file css dark.qss>
 /* dark qss */ /* dark qss */
 QWidget { QWidget {
行 482: 行 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版 ====
行 529: 行 555:
 </code> </code>
  
 +==== リソースフォルダーのコピー ====
 +
 +リソースデータは AppLocalDataLocation/WildTreeJP/QHHSAdv の下にあることを想定しています。
 +なければ、プログラムのあるディレクトリにある data ディレクトリの中身をコピーしてから動作を開始します。
 +
 +なので、ソースツリーの中で管理されているリソースディレクトリを、ビルド時に、ビルドディレクトリにコピーしてほしいのです。
 +
 +CMakeLists.txt を利用する場合は次のようになります。
 +
 +<code cmake>
 +add_custom_command(TARGET qhhsadv POST_BUILD
 +    COMMAND ${CMAKE_COMMAND} -E copy_directory
 +            ${CMAKE_SOURCE_DIR}/data
 +            $<TARGET_FILE_DIR:qhhsadv>/data
 +)
 +</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環境でビルドを走らせると一気にやってくれます。
  

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information