Back to list
takemo101

release-workflow

by takemo101

0🍴 0📅 Jan 24, 2026

SKILL.md


name: release-workflow description: バージョン整合性チェック→提案→承認→GitHub Release作成までの標準リリースフロー(マルチエコシステム対応)

リリースワークフロー

バージョン提案 → ユーザー承認 → リリース作成までの標準フローを定義する。


フロー概要

0.5. バージョン整合性チェック(ハードコード検出)
   ↓
1. バージョン提案(Sisyphusが自動計算)
   ↓
2. ユーザーがバージョンを承認/変更
   ↓
3. リリース実行(自動)
   - ハードコードバージョン修正(検出時)
   - バージョンファイル更新
   - CHANGELOG.md更新
   - コミット & タグ作成
   - push
   - GitHub Release作成
   - Release Workflow完了待機

実装環境

container-use不要

リリースワークフローではcontainer-useは不要です。

理由説明
コード変更なしバージョンファイル(Cargo.toml等)とCHANGELOG.mdのみ更新
ドキュメント操作のみ実行可能コードの変更を伴わない
タグ・リリース操作Gitタグ作成とGitHub Release操作のみ

ホスト環境で直接実行

# リリース作業はホスト環境で直接実行
git add Cargo.toml CHANGELOG.md
git commit -m "chore: release v<version>"
git tag -a v<version> -m "Release v<version>"
git push origin <default-branch> --tags
gh release create v<version> ...

対応エコシステム

エコシステムバージョンファイル検出条件
RustCargo.tomlCargo.toml 存在
Node.jspackage.jsonpackage.json 存在
Python (pyproject)pyproject.tomlpyproject.toml 存在
Python (setup.py)setup.pysetup.py 存在
Goタグのみgo.mod 存在
GenericVERSIONVERSION ファイル存在
Tag-onlyなし上記いずれも該当しない

自動検出の優先順位

  1. Cargo.toml → Rust
  2. package.json → Node.js
  3. pyproject.toml → Python (pyproject)
  4. setup.py → Python (setup.py)
  5. go.mod → Go
  6. VERSION → Generic
  7. いずれもなし → Tag-only

Note: 複数のエコシステムファイルが存在する場合、上記の優先順位で最初にマッチしたものを使用します。 スクリプトは検出時に警告を表示します。


Phase 0.5: バージョン整合性チェック

リリース前にコードベース内のハードコードされたバージョンを検出し、修正を提案する。

0.5.1 目的

  • ハードコードされたバージョン文字列の検出
  • 推奨パターン(動的バージョン取得)への移行提案
  • リリース時のバージョン不整合を防止

0.5.2 エコシステム別チェックパターン

Rust

パターン検索コマンド問題推奨修正
#[command(version = "x.x.x")]rg '#\[command\(version\s*=' --type rustclap属性にハードコード#[command(version)]
const VERSION: &str = "x.x.x"rg 'const\s+VERSION.*=.*"\d+\.\d+' --type rust定数定義env!("CARGO_PKG_VERSION")
static VERSIONrg 'static\s+VERSION.*=.*"\d+\.\d+' --type ruststatic定義env!("CARGO_PKG_VERSION")

Node.js

パターン検索コマンド問題推奨修正
const version = "x.x.x"rg 'const\s+version\s*=\s*["\x27]\d+\.\d+' --type js --type ts定数定義require('./package.json').version
VERSION = "x.x.x"rg 'VERSION\s*=\s*["\x27]\d+\.\d+' --type js --type ts大文字定数process.env.npm_package_version
.version("x.x.x")rg '\.version\(["\x27]\d+\.\d+' --type js --type tsメソッドチェーン動的取得に変更

Python

パターン検索コマンド問題推奨修正
__version__ = "x.x.x"rg '__version__\s*=\s*["\x27]\d+\.\d+' --type pyモジュールバージョンimportlib.metadata.version("pkg")
VERSION = "x.x.x"rg 'VERSION\s*=\s*["\x27]\d+\.\d+' --type py定数定義importlib.metadata.version("pkg")
version="x.x.x" in setup()rg 'version\s*=\s*["\x27]\d+\.\d+' setup.pysetup.py内pyproject.tomlに移行

Go

パターン検索コマンド問題推奨修正
var Version = "x.x.x"rg 'var\s+[Vv]ersion\s*=\s*"\d+\.\d+' --type go変数定義-ldflags "-X main.Version=..."
const Version = "x.x.x"rg 'const\s+[Vv]ersion\s*=\s*"\d+\.\d+' --type go定数定義-ldflagsでビルド時注入

0.5.3 共通チェックパターン(全エコシステム)

パターン検索コマンド対応
READMEバッジrg 'badge/v?\d+\.\d+\.\d+' README.md新バージョンに更新
シールドバッジrg 'shields\.io.*\d+\.\d+\.\d+' README.md新バージョンに更新
インストール例rg '@\d+\.\d+\.\d+' README.md新バージョンに更新
ドキュメント内バージョンrg 'v\d+\.\d+\.\d+' docs/警告表示(確認必要)

