Windows ビルド・リリース手順

ShogiBoardQ を Windows でビルドし、ZIP ファイルとして GitHub で公開する手順

Windows Qt 6 ZIP 配布 GitHub Release

Windows ZIP にはアプリ(ShogiBoardQ.exe・shogiboardq-cli.exe)、実行用 DLL、翻訳、詰将棋問題集6ファイル、Hayanagi 実行ファイルとその定跡、ルートの LICENSE を収録します。README は収録しません。Hayanagi/source/ と外部の licenses/ は今後の Windows リリースでも収録しません。アプリ内蔵のライセンス表示はそのまま利用します。

Release の添付は実行用 ZIP のみとし、Qt ソースや関連文書を別添付しません。アプリ内のライセンス文書の準備は Qt 文書とリリース添付の方針を参照してください。

目次

  1. 前提条件
  2. 開発環境のセットアップ
  3. ビルド
  4. 配布パッケージの作成
  5. GitHub Release での公開
  6. コード署名(オプション)
  7. トラブルシューティング

1. 前提条件

項目 バージョン
Windows 10 / 11(64-bit)
Visual Studio 2019 または 2022(C++ デスクトップ開発ワークロード)
CMake 3.16 以上
Qt 6.x(Widgets, Charts, Network, Multimedia, LinguistTools)
C++ C++17 対応コンパイラ(MSVC 2019 以降)

2. 開発環境のセットアップ

2.1 Visual Studio のインストール

Visual Studio をインストールし、以下のワークロードを選択:

  • C++ によるデスクトップ開発

これにより MSVC コンパイラ、CMake、Ninja が含まれる。

Community Edition は個人開発・OSS 開発に無料で利用可能。

2.2 Qt 6 のインストール

方法A: Qt Online Installer(推奨)

Qt 公式サイトからインストーラをダウンロードし、以下のコンポーネントを選択:

  • Qt 6.x > MSVC 2019/2022 64-bit
  • Qt 6.x > Qt Charts
  • Qt 6.x > Qt Multimedia
  • Developer and Designer Tools > CMake
  • Developer and Designer Tools > Ninja

インストール後、Qt のパスを環境変数に設定:

# システム環境変数に追加(Qt のインストールパスは環境に合わせて変更)
# 例: C:\Qt\6.8.3\msvc2022_64
[Environment]::SetEnvironmentVariable("Qt6_DIR", "C:\Qt\6.8.3\msvc2022_64\lib\cmake\Qt6", "User")
[Environment]::SetEnvironmentVariable("PATH", "C:\Qt\6.8.3\msvc2022_64\bin;$env:PATH", "User")

方法B: aqtinstall(CI/コマンドライン向け)

pip install aqtinstall
aqt install-qt windows desktop 6.8.3 win64_msvc2022_64 -m qtcharts

2.3 Ninja のインストール(推奨)

Visual Studio に含まれる Ninja を使うか、別途インストール:

winget install Ninja-build.Ninja

2.4 インストール確認

Developer PowerShell for VS 2022(スタートメニューから起動)で確認:

cmake --version       # 3.16 以上
cl                    # MSVC コンパイラ
ninja --version       # Ninja
windeployqt --version # Qt デプロイツール

3. ビルド

ビルドスクリプト(推奨)

scripts/build-windows.ps1 を使うと、Release ビルドから ZIP 作成まで一括実行できる。

重要: Developer PowerShell for VS 2022 から実行すること(MSVC の環境変数が必要)。

# 通常ビルド + ZIP 作成
.\scripts\build-windows.ps1

# クリーンビルド、ZIP なし
.\scripts\build-windows.ps1 -Clean -SkipZip

# 版ごとのディレクトリにビルドする(リリース時)
.\scripts\build-windows.ps1 -BuildDir build\msvc-release-2026.10.07 `
    -DeployDir build\releases\2026.10.07-windows\deploy `
    -ZipPath build\releases\2026.10.07-windows\ShogiBoardQ-windows.zip
オプション 説明
-Clean build / deploy ディレクトリを削除してからビルド
-SkipZip ZIP 作成をスキップ(deploy フォルダのみ生成)
-BuildDir ビルドディレクトリ(既定: build)
-DeployDir 配布用ディレクトリ(既定: deploy)
-ZipPath 作成する ZIP ファイル(既定: ShogiBoardQ-windows.zip)
-Help ヘルプを表示

