Skip to content

リリース手順 (yarn release)

WingStats Manager(broadcast-Overlay)のリリース作業を yarn release 1 コマンドに集約するためのドキュメント。push と tag push は依然として人間の手作業で、CLAUDE.md の「リリース管理」原則を構造的に守る前提で書かれている。

🚧 自動化の範囲: version bump / CHANGELOG 追記 / release commit / annotated tag 作成。 🚫 自動化しない: git pushgit push --tagspackage.json 直接編集、CHANGELOG.md 直接編集(このスクリプト経由でのみ許可)。

0-A. リリーストラック(git-flow lite)

リリースは 2 トラックに分かれる。どちらも最終的に mainyarn release → tag を打つ。

トラックブランチbump頻度動線
キャラ追加chars/* (off main)patch高頻度chars/* → PR(base=main) → merge → yarn release patch → push+tag → 戻しマージ
機能追加feature/*developminor(破壊的は major)低頻度develop に集約 → develop→main PR(base=main) → yarn release minor → push+tag → 戻しマージ
  • バージョン番号で区別できる: Z 増加 = キャラ/修正、Y 増加 = 機能。
  • キャラは main からしか枝を切らないため、開発中(develop)の機能差分がキャラリリースに混ざらない。
  • 緊急バグ修正は fix/* (off main) で patch リリースできる。

リリース完了後は必ず戻しマージを行う(次節「## 7. リリース後の戻しマージ」参照)。

0. 前提

  • ブランチが main(または --allow-branch <name> で明示的に許可)
  • working tree がクリーン(既ステージ / 未追跡変更なし)
  • yarn typecheck / yarn lint / yarn test:unit / yarn build がローカルで pass
  • git fetch --tags が走る(スクリプトが自動で叩く)
  • 直近 tag 〜 HEAD に 少なくとも 1 つの Conventional Commitfeat: / fix: / perf: 等)がある

1. 基本手順

bash
# 1) どの type で bump するかを決めてコマンドを叩く
yarn release patch           # 1.2.3 → 1.2.4
yarn release minor           # 1.2.3 → 1.3.0
yarn release major           # 1.2.3 → 2.0.0
yarn release --version 1.5.0 # 明示指定(現状より大きい値のみ)

# 2) 事前チェックが順に流れる
#    ✓ branch / clean tree / fetch / tag duplicate / yarn ci 系

# 3) CHANGELOG.draft.md がエディタで開く
#    Conventional Commits を section 別に分類した markdown が入っている
#    必要に応じて文面を整え、エディタを閉じて保存

# 4) スクリプトが続きを実行
#    - package.json の version 書き換え
#    - CHANGELOG.md の先頭にドラフトを挿入
#    - release commit + annotated tag を作成(local のみ)

# 5) 「次のコマンド」が表示される
#    git push origin main
#    git push origin v1.2.4
#    → これは **手動で**実行してください

2. オプション

フラグ用途
--no-editエディタを開かずドラフトをそのまま採用(CI / 自動化時のみ推奨)
--dry-runファイル / commit / tag を一切書き換えず、出力だけ確認
--skip-checksyarn typecheck / lint / test:unit / build を skip(直前に手で全部走らせた前提)
--allow-branch <name>main 以外で release を許可(hotfix リハーサル等)
--draft <path>ドラフトの出力先を指定(既定: ./CHANGELOG.draft.md
-h / --helpヘルプ

3. 失敗時の戻し方

スクリプトは 作業内容を消さない設計git reset --hard を使わない)。各失敗ケースの状態:

失敗ポイントスクリプトがやること手動で必要なら
prechecks 失敗何も書き換えていない、そのまま exit 1警告に従って fix
エディタ異常終了CHANGELOG.draft.md を消し、何も書き換えていない
draft が空CHANGELOG.draft.md を消し、何も書き換えていない
ファイル書き換え後の失敗git restore --staged --worktreepackage.json / CHANGELOG.md を HEAD に戻す
commit 後の tag 失敗git reset --soft HEAD^ で release commit を取消 + ファイル復元
Ctrl+C 中断同上(commit があれば soft reset、ファイル変更は restore)

release を完全に取り消したい

push する前なら:

bash
git tag -d vX.Y.Z          # local tag を消す
git reset --soft HEAD^      # release commit を取り消し(変更は staging に残る)
git restore --staged --worktree -- package.json CHANGELOG.md

push 済みで取り消したい場合は、tag を delete + revert commit を別途作成する(ここではフォローしない、慎重に)。

4. push(手動)

スクリプト終了時の表示に従う。必ず両方 push する:

bash
git push origin main
git push origin vX.Y.Z

tag を push すると .github/workflows/release.yml が起動し、GitHub Release + NSIS / Portable build が自動で作られる。tag を push しないとビルドは走らない。

4-A. リリース成果物の構成(3 exe)

recording-service-split (Phase F) 以降、インストール先($INSTDIR = win-unpacked と同一構成)には 3 つの起動エントリが並ぶ。実体は同一バイナリのコピーで、モード分岐は起動時の exe 名判定(argv フラグが常に優先)に委ねる。

exe生成方法subsystem役割
WingStats Manager.exeelectron-builder の原本GUI既定 = Manager(overlayManager。管理画面 + オーバーレイ)
WingStats Recorder.exeafterPack hook がコピー + PE subsystem を Console 化Console常駐録画サービス(トレイ + ログ監視。UI 抑制)
WingStats Viewer.exeafterPack hook がコピー(パッチなし)GUI軽量確認クライアント(戦績ウィンドウ 1 枚)
  • モード判定の優先順位: --recorder-mode フラグ > exe 名 "recorder" > --viewer-mode フラグ > exe 名 "viewer" > 既定 Manager(detectRecorderMode / detectViewerMode)。
  • ショートカット: Desktop = Manager + Recorder の 2 本 / Start Menu = 3 本(Manager は electron-builder 標準、Recorder / Viewer は build/installer.nsh の customInstall)。HKCU Run キー(自動起動)は Recorder のみ。
  • portable 版: afterPack は win-unpacked に対して走るため portable にも 3 exe が同梱される(起動 UX は従来どおり Manager のみ)。
  • app.asar / DLL / dist は 3 exe で共有(1 セットのみ)。Viewer.exe は Manager.exe とバイト同一(署名・SmartScreen レピュテーションを共有)、Recorder.exe のみ 2 バイトの subsystem パッチでハッシュが異なる。

サイズ目安

成果物サイズ目安
NSIS インストーラ (WingStats Manager Setup x.y.z.exe)約 234 MB(実測: 3 exe 世代の初回ビルド。2 exe 世代 5.3.1 は 174.4MB)
Portable (WingStats Manager x.y.z.exe)約 234 MB(実測)
インストール後 $INSTDIR 合計約 831 MB(実測: exe 3 本 × 約 201MB + 共有 resources)
exe 単体(3 本とも同等)約 201MB(v5.4.0 世代の実測)

exe コピー方式のため 2 exe 時代(インストーラ 174.5MB / win-unpacked 629MB)から約 +50MB / +201MB 増える。7z solid 圧縮の LZMA 辞書(≤64MB)は 201MB の同一ファイル重複を除去できないため、インストーラも exe 追加分だけ素直に増える。サイズ最適化(NSIS ハードリンク化 / launcher stub 化)は苦情が出た場合の post-F 候補。

5. CHANGELOG ドラフトの作り方(参考)

scripts/release/generateChangelog.ts の純粋関数で、vX.Y.Z..HEAD の commit を以下のルールで分類する:

commit typesection
feat: / feature:✨ 新機能・アップデート
fix: / revert:🐛 バグ修正
perf: / refactor: / style:🔧 改善
docs: / test: / build: / ci: / chore:🛠 内部 / ドキュメント
type!: または body に BREAKING CHANGE:💥 破壊的変更(最上段に出る)

Merge pull request / Merge branch で始まるコミットと、release: vX.Y.Z 系の自前リリース commit は CHANGELOG に含めない

7. リリース後の戻しマージ(main → develop)

yarn releasemain にリリース commit + tag が乗ったら、その内容を develop にも反映する。 これを忘れると次の機能リリースでキャラ差分が二重に出たり競合する。

powershell
# 確認(副作用なし)
pwsh -NoProfile -File ./scripts/dev/sync-main-to-develop.ps1 -DryRun

# 実行(develop に checkout → main を merge → push)
pwsh -NoProfile -File ./scripts/dev/sync-main-to-develop.ps1
  • merge のみを使う(rebase / reset --hard / force push は禁止)。
  • push したくない場合は -NoPush
  • 実行後はカレントが develop になるので、続けて作業しないなら git checkout main で戻る。

6. 関連リンク