リリースノート作成の「地獄」から脱却せよ:Bitbucket APIで実現する自動化の極意
こんにちは。現場で泥臭く、しかし誰よりもスマートにコードをデプロイしたいと願う皆さん。
リリース直前、あなたは「今回のリリースで何が変わったんだっけ?」と、Gitのログを眺めて頭を抱えていませんか?手作業でプルリクエスト(PR)を拾い集め、ExcelやMarkdownにコピペする……。そんな時間は、エンジニアにとって最も不要な「負債」です。
今日は、Bitbucketの強力なAPIを叩き、「前回リリースから今回のリリースまでの差分」を自動抽出して、美しいMarkdown形式のリリースノートを生成するツールの作り方を伝授します。
これをマスターすれば、あなたはリリース作業から解放され、より本質的なコード開発に集中できるようになります。
—
なぜ「自動化」が必要なのか?
大規模なチームになればなるほど、リリースノートの作成は「伝言ゲーム」の失敗に直結します。
- ヒューマンエラー: 重要な機能追加が漏れる。
- 鮮度の欠如: リリースからノート作成までのタイムラグ。
- 無駄な疲弊: 単純作業によるモチベーションの低下。
今回作るツールは、「Bitbucketのブランチ比較API」をトリガーにします。タグやブランチを比較し、その間にあるPRのタイトルを自動で引っこ抜く。これだけで、あなたのリリースワークフローは劇的に変わります。
—
準備するもの:最初のセットアップ
今回は、モダンな開発環境で扱いやすい Python を使用します。ライブラリは `requests` 一つあれば十分です。
1. Bitbucket App Passwordの発行
APIを叩くための権限が必要です。
1. Bitbucketの「個人設定」→「アプリパスワード」へ移動。
2. 「リポジトリの読み取り権限(Read)」を付与して生成。
3. 重要: このパスワードは二度と表示されないので、環境変数に保存してください。
2. 環境の構築
プロジェクトディレクトリを作成
mkdir release-note-gen && cd release-note-gen
仮想環境を作成して有効化
python -m venv venv
source venv/bin/activate
必要なライブラリをインストール
pip install requests
—
実装:魂を込めた比較ロジック
`generate_notes.py` を作成し、以下のコードを記述してください。このスクリプトは、指定した2つのリビジョン(タグやブランチ)を比較し、その間のPRタイトルを抽出します。
import requests
import os
設定情報(環境変数から読み込むのがセキュリティの鉄則)
USER = os.getenv(“BITBUCKET_USER”)
APP_PASS = os.getenv(“BITBUCKET_APP_PASS”)
WORKSPACE = “your-workspace”
REPO_SLUG = “your-repo”
def get_pull_requests(from_rev, to_rev):
“””ブランチ比較APIからPR一覧を取得する関数”””
url = f”https://api.bitbucket.org/2.0/repositories/{WORKSPACE}/{REPO_SLUG}/pullrequests”
# クエリパラメータでステータスをmergedに絞るのがコツ
params = {“q”: f’state = “MERGED”‘}
response = requests.get(url, auth=(USER, APP_PASS), params=params)
return response.json().get(‘values’, [])
def generate_markdown(prs):
“””取得したPRからMarkdownを生成”””
md = “# Release Notes\n\n
変更点一覧\n”
for pr in prs:
# PRのタイトルとリンクを抽出
title = pr[‘title’]
link = pr[‘links’][‘html’][‘href’]
md += f”- [{title}]({link})\n”
return md
if __name__ == “__main__”:
# ここに比較対象のタグやブランチを指定
prs = get_pull_requests(“v1.0.0”, “v1.1.0”)
print(generate_markdown(prs))
—
動作確認:HelloWorld的アプローチ
まずは、自分のリポジトリの最新リリースタグを確認してください。
1. `v1.0.0` から `main` までの差分が出るように、スクリプト内の引数を調整します。
2. 実行: `python generate_notes.py`
3. ターミナルに、PRのタイトルがMarkdown形式でズラリと表示されれば成功です!
なぜこれが「最強」なのか?
- 確実性: 人間の記憶に頼らず、Gitの歴史から直接抽出するため、漏れがありません。
- 拡張性: このMarkdownをそのままGitHub ActionsやBitbucket Pipelinesで「リリース画面」に自動投稿するように改修すれば、完全自動化が完了します。
—
さらなる高みへ:エンジニアとしてのアドバイス
このツールを導入した後は、ぜひ次のステップへ進んでください。
1. PRテンプレートの徹底: PRのタイトルが「Fix bug」だけだとリリースノートも質が下がります。「[Feature] ログイン画面の改修」のように、チーム内でタイトル規約(Conventional Commitsなど)を揃えるのが、自動化成功の鍵です。
2. パイプラインへの統合: Bitbucket Pipelinesの `step` に組み込み、タグを切った瞬間にリリースノートが自動生成されてSlackに飛んでくる……そんな未来を自らの手で実装してください。
自動化は「楽をするため」のものですが、それ以上に「人間がより創造的なタスクに集中するための権利」を守る行為です。
皆さんの開発フローが、今日から少しでも軽やかになることを願っています。もし実装で詰まったら、いつでもコードを読み返してください。コンピュータは、あなたの書いたコードにだけ正直に応えてくれますから。
それでは、良い自動化ライフを!