スクリプトは以下の処理を自動実行する:

  1. 前提ツールの存在確認(cmake, ninja, cl, windeployqt, MSVC ランタイム DLL の場所)
  2. CMake Configure + ビルド(ShogiBoardQ・shogiboardq-cli・Hayanagi)
  3. ビルド成果物の確認(.exe、.qm 翻訳ファイル、hayanagi.exe と定跡、各手数1ファイルの問題集)
  4. deploy ディレクトリ作成 + 問題集・Hayanagi(定跡を含む)・LICENSE の配置 + windeployqt による DLL デプロイ + qoffscreen.dll の追加 + MSVC ランタイム DLL のコピー + 検証
  5. ZIP ファイル作成

Qt を PATH に入れていない場合は、実行前に Qt の場所を指定する(例: Qt 6.11.2):

$env:PATH = "C:\Qt\6.11.2\msvc2022_64\bin;C:\Qt\Tools\Ninja;$env:PATH"
$env:CMAKE_PREFIX_PATH = "C:\Qt\6.11.2\msvc2022_64"

実行ポリシーエラーが出る場合:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

以下は個別のコマンドを手動で実行する場合の手順。

3.1 Release ビルド

Developer PowerShell for VS 2022 で実行:

cd C:\path\to\ShogiBoardQ

# Configure(Release ビルド、Ninja)
cmake -B build -S . -G Ninja -DCMAKE_BUILD_TYPE=Release

# ビルド
ninja -C build

Ninja がない場合(Visual Studio ジェネレータを使用):

# Configure
cmake -B build -S .

# Release ビルド
cmake --build build --config Release

3.2 ビルド成果物の確認

# exe が生成されていることを確認
# Ninja の場合:
dir build\ShogiBoardQ.exe

# Visual Studio ジェネレータの場合:
dir build\Release\ShogiBoardQ.exe

# 翻訳ファイルの確認
dir build\*.qm           # Ninja
dir build\Release\*.qm   # VS ジェネレータ

3.3 動作確認

# ビルドしたアプリを起動(Qt DLL が PATH に含まれている環境で)
.\build\ShogiBoardQ.exe

4. 配布パッケージの作成

Note: scripts/build-windows.ps1 を使用した場合、このセクションの手順は自動実行される。

4.1 deploy ディレクトリの作成

exe、翻訳ファイル、詰将棋問題集、Hayanagi とその定跡、LICENSE を配布用ディレクトリにコピー:

mkdir deploy, deploy\Hayanagi\book, deploy\data\tsumeshogi
copy build\ShogiBoardQ.exe deploy\
copy build\shogiboardq-cli.exe deploy\
copy build\*.qm deploy\
copy build\Hayanagi\hayanagi.exe deploy\Hayanagi\
copy build\Hayanagi\book\hayanagi_book.db deploy\Hayanagi\book\
copy data\tsumeshogi\tsume_*ply_*.txt deploy\data\tsumeshogi\
copy LICENSE deploy\

詰将棋問題集は 3・5・7・9・11・13 手詰を1ファイルずつ、合計6ファイル収録する(data/tsumeshogi/ に同じ手数の旧版が残っていないこと。スクリプトは複数あると停止する)。README(ルート・Hayanagi/・data/tsumeshogi/)は収録しない。Hayanagi の定跡 hayanagi_book.db は、ビルドで build/Hayanagi/book/ にコピーされたものを Hayanagi/book/ に置く。Hayanagi は作業ディレクトリの book/ から定跡を読み、ShogiBoardQ はエンジンのあるディレクトリを作業ディレクトリにして起動するので、ZIP を展開したまま定跡が使われる。 ソースツリーやビルドフォルダを丸ごとコピーせず、Hayanagi/source/ と licenses/ が ZIP に含まれていないことを公開前に確認してください。通常ビルドが生成する build/licenses/ も Windows ZIP にはコピーしません。

4.2 windeployqt で Qt DLL をデプロイ

windeployqt --release --no-translations --no-system-d3d-compiler --no-opengl-sw --no-compiler-runtime deploy\ShogiBoardQ.exe deploy\shogiboardq-cli.exe

# shogiboardq-cli は offscreen プラットフォームで盤面を描画する。windeployqt はコピーしないため追加する
copy C:\Qt\6.11.2\msvc2022_64\plugins\platforms\qoffscreen.dll deploy\platforms\

windeployqt が自動で行う処理:

  1. 依存する Qt DLL(Qt6Core, Qt6Gui, Qt6Widgets, Qt6Charts, Qt6Network, Qt6Multimedia 等)をコピー
  2. Qt プラグイン(platforms/qwindows.dll, imageformats/ 等)をコピー
オプション 説明
--release Release ビルド用 DLL をデプロイ
--no-translations Qt の翻訳ファイルを除外(アプリ独自の .qm は手動コピー済み)
--no-system-d3d-compiler d3dcompiler_47.dll を除外(通常不要)
--no-opengl-sw ソフトウェア OpenGL を除外
--no-compiler-runtime vc_redist.x64.exe を同梱しない(ランタイム DLL は次の手順で直接コピーする)

4.2.1 MSVC ランタイム DLL のコピー

配布先に Visual C++ 再頒布可能パッケージがなくても起動できるよう、 MSVC ランタイム DLL(vcruntime140.dll, msvcp140.dll 等)を exe と同じディレクトリに同梱する。 Developer PowerShell for VS では VCToolsRedistDir 環境変数がランタイムの配置先を指している:

copy "$env:VCToolsRedistDir\x64\Microsoft.VC*.CRT\*.dll" deploy\

Hayanagi\hayanagi.exe は自分と同じディレクトリの DLL しか探さないため、読み込む3個(vcruntime140.dll, vcruntime140_1.dll, msvcp140.dll)だけを Hayanagi\ にも置く:

foreach ($dll in "vcruntime140.dll", "vcruntime140_1.dll", "msvcp140.dll") {
    copy "$env:VCToolsRedistDir\x64\Microsoft.VC*.CRT\$dll" deploy\Hayanagi\
}

windeployqt のデフォルトでは DLL ではなく vc_redist.x64.exe(約 18 MB)が同梱されるが、 利用者がそれを手動で実行しない限りランタイムは導入されないため、DLL を直接同梱する。

4.3 デプロイ後の確認

# ディレクトリ構造の確認
tree /F deploy

# 必須 DLL の確認
dir deploy\Qt6Core.dll
dir deploy\Qt6Gui.dll
dir deploy\Qt6Widgets.dll
dir deploy\Qt6Charts.dll
dir deploy\Qt6Network.dll

# MSVC ランタイム DLL の確認
dir deploy\vcruntime140.dll
dir deploy\vcruntime140_1.dll
dir deploy\msvcp140.dll

# platforms プラグインの確認
dir deploy\platforms\qwindows.dll
dir deploy\platforms\qoffscreen.dll

# SQLite ドライバー(詰将棋の解答履歴の保存に使う)
dir deploy\sqldrivers\qsqlite.dll

# Hayanagi・定跡と問題集(6ファイル)
dir deploy\Hayanagi
dir deploy\Hayanagi\book\hayanagi_book.db
dir deploy\data\tsumeshogi

デプロイ後のディレクトリ構造:

deploy/
├── ShogiBoardQ.exe                ← 実行ファイル
├── shogiboardq-cli.exe            ← CLI(MCP サーバーが呼び出す)
├── LICENSE                        ← ライセンス
├── ShogiBoardQ_ja_JP.qm           ← 日本語翻訳
├── ShogiBoardQ_en.qm              ← 英語翻訳
├── ShogiBoardQ_zh_CN.qm           ← 中国語(簡体字)翻訳
├── ShogiBoardQ_zh_TW.qm           ← 中国語(繁体字)翻訳
├── Qt6Core.dll                    ← Qt Core
├── Qt6Gui.dll                     ← Qt GUI
├── Qt6Widgets.dll                 ← Qt Widgets
├── Qt6Charts.dll                  ← Qt Charts
├── Qt6Network.dll                 ← Qt Network
├── Qt6Multimedia.dll              ← Qt Multimedia(駒音)
├── Qt6OpenGL.dll                  ← Qt OpenGL (Charts 依存)
├── Qt6OpenGLWidgets.dll           ← Qt OpenGL Widgets
├── Qt6Svg.dll                     ← Qt SVG (アイコン用)
├── Qt6Sql.dll                     ← Qt SQL(解答履歴)
├── avcodec-61.dll 等              ← FFmpeg(駒音の再生)
├── vcruntime140.dll               ← MSVC ランタイム
├── vcruntime140_1.dll
├── msvcp140.dll
├── ...                            ← その他の MSVC ランタイム DLL(concrt140.dll 等)
├── Hayanagi/
│   ├── hayanagi.exe               ← 通常対局用 USI エンジン
│   ├── vcruntime140.dll           ← Hayanagi 用 MSVC ランタイム(この3個のみ)
│   ├── vcruntime140_1.dll
│   ├── msvcp140.dll
│   └── book/hayanagi_book.db      ← Hayanagi の定跡
├── data/tsumeshogi/
│   ├── tsume_3ply_1000_*.txt      ← 詰将棋問題集(3〜13手詰、各1,000題)
│   ├── ...
│   └── tsume_13ply_1000_*.txt
├── platforms/
│   ├── qwindows.dll               ← Windows プラットフォームプラグイン
│   └── qoffscreen.dll             ← shogiboardq-cli の盤面描画用
├── sqldrivers/
│   ├── qsqlite.dll                ← SQLite(詰将棋の解答履歴)
│   └── ...
├── multimedia/
│   ├── ffmpegmediaplugin.dll      ← 駒音の再生
│   └── windowsmediaplugin.dll
├── imageformats/
│   ├── qsvg.dll                   ← SVG サポート
│   ├── qico.dll                   ← ICO サポート
│   └── ...
├── styles/
│   └── qmodernwindowsstyle.dll    ← Windows スタイル
├── tls/
│   └── qschannelbackend.dll       ← TLS (CSA ネットワーク通信用)
└── networkinformation/
    └── qnetworklistmanager.dll    ← ネットワーク情報

MSVC ランタイム DLL を同梱しているため、配布先で Visual C++ 再頒布可能パッケージのインストールは不要。

4.4 動作テスト

deploy フォルダから直接起動してテスト:

.\deploy\ShogiBoardQ.exe

# CLI(バージョンと盤面画像の作成)
.\deploy\shogiboardq-cli.exe version
.\deploy\shogiboardq-cli.exe render-board --sfen startpos --output board.png --overwrite

# Hayanagi(ShogiBoardQ と同じく Hayanagi のフォルダで起動し、id name Hayanagi … と
# info string book loaded が返ること)
cmd /c "cd deploy\Hayanagi && (echo usi& echo isready& echo quit) | .\hayanagi.exe"

重要: テストは Qt の bin ディレクトリが PATH に含まれない環境で行うこと。 PATH に Qt が含まれていると、deploy フォルダの DLL ではなくシステムの DLL が使われてしまい、 デプロイ漏れを検出できない。

4.5 ZIP ファイルの作成

Compress-Archive -Path deploy\* -DestinationPath ShogiBoardQ-windows.zip

5. GitHub Release での公開

5.1 タグの作成

版番号は、リリースする日にだけその日の日付に上げる(版番号とリリースの運用)。配布物を作る前に CMakeLists.txt の APP_VERSION を変えてコミットし、そのコミットから配布物を作ってから、同じコミットに同じ版番号のタグを付ける。タグには v を付けない。

git tag -a 2026.10.07 -m "ShogiBoardQ 2026.10.07"
git push origin main 2026.10.07

5.2 GitHub CLI でリリース作成

GitHub CLI (gh) を使用:

# インストール
winget install GitHub.cli

# ログイン(初回のみ)
gh auth login

リリース作成とアセットのアップロード:

gh release create 2026.10.07 `
  --title "ShogiBoardQ 2026.10.07" `
  --notes-file RELEASE_NOTES.md `
  ShogiBoardQ-windows.zip

macOS の DMG も同時に公開する場合は、アセットを追加:

gh release create 2026.10.07 `
  --title "ShogiBoardQ 2026.10.07" `
  --notes-file RELEASE_NOTES.md `
  ShogiBoardQ-windows.zip `
  ShogiBoardQ.dmg

リリースノートの自動生成

リリースノートファイルを用意しない場合、GitHub が自動生成する:

gh release create 2026.10.07 `
  --title "ShogiBoardQ 2026.10.07" `
  --generate-notes `
  ShogiBoardQ-windows.zip

5.3 Web UI からリリース作成(代替)

  1. GitHub リポジトリ → Releases → Draft a new release
  2. Choose a tag → 新しいタグ(例: 2026.10.07)を入力して作成
  3. Release title を入力(例: ShogiBoardQ 2026.10.07)
  4. Description にリリースノートを記入
  5. Attach binaries に ShogiBoardQ-windows.zip をドラッグ&ドロップ
  6. Publish release をクリック

