こんにちは、よしこです。
最近 difitというOSSを公開して 結構な頻度でアップデートをしているのですが、npm packageの新バージョンのリリースってちゃんとやろうとするとなかなか手間だなぁと思いました。
CHANGELOG更新して、バージョン上げて、タグ打って、GitHub Release作って…などなど。
それがClaude Codeのカスタムスラッシュコマンドでかなり便利に自動化できたので、簡単に紹介します!
そもそカスタムスラッシュコマンドって何?についてはこちらの記事にまとまっています:
/release コマンド
.claude/commands/release.md
を作っています。
内容は英語で記載しているのですが、そちらはdifitのリポジトリ上の release.md で見られるので、こちらには日本語訳した内容を記載します。
.claude/commands/release.md
CHANGELOG.md を、最新のタグから現在のコミットまでのすべての変更で更新してください。
まず、以下のスクリプトを実行してコミット情報を取得します:
./scripts/get-changes-since-tag.sh
スクリプトの出力をもとに、変更を次のカテゴリに分類してください:
- Added:新機能
- Changed:既存機能の変更
- Deprecated:近いうちに削除予定の機能
- Removed:すでに削除された機能
- Fixed:バグ修正
- Security:脆弱性関連
- Thanks:貢献者のGitHubユーザー名とPR番号の記載
コミットを処理する際の注意点:
- Gitのコミット作者名ではなく、スクリプト出力にあるGitHubユーザー名を使用する
- Thanks セクションには貢献者のみを記載し、メンテナーである yoshiko-pg は含めない
- 可能であればPR番号も記載する
- コミットの件名と本文をもとに適切なカテゴリに分類する
その後、追加した内容について日本語でユーザーに知らせ、say コマンドを使って確認を取ってください。
もし「OK」の確認が取れたら:
- npm version --no-git-tag-version patch を実行
- CHANGELOG.md にバージョンセクションを作成し、Unreleased セクションの内容をそこに移動
- CHANGELOG.md の下部にあるバージョンリンクを更新(新しいバージョンリンクを追加し、Unreleased のリンクも更新)
- CHANGELOG.md をコミット
- 現在のバージョンでGitタグを作成
- git push origin main --tags を実行
- CHANGELOG.md のそのバージョンセクションの内容を使ってGitHubでリリースを作成(origin に対して)
その後、ユーザーに npm publish を実行するよう say コマンドで促してください(自分で npm publish を実行してはいけません)。
ざっくりいうと、「最新のtagから現在までの変更をコミットログから取得してCHANGELOGにまとめて」「バージョンアップとかタグ付けとかして」「GitHub Release作って」くれるくんです。
このmdファイルを置くと、Claude Code上で /release
を呼び出せます。(要CC再起動)
実行すると、まずコミットログを確認して内容を CHANGELOG.md
に追記してからこちらに確認要請がきます。そこで私が内容を確認して、必要に応じて些末な内容を削ったりカテゴリ分類を調整したりしてから「続けて」とうながすと、続きの工程を進めてnpm publish直前までやってくれるので、最後に自分でnpm publishします。
(npm publish実行まで含めることもできるけど、なんとなくそこだけはこっちで握っておこうかなという感じ。打つだけなのですが。人によってはgit pushもそうしたいかもしれないですね)
嬉しいところ
CHANGELOGの作成
difitのCHANGELOGには Keep a Changelog形式 を採用しているので、カテゴリセクションがあります。コミットログにある各変更をサマライズするだけでなく、そのカテゴリ分類も自動でやってくれるのが便利。
また、結構な頻度でPull Requestをいただいており、CHANGELOGにもThanksセクションを作ってしっかりContributorを載せていきたいのですが、そのユーザーメンション+PRサマリ+PR番号も載せてくれます!手動でやるより漏れや間違いがないので安心。
このユーザーメンションの取得にはひと工夫必要で、それもあって最初の処理に scriptも併用 しています。このスクリプトもCCが書いてくれました。
おかげでCHANGELOGがなかなか綺麗に作れていると思います!
融通がきく
たとえばpublishまで少し時間があきそうなのでとりあえず直近の変更内容をUnreleasedにまとめてpushだけしておきたい、というときは、 /release
実行して内容確認の依頼がきたところで止めて編集してpushしてしまえば後続の作業はおこなわれません。
また、デフォルトではversionをpatch updateにしていますが、「今回はminorで release.md の内容やって」のように指示すれば全てminorでやってくれたりします。
神経を使うリリース作業が /release
で済むようになったので、より手軽にアップデートをリリースできるようになりました!個人的にとても便利なので紹介しました。需要ありそうな方はぜひ試してみてください〜
Views: 0