0.5.4 スクリプト実行

バージョン整合性チェックは release.sh に統合されています:

# Phase 0.5 のみ実行
.claude/skills/release-workflow/scripts/release.sh --version-check <new-version>

# 完全リリースフロー内で自動実行(デフォルト)
.claude/skills/release-workflow/scripts/release.sh --version 1.2.3

# Phase 0.5 をスキップして実行
.claude/skills/release-workflow/scripts/release.sh --version 1.2.3 --skip-version-check

依存: rg(ripgrep)がインストールされている場合は高速検索を使用。 未インストールの場合は grep -E にフォールバック。

0.5.5 出力フォーマット

## バージョン整合性チェック結果

### ⚠️ 検出されたハードコードバージョン

| ファイル | 行 | 現在の値 | 種別 | 推奨対応 |
|---------|-----|---------|------|---------|
| src/cli/args.rs | 5 | `version = "0.1.0"` | Rust/clap | `#[command(version)]` に変更 |
| README.md | 12 | `badge/v0.1.0` | バッジ | `v{NEW_VERSION}` に更新 |

### 対応オプション

1. **自動修正を適用** → 推奨パターンに変換(コード変更あり)
2. **バージョン番号のみ更新** → 現在のパターンを維持し値のみ更新
3. **スキップ** → 警告のみ、修正なし

> 番号を選択してください(1-3):

0.5.6 自動修正ルール

種別自動修正可能修正内容
Rust clap属性version = "x.x.x"version
Rust定数"x.x.x"env!("CARGO_PKG_VERSION")
READMEバッジバージョン番号を新バージョンに置換
Node.js定数⚠️ 確認必要使用箇所により異なる
Python __version__⚠️ 確認必要importlib使用可否による
Go変数❌ 手動ビルドスクリプト修正が必要
ドキュメント内⚠️ 確認必要コンテキストによる

0.5.7 Phase 0.5 スキップ条件

以下の場合はPhase 0.5をスキップ可能:

  • --skip-version-check フラグ指定時
  • 前回リリースからコード変更がない場合(CHANGELOG.mdのみ等)
  • ユーザーが明示的にスキップを選択

Phase 1: バージョン提案

1.1 エコシステム検出とバージョン取得

# スクリプトを使用(推奨)
.claude/skills/release-workflow/scripts/release.sh --detect

# または手動で検出
# Rust
grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/'

# Node.js
jq -r '.version' package.json

# Python (pyproject.toml)
grep '^version = ' pyproject.toml | head -1 | sed 's/version = "\(.*\)"/\1/'

# Python (setup.py)
grep -o "version=['\"][^'\"]*['\"]" setup.py | sed "s/version=['\"]\\([^'\"]*\\)['\"/\\1/"

# Go / Tag-only
git tag --sort=-version:refname | head -1 | sed 's/^v//'

# Generic
cat VERSION

1.2 変更内容の分析

# 前回リリースからのコミットを取得
git log <last-tag>..HEAD --oneline

1.3 セマンティックバージョニング判定

変更種別バージョン変更
Breaking ChangeMAJOR (x.0.0)API変更、後方互換性なし
新機能追加MINOR (0.x.0)機能追加、後方互換性あり
バグ修正PATCH (0.0.x)バグ修正、リファクタリング

1.4 提案フォーマット

## リリース提案

### エコシステム
<detected-ecosystem>

### 現在のバージョン
v0.4.0

