メインコンテンツまでスキップ
バージョン: 最新 (develop)

リリース手順 (release-agent)

scripts/release-agent.ts を使った version bump → コミット → push → PR → タグ → GitHub Release の自動化スクリプトです。

リリース作業はこのスクリプトに統一してください。手動での version bump やタグ付けは行いません。


2 段リリース構成

develop → staging → main の 2 段でリリースします。基準番号 (x.y.z) を決めるのは staging 段の 1 回だけで、本番(main)段では -rc を外して確定するだけです。これにより、staging で確認した版と本番に出る版の番号が一致し、二重 bump を防ぎます。

① develop → staging(プレリリース) 1.1.0 → 1.2.0-rc.1 (再実行で rc.2, rc.3 ...)
② staging → main(確定) 1.2.0-rc.2 → 1.2.0 (-rc を外すだけ。再 bump しない)

注意(本番環境について): 現時点では本番 AWS 環境が未構築で、staging 環境で動作確認を行う運用です。② の staging → main(本番リリース)コマンドは将来の本番デプロイ用に温存してあり、いずれ本番環境への配線が必要になります。


⚠️ release PR のマージ方法(最重要・必読)

release PR(develop → staging および staging → main)は絶対に squash マージしない。必ず「マージコミット」で取り込む。

# ✅ 正しい(マージコミット)
gh pr merge <PR番号> --merge

# ❌ 禁止(squash)
gh pr merge <PR番号> --squash # ← staging が develop と祖先を共有しなくなる

理由: squash マージは develop の多数コミットを 祖先関係を持たない単一の新コミットに潰して staging に乗せます。すると developstaging の merge-base が前々回の分岐点まで巻き戻り、次回の release PR で「両ブランチが同じファイルを別々に変更した」と誤判定され、実体のない(phantom)コンフリクトが大量発生します(過去に rc.1 → rc.2 で発生)。

マージコミットなら staging が develop の履歴を親として共有するため、この phantom conflict は起きません。

機能 PR(* → develop)は従来どおり squash でよい。この禁止ルールは release PR(base が staging または main)に限る

万一 squash してしまい phantom conflict が起きた場合の復旧: staging をリリース commit(タグ vX.Y.Z-rc.N が指す develop 上の commit)に git push origin <commit>:staging --force で fast-forward させ、祖先共有を回復する。staging 固有コミットは squash 由来で内容は develop に内包済みのためロスはないが、force-push 前に「staging に develop へ無い独自内容が無いこと」を必ず確認する。


TL;DR

# ── ① develop → staging(プレリリース)──
pnpm run release:stg:dry # 何が起きるか確認(書き込みなし)
pnpm run release:stg # 実行(patch 相当の rc)

# ── ② staging → main(本番確定)── ※ 本番環境構築後に使用
pnpm run release:dry # 確認
pnpm run release:patch # 実行(-rc を外して確定)

前提条件

  • ルートで pnpm install 済み(tsx が必要)
  • gh (GitHub CLI) がインストール・認証済み(gh auth status で確認)
  • コミットされていない変更がないこと
  • 任意のブランチから実行可能(スクリプトが元ブランチへ自動で checkout する)

① develop → staging(プレリリース)

処理の流れ

  1. develop ブランチを最新化
  2. 変更モジュールを検出し、各 package.json の version を x.y.z-rc.N に bump (すでに rc 中なら base 据え置きで rc 番号のみ加算。rc サイクル中は type を無視
  3. version 変更をコミットし、develop へ push
  4. staging 向けの Pull Request を作成(--base staging --head develop
  5. プレリリース用 Git タグ vX.Y.Z-rc.N を作成
  6. GitHub Release を prerelease 扱いで作成

コマンド一覧

コマンド内容
pnpm run release:stg:dryドライラン(patch 相当、書き込みなし)
pnpm run release:stgプレリリース(patch 基準 → x.y.Z-rc.N
pnpm run release:stg:minorプレリリース(minor 基準 → x.Y.0-rc.N
pnpm run release:stg:majorプレリリース(major 基準 → X.0.0-rc.N
pnpm run release:stg:skip-pr同上(patch)、PR 作成をスキップ

② staging → main(本番・確定リリース)※本番環境構築後

処理の流れ

  1. staging ブランチを最新化
  2. version の -rc を外して確定(1.2.0-rc.2 → 1.2.0)。再 bump はしない (rc を経由していないパッケージはフォールバックで通常 bump)
  3. version 変更をコミットし、staging へ push
  4. main 向けの Pull Request を作成(--base main --head staging
  5. Git タグ vX.Y.Z を作成
  6. GitHub Release を作成

コマンド一覧

コマンド内容
pnpm run releaseヘルプ表示
pnpm run release:dryドライラン(patch、書き込みなし)
pnpm run release:patch確定リリース(x.y.Z
pnpm run release:minor確定リリース(x.Y.0
pnpm run release:major確定リリース(X.0.0
pnpm run release:patch:skip-pr / :minor:skip-pr / :major:skip-pr同上、PR 作成をスキップ

バージョンタイプの目安

  • patch: バグ修正のみ
  • minor: 後方互換のある機能追加
  • major: 破壊的変更

オプション

scripts/release-agent.ts に直接渡せるオプション(pnpm exec tsx scripts/release-agent.ts <type> [オプション]):

オプション内容
--prereleaseプレリリースモード(develop → staging)。x.y.z-rc.N に bump し Release を prerelease 扱いにする
--from <branch>version bump を行う元ブランチ(PR の head)。省略時は --prerelease なら develop、それ以外は staging
--merge-to <branch>PR のマージ先(複数可)。省略時は --prerelease なら staging、それ以外は main
--dry-run, -dドライラン(実際の変更を行わない)
--skip-prPR 作成をスキップ
--skip-tagタグ作成をスキップ
--skip-releaseGitHub Release 作成をスキップ
--message, -m <msg>コミットメッセージを指定
--help, -hヘルプを表示

完全なヘルプは pnpm run release または pnpm exec tsx scripts/release-agent.ts --help で確認できます。


Claude Code での使い方

Claude Code に リリースしたい旨を伝えるだけで自動的にこのスクリプトが起動します。どちらの段かを明示してください。

ステージングにリリースして → ① develop → staging(release:stg)
本番リリースして / 確定リリース → ② staging → main(release:patch 等)

Claude は以下のように動きます:

  1. まず該当のドライラン(release:stg:dry または release:dry)を実行し、bump 内容を提示
  2. 内容を確認してから本番コマンドを実行
  3. 作成された PR と Release の URL を報告

段(staging / 本番)やバージョンタイプが不明な場合は Claude が確認します。


リリース後の手順

① develop → staging の後

  1. PR を確認: gh pr view --web
  2. Release を確認: gh release view v<version>-rc.<N> --web
  3. PR を マージコミットでマージ(gh pr merge <PR番号> --mergesquash 禁止。理由は「⚠️ release PR のマージ方法」参照)
  4. マージ後、staging 環境で動作確認

② staging → main の後

  1. PR を確認: gh pr view --web
  2. Release を確認: gh release view v<version> --web
  3. PR を マージコミットでマージ(gh pr merge <PR番号> --mergesquash 禁止
  4. マージ後、main ブランチを pull してデプロイ(※本番環境構築後)