🤖

CHANGELOG.md を自動で生成する

に公開

みなさん、こんにちは!寒くなるとついついいっぱい食べがち、体重増加に要注意!!! 🤤

フロントエンドエンジニアの @nyaomaru です!

CHANGELOG をリリースノートから自動で生成するツールを作ったので紹介させていただきます! 🚀

🧪 きっかけ

みなさんも普段、CHANGELOG.mdを使って、リリースの内容を管理していると思いますが、これをバージョン上げるたびに手動で作るのがめんどくさい・・・

ある程度は自動化できるけど、生成されるCHANGELOG.mdが分類されてなかったり、整形されておらず使いづらい・・・

という個人の経験より生まれたのがchangelog-botや!

changelog-bot logo

https://github.com/nyaomaru/changelog-bot

🎁 なんで changelog-bot?

  • 🖋 めんどくさいCHANGELOG.mdの生成を自動化
    • AI を使って整形するので精度が高い
    • コミットメッセージや PR タイトルを解析して、“fix”や“feat”を自動で分類してくれる
  • Release Note から自動整形
    • 煩雑な Conventional Commit 不要
  • AI を使わなくても fallback 可能
    • API KEY を指定しない場合でもある程度の精度で生成できる

🔎 どうやって使うの?

その場で試す (npx / pnpx)

CLI からサクッと試すなら、npx / pnpm dlx が一番手軽!

まずは環境変数で自分の対象 repository を指定してな!

export REPO_FULL_NAME=your_name/your_repository_name

npm

npx @nyaomaru/changelog-bot@latest --help

pnpm

pnpm dlx @nyaomaru/changelog-bot \
  --release-tag v0.0.1 \
  --provider openai \
  --dry-run

--dry-run を外せば CHANGELOG.md が PR で生成されるで!

AI を利かせたい場合は、実行前に環境変数で API キーをセットしておく。

# OpenAI 派はこっち
export OPENAI_API_KEY=sk-xxxx   # OpenAI を使う場合
export OPENAI_MODEL=gpt-4o-mini # 任意モデルを指定したいとき(省略可)

# Anthropic 派はこっち
export ANTHROPIC_API_KEY=sk-ant-xxxx
export ANTHROPIC_MODEL=claude-3-5-sonnet-20240620

mise でローカル環境を整える

ソースから触りたい場合は mise で Node / pnpm を揃えてからビルド!

mise install     # Node 22 / pnpm 10.12 を一括セットアップ
mise dev_install # 依存関係をインストール
mise build       # TypeScript をコンパイル

必要な環境変数を export しておこか~

export REPO_FULL_NAME=your_name/your_repository_name # 実行対象のリポジトリ名
export GITHUB_TOKEN=ghp_xxx                          # Github Token
export OPENAI_API_KEY=sk-xxx                         # AI を利用する場合は、API key を宣言

あとは CLI を叩くだけ~。

mise start \
 --release-tag v0.0.1 \
 --provider openai \
 --dry-run

💡 Tip: --dry-run を外すと、実際に CHANGELOG.md が PR に反映されるで!

  • API キーを渡さない場合はローカルのコミットログから fallback で分類してくれる
  • OPENAI_MODEL や ANTHROPIC_MODEL を環境変数で差し替えると、任意のモデルで整形可能

GitHub Actions で自動化

Github Actions で回したい場合はもっと簡単。.github/workflows に下記みたいな CI を置けば、リリースタグが打たれたタイミングで勝手に changelog が生えてくるで!

name: Auto Changelog

on:
  workflow_dispatch:
  push:
    tags:
      - 'v*'

jobs:
  changelog:
    uses: nyaomaru/changelog-bot/.github/workflows/changelog.yaml@v0
    with:
      changelog_path: CHANGELOG.md
      provider: openai
      release_tag: ${{ github.ref_name }}
      dry_run: 'false'
    secrets:
      REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
      ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

AI キーが無いリポジトリでは dry_run: 'true' にして下書きを PR に貼る、なんて運用もアリやで。

🌱 配布とエコシステム

  • npm / pnpm でインストール可能な CLI パッケージ (@nyaomaru/changelog-bot)
  • 同梱の action.yml で GitHub Marketplace の Action としても使える
  • fallback ロジックは Conventional Commit の前提なしで動くから、既存プロジェクトにも導入しやすい
  • Issue / PR はいつでもウェルカム!テンプレが整備されてるので、気軽にフィードバック置いてってな 😹

今後やりたいことリスト

  • changelog の分類モデルをローカル LLM にも対応
  • 英語以外の出力に対応
  • 出力内容の精度改善(scoring による前処理とプロンプト)

🎯 まとめ

changelog-bot は「リリースを hook に CHANGELOG.md を自動生成する」ための CLI であり、Github Actions でもある。

https://github.com/nyaomaru/changelog-bot

気に入ったら 🌟 つけてってなぁ~!😻

おまけ

is-kit logo

is-kitっていう、isXXXを簡単に構築できるユーティリティ OSS も公開してるから、見てってなぁ~!

https://github.com/nyaomaru/is-kit

記事もあるで~!

https://zenn.dev/nyaomaru/articles/introduce-is-kit

https://zenn.dev/nyaomaru/articles/design-type-guard

https://zenn.dev/nyaomaru/articles/escape-from-if-nest

Discussion