5.4 リリースノートの書き方(テンプレート)

## ShogiBoardQ 2026.10.07

### ダウンロード

| OS | ファイル |
|---|---|
| Windows (64-bit) | `ShogiBoardQ-windows.zip` |
| macOS | `ShogiBoardQ.dmg` |

### Windows での起動方法

1. ZIP ファイルを展開
2. `ShogiBoardQ.exe` をダブルクリック

> 初回起動時に「Windows によって PC が保護されました」と表示される場合は、
> 「詳細情報」→「実行」をクリックしてください。

### 変更点

- ...

6. コード署名(オプション)

署名なしでも動作するが、初回起動時に SmartScreen の警告が表示される。

6.1 コード署名証明書の取得

コード署名には EV(Extended Validation)コード署名証明書が推奨。 個人開発者向けには OV(Organization Validation)証明書も選択肢。

主なプロバイダ:

6.2 signtool で署名

# Windows SDK に含まれる signtool を使用
signtool sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 `
  /f "certificate.pfx" /p "password" `
  deploy\ShogiBoardQ.exe

6.3 署名なしで配布する場合

ユーザーに以下を案内する:

  1. ダウンロード後、ZIP を右クリック → プロパティ → 「ブロックの解除」にチェック → OK
  2. 展開後、ShogiBoardQ.exe を実行
  3. SmartScreen の警告が表示された場合、「詳細情報」→「実行」をクリック

7. トラブルシューティング

Qt が見つからない

CMake Error: Could not find a package configuration file provided by "Qt6"

Qt のインストールパスを明示的に指定する:

cmake -B build -S . -G Ninja -DCMAKE_BUILD_TYPE=Release `
  -DCMAKE_PREFIX_PATH="C:\Qt\6.8.3\msvc2022_64"

cl.exe が見つからない

Developer PowerShell for VS 2022 を使用していない場合:

# 手動で MSVC 環境をセットアップ
# Visual Studio 2022 の場合
& "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64

または、スタートメニューから Developer PowerShell for VS 2022 を起動する。

windeployqt が見つからない

# Qt のインストールパスを確認し、PATH に追加
$env:PATH = "C:\Qt\6.8.3\msvc2022_64\bin;$env:PATH"

# 確認
windeployqt --version

アプリが起動しない(DLL エラー)

"Qt6Core.dll が見つかりません" 等のエラー
  1. windeployqt を再実行する

  2. 必須 DLL がすべて deploy ディレクトリに存在するか確認:

    dir deploy\Qt6Core.dll
    dir deploy\Qt6Gui.dll
    dir deploy\Qt6Widgets.dll
    dir deploy\Qt6Charts.dll
    dir deploy\Qt6Network.dll
    dir deploy\platforms\qwindows.dll
  3. MSVC ランタイムが不足している場合:

Qt Charts の DLL がデプロイされない

windeployqt が Qt Charts を検出できない場合、手動でコピー:

copy "C:\Qt\6.8.3\msvc2022_64\bin\Qt6Charts.dll" deploy\
copy "C:\Qt\6.8.3\msvc2022_64\bin\Qt6OpenGL.dll" deploy\
copy "C:\Qt\6.8.3\msvc2022_64\bin\Qt6OpenGLWidgets.dll" deploy\

翻訳が読み込まれない

.qm ファイルが exe と同じディレクトリに存在するか確認:

dir deploy\*.qm

ない場合、ビルドディレクトリから手動コピー:

copy build\ShogiBoardQ_ja_JP.qm deploy\
copy build\ShogiBoardQ_en.qm deploy\
copy build\ShogiBoardQ_zh_CN.qm deploy\
copy build\ShogiBoardQ_zh_TW.qm deploy\

実行ポリシーエラー(PowerShell スクリプト)

このシステムではスクリプトの実行が無効になっているため...
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

SmartScreen の警告(署名なし)

配布先ユーザーへの案内:

  1. ZIP を右クリック → プロパティ → ブロックの解除にチェック → OK
  2. ZIP を展開してから実行
  3. 「Windows によって PC が保護されました」→ 詳細情報 → 実行

ダウンロード数が増えると SmartScreen の信頼度が上がり、警告が表示されにくくなる。