Agent skill
release-procedure
Use when user says 'release', 'リリース', 'deploy', 'publish', 'vtag', 'version up', 'バージョンアップ', or discusses merging to main/develop. Guides through version bump and release flow.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/release-procedure
SKILL.md
リリース手順ガイド
目的
バージョンアップとリリースが正しい手順で行われることを担保する。
リリースブランチ作成時のチェックリスト
release/ ブランチを作成したら、必ず以下を実行:*
# 1. バージョン自動更新(ブランチ名から検出)
deno task bump-version
# 2. 確認
grep '"version"' deno.json
grep 'CLIMPT_VERSION' src/version.ts
# 3. ローカルCI
deno task ci
# 4. コミット & プッシュ
git add deno.json src/version.ts
git commit -m "chore: bump version to x.y.z"
git push -u origin release/x.y.z
ドキュメント更新(リリース前必須)
重要: リリース前に以下の2つのスキルを使用してドキュメントを更新すること。
1. CHANGELOG 更新
/update-changelog スキルを使用:
- 変更内容を [Unreleased] セクションに記載
- 検索可能なキーワードを含める(コマンド名、オプション名、設定名)
- リリース時に [x.y.z] - YYYY-MM-DD へ移動
2. ドキュメント更新
/update-docs スキルを使用:
- 変更の種類に応じて適切な場所を更新
- CLI オプション変更 →
--help必須、README 推奨 - 新機能 → README に簡潔な説明とサンプル
- 設定変更 → スキーマ説明、README/docs
チェックリスト
□ CHANGELOG.md に変更を記載(/update-changelog)
□ 必要なドキュメントを更新(/update-docs)
□ CLI変更 → --help 出力確認
□ 新機能 → README.md / README.ja.md
□ Agent変更 → agents/README.md
□ 設定変更 → スキーマ説明
重要: deno task bump-version は release/* ブランチ名からバージョンを自動検出する。
手動指定も可能: deno task bump-version 1.10.2
重要: 連続マージの禁止事項
release/ → develop → main への連続マージは、必ずユーザーの明示的な指示を受けてから実行すること。*
禁止事項:
- ユーザーの指示なしに連続マージを実行
- 「リリースして」等の曖昧な指示で main まで一気にマージ
- 独自判断での develop → main マージ
正しい手順:
- 各 PR 作成後、ユーザーに報告して次の指示を待つ
- 「develop まで」「main まで」等の明示的な指示を確認
- vtag 作成もユーザーの指示を待つ
トリガー条件
以下の操作について議論・作業する際に自動的に実行:
release/*ブランチへの pushrelease/*→developへの PR 作成・マージdevelop→mainへの PR 作成・マージ- バージョンアップ・リリースに関する議論
- vtag の作成
バージョン管理ファイル
このプロジェクトでは以下の2ファイルでバージョンを管理:
| ファイル | 用途 |
|---|---|
deno.json |
JSR パッケージバージョン("version": "x.y.z") |
src/version.ts |
CLI バージョン定数(CLIMPT_VERSION = "x.y.z") |
重要: 両ファイルのバージョンは必ず一致させること。CIで自動チェックされる。
バージョンアップ手順
1. バージョン番号の決定
パッチ (x.y.Z): バグ修正、ドキュメント改善
マイナー (x.Y.0): 新機能追加(後方互換あり)
メジャー (X.0.0): 破壊的変更
2. ファイル更新
# deno.json
# "version": "1.9.13" → "version": "1.9.14"
# src/version.ts
# export const CLIMPT_VERSION = "1.9.13"; → "1.9.14";
3. 確認コマンド
# バージョン一致確認
grep '"version"' deno.json | head -1
grep 'CLIMPT_VERSION' src/version.ts | grep export
リリースフロー
フロー図
sequenceDiagram
participant R as release/x.y.z
participant D as develop
participant M as main
participant T as vtag
Note over R: 1. バージョンアップ
R->>R: deno.json, version.ts 更新
Note over R: 2. ローカルCI確認
R->>R: deno task ci
R->>R: 3. git commit & push
R->>D: 4. PR作成 (release → develop)
Note over D: 5. CI確認(全てpass)
D->>D: PRマージ
D->>M: 6. PR作成 (develop → main)
Note over M: 7. CI確認(全てpass)
M->>M: PRマージ
Note over M: JSR publish 自動実行
M->>T: 8. vtag作成
Note over T: git tag vx.y.z
手順詳細
ステップ 0: 準備
# 作業ブランチを release/* に統合済みか確認
git checkout release/x.y.z
git log --oneline -10
ステップ 1: release/* ブランチでバージョンアップ
# develop から新規作成する場合
git checkout develop
git checkout -b release/x.y.z
# または既存 release/* で作業
git checkout release/x.y.z
バージョン更新(自動スクリプト使用):
# ブランチ名から自動検出してバージョン更新
deno task bump-version
# または明示的に指定
deno task bump-version x.y.z
# 確認
grep '"version"' deno.json
grep 'export const CLIMPT_VERSION' src/version.ts
ステップ 2: ローカルCI確認
重要: プッシュ前に必ずローカルでCIを通すこと
deno task ci
全てのステージがパスすることを確認してから次のステップへ進む。
ステップ 3: コミット & プッシュ
git add deno.json src/version.ts
git commit -m "chore: bump version to x.y.z"
git push -u origin release/x.y.z
注意: dangerouslyDisableSandbox: true が必要
ステップ 4: release/* → develop PR
gh pr create --base develop --head release/x.y.z \
--title "Release x.y.z: <変更概要>" \
--body "## Summary
- <変更点>
## Version
- x.y.z"
ステップ 5: CI確認 & develop へマージ
重要: マージ前にPRのCIが全てパスすることを確認
# CI確認(全てpassになるまで待機)
gh pr checks <PR番号> --watch
# CIがpassしたらマージ
gh pr merge <PR番号> --merge
ステップ 6: develop → main PR
gh pr create --base main --head develop \
--title "Release x.y.z" \
--body "Release version x.y.z to production"
ステップ 7: CI確認 & main へマージ
重要: マージ前にPRのCIが全てパスすることを確認
# CI確認(全てpassになるまで待機)
gh pr checks <PR番号> --watch
# CIがpassしたらマージ
gh pr merge <PR番号> --merge
自動処理: main マージ時に JSR publish が自動実行される
ステップ 8: vtag 作成
# main の最新コミットを取得
git fetch origin main
# vtag 作成 & push
git tag vx.y.z origin/main
git push origin vx.y.z
重要: vtag は必ず main ブランチのコミットに付与する
ステップ 9: クリーンアップ(ブランチ削除)
重要: このリポジトリは deleteBranchOnMerge が無効のため、マージ後の手動削除が必要。
ブランチ削除判断基準
| ブランチ | 削除タイミング | 削除可否 |
|---|---|---|
feature/*, fix/*, refactor/*, docs/* |
release/* へマージ後 | ✓ 削除する |
release/* |
develop へマージ後(かつ vtag 作成後) | ✓ 削除する |
develop |
- | ✗ 削除禁止(長期ブランチ) |
main |
- | ✗ 削除禁止(長期ブランチ) |
マージ済み確認方法
# ブランチが特定ブランチにマージ済みか確認
git fetch origin
git merge-base --is-ancestor origin/<source-branch> origin/<target-branch> && echo "マージ済み" || echo "未マージ"
# 例: feature/xxx が release/1.10.2 にマージ済みか
git merge-base --is-ancestor origin/feature/xxx origin/release/1.10.2 && echo "マージ済み"
# 例: release/1.10.2 が develop にマージ済みか
git merge-base --is-ancestor origin/release/1.10.2 origin/develop && echo "マージ済み"
削除実行
# develop に戻る
git checkout develop
git pull origin develop
# ローカル + リモート両方を削除
git branch -D <branch-name>
git push origin --delete <branch-name>
# release ブランチ削除例
git branch -D release/x.y.z
git push origin --delete release/x.y.z
# feature ブランチ削除例
git branch -D feature/xxx
git push origin --delete feature/xxx
削除漏れチェック
# マージ済みなのに残っているブランチを検出
git fetch --prune origin
git branch -r | grep -E "feature/|fix/|refactor/|docs/|release/" | while read branch; do
branch_name=${branch#origin/}
if git merge-base --is-ancestor "$branch" origin/develop 2>/dev/null; then
echo "削除可能: $branch_name (develop にマージ済み)"
fi
done
CI バージョンチェック
.github/workflows/test.yml で以下を自動チェック:
チェック内容
| チェック項目 | 対象ブランチ | 失敗時のエラー |
|---|---|---|
| deno.json と version.ts の一致 | 全ブランチ | Version mismatch: deno.json=X, version.ts=Y |
| ブランチ名とバージョンの一致 | release/* のみ | Branch version mismatch: branch=X, deno.json=Y |
release/* ブランチでの追加チェック
release/1.9.15 ブランチでは:
- deno.json の version が "1.9.15" であること
- src/version.ts の CLIMPT_VERSION が "1.9.15" であること
チェックを通すための確認コマンド
# 現在のブランチ名からバージョンを確認
git branch --show-current | sed 's|release/||'
# deno.json のバージョン
grep '"version"' deno.json | head -1 | sed 's/.*"\([0-9.]*\)".*/\1/'
# version.ts のバージョン
grep 'export const CLIMPT_VERSION' src/version.ts | sed 's/.*"\([0-9.]*\)".*/\1/'
# 3つが全て一致することを確認
チェック失敗時の対処
# release/1.9.15 でバージョンが 1.9.14 のままだった場合
# 1. deno.json を編集: "version": "1.9.15"
# 2. version.ts を編集: CLIMPT_VERSION = "1.9.15"
# 3. コミット & push
git add deno.json src/version.ts
git commit -m "fix: correct version to 1.9.15"
git push origin release/1.9.15
クイックリファレンス
バージョンアップ:
1. deno.json の version を更新
2. src/version.ts の CLIMPT_VERSION を更新
3. deno task ci ← ローカルCIを通す(重要)
4. git commit -m "chore: bump version to x.y.z"
ドキュメント更新(リリース前必須):
1. /update-changelog → CHANGELOG.md に変更を記載
2. /update-docs → README, --help 等を必要に応じて更新
リリースフロー:
1. release/* → develop PR作成
2. gh pr checks <PR番号> --watch ← CIがpassするまで待機
3. gh pr merge <PR番号> --merge
4. develop → main PR作成
5. gh pr checks <PR番号> --watch ← CIがpassするまで待機
6. gh pr merge <PR番号> --merge (JSR publish 自動)
7. vtag作成: git tag vx.y.z origin/main && git push origin vx.y.z
8. クリーンアップ: release/*, 作業ブランチ削除(ローカル+リモート)
ブランチ削除判断:
- feature/*, fix/*, refactor/*, docs/* → release/* マージ後に削除
- release/* → develop マージ後(vtag作成後)に削除
- develop/main → 削除禁止(長期ブランチ)
- 確認: git merge-base --is-ancestor origin/<branch> origin/develop
サンドボックス注意:
git push, gh コマンドは dangerouslyDisableSandbox: true が必要
トラブルシューティング
JSR publish がスキップされた
原因: deno.json のバージョンが既存と同じ
# 確認
gh run view <run-id> --log | grep -i "skip"
# 対処: バージョンを上げて再リリース
CI バージョンチェック失敗
原因: deno.json と version.ts の不一致、またはブランチ名との不一致
# 確認
grep '"version"' deno.json
grep 'export const CLIMPT_VERSION' src/version.ts
git branch --show-current
# 対処: 全て同じバージョンに統一
vtag が古いコミットを指している
# 確認
git show vx.y.z --oneline
# 対処: タグ削除 & 再作成
git tag -d vx.y.z
git push origin :refs/tags/vx.y.z
git tag vx.y.z origin/main
git push origin vx.y.z
Didn't find tool you were looking for?