### 前回リリースからの変更
- feat: 新機能追加(#XX)
- fix: バグ修正(#YY)

### 提案バージョン
**v0.5.0** (MINOR: 新機能追加)

### 変更種別
- ✨ 新機能: N件
- 🐛 バグ修正: N件
- 📝 ドキュメント: N件

---

**このバージョンでリリースしますか?**

1. **提案バージョンで続行** → v0.5.0 でリリース開始
2. **バージョン変更** → 手動でバージョンを入力
3. **キャンセル** → リリース中止

> 番号を選択してください(1-3):

参照: @.claude/skills/approval-gate/SKILL.md 形式に準拠


Phase 2: ユーザー承認

ユーザーがバージョンを承認または変更するまで待機。

選択アクション
1提案バージョンでリリース
2指定バージョンでリリース(入力プロンプト)
3リリース中止

Phase 3: リリース実行

3.1 バージョンファイル更新

# スクリプトを使用(推奨)
.claude/skills/release-workflow/scripts/release.sh --update-version <new-version>

# または手動で更新(エコシステム別)

Rust (Cargo.toml)

sed -i '' 's/^version = ".*"/version = "<new-version>"/' Cargo.toml

Node.js (package.json)

npm version <new-version> --no-git-tag-version
# または
jq '.version = "<new-version>"' package.json > tmp.json && mv tmp.json package.json

Python (pyproject.toml)

sed -i '' 's/^version = ".*"/version = "<new-version>"/' pyproject.toml

Python (setup.py)

sed -i '' "s/version=['\"][^'\"]*['\"]/version='<new-version>'/" setup.py

Generic (VERSION)

echo "<new-version>" > VERSION

Go / Tag-only

バージョンファイル更新なし(タグのみ)

3.2 CHANGELOG.md更新

変更内容を ## [Unreleased] の下に追加:

## [<new-version>] - <YYYY-MM-DD>

### Added
- 機能追加項目

### Fixed
- バグ修正項目

### Changed
- 変更項目

3.3 コミット & タグ作成

# スクリプトを使用(推奨)
.claude/skills/release-workflow/scripts/release.sh --commit <new-version>

# または手動
git add -A
git commit -m "chore: release v<new-version>"
git tag -a v<new-version> -m "Release v<new-version> - <summary>"
git push origin <default-branch> --tags

3.4 GitHub Release作成

# スクリプトを使用(推奨)
.claude/skills/release-workflow/scripts/release.sh --create-release <new-version> "<release-notes>"

# または手動
gh release create v<new-version> \
  --title "v<new-version> - <summary>" \
  --notes "<release-notes>"

3.5 Release Workflow完了待機

# スクリプトを使用(推奨)
.claude/skills/release-workflow/scripts/release.sh --watch

# または手動
gh run list --workflow=Release --limit 1
gh run watch <run-id>

3.6 リリースアセット確認

gh release view v<new-version> --json tagName,assets --jq '.tagName, (.assets[].name)'

スクリプト使用方法

.claude/skills/release-workflow/scripts/release.sh を使用することで、上記の処理を自動化できます。

基本コマンド

# エコシステム検出とバージョン表示
.claude/skills/release-workflow/scripts/release.sh --detect

# 完全自動リリース(対話モード)
.claude/skills/release-workflow/scripts/release.sh

# バージョン指定リリース
.claude/skills/release-workflow/scripts/release.sh --version 1.2.3

# ドライラン(実行せずに確認)
.claude/skills/release-workflow/scripts/release.sh --dry-run --version 1.2.3

個別操作

# バージョン更新のみ
.claude/skills/release-workflow/scripts/release.sh --update-version 1.2.3

# コミット & タグのみ
.claude/skills/release-workflow/scripts/release.sh --commit 1.2.3

# GitHub Release作成のみ
.claude/skills/release-workflow/scripts/release.sh --create-release 1.2.3 "Release notes here"

# Workflow監視
.claude/skills/release-workflow/scripts/release.sh --watch

リリースノートテンプレート

## <project-name> v<version>

### ✨ 新機能

#### <機能名>
<説明>

### 🐛 バグ修正

- <修正内容> (#<issue-number>)

### 📝 ドキュメント

- <ドキュメント変更>

---

### インストール方法

```bash
# エコシステムに応じたインストールコマンド

動作確認

<command> --version

システム要件

  • <要件>

---

## CHANGELOG.md テンプレート

```markdown
## [<version>] - <YYYY-MM-DD>

### Added
- **<機能名>**: <説明> (#<issue>)
  - <詳細1>
  - <詳細2>

### Fixed
- **<修正名>**: <説明> (#<issue>, #<pr>)

### Changed
- **<変更名>**: <説明>

### Deprecated
- **<非推奨名>**: <説明>

### Removed
- **<削除名>**: <説明>

### Security
- **<セキュリティ修正>**: <説明>

エラーハンドリング

タグが既に存在する場合

# エラー: tag 'v0.5.0' already exists
git tag -d v<version>  # ローカル削除
git push origin :refs/tags/v<version>  # リモート削除
# 再度タグ作成

Release Workflow失敗時

# ワークフロー再実行
gh run rerun <run-id>

# または手動でリリースアセットをアップロード
gh release upload v<version> <asset-file>

チェックリスト

リリース前

  • 全テスト通過
  • Lint通過
  • デフォルトブランチが最新
  • 未マージのPRなし
  • バージョン整合性チェック完了(Phase 0.5)

リリース中

  • ハードコードバージョン修正(検出時)
  • バージョンファイル更新
  • CHANGELOG.md更新
  • コミット & タグ作成
  • push完了
  • GitHub Release作成

リリース後

  • Release Workflow完了
  • アセットが正しくアップロード
  • リリースノートの内容確認

関連ドキュメント

ドキュメント内容
Keep a ChangelogCHANGELOG形式の標準
Semantic Versioningバージョニング規約
release.sh スクリプトリリース自動化スクリプト
@.claude/skills/workflow-phase-convention/SKILL.mdPhase番号体系(release-workflowセクション参照)
@.claude/skills/approval-gate/SKILL.md承認ゲートの共通フォーマット

変更履歴

日付バージョン変更内容
2026-01-173.1.0承認ゲート形式を番号形式に統一。workflow-phase-convention参照を追加。複数エコシステム警告を追加
2026-01-173.0.0Phase 0.5(バージョン整合性チェック)追加。エコシステム別ハードコード検出パターン定義。自動修正ルール追加
2026-01-102.0.0マルチエコシステム対応(Rust, Node.js, Python, Go, Generic)。release.sh スクリプト追加
2026-01-091.0.0初版作成(Rust専用)

Score

Total Score

50/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon