はじめに
こんにちは、フロントエンドエンジニアのraraya99です。
今回のブログは社内向けのリリースノート作りをGithub Actionsで自動化した話をまとめました🚀 🚀
弊社ではリリースごとに GitHub の「マイルストーン」(以下「Milestone」)をリリースノートとして運用してきました。
Milestone は PR(プルリクエスト)をまとめて管理でき、リリース予定の未マージ PR にも気づきやすく便利です。そのため、GitHub の正式なリリースノート機能(以下「Release」)は使わず、Milestone のみで完結させていました。
🛠 現状の問題点
下記のようにMilestone の説明欄をリリースノートとして使用するには「手作業」でPR毎に 機能作成
や バグフィックス
といったカテゴリ別に並べ替えて貼り付けていきます。
また、同時編集ができないためSlack で「編集します!」「編集しました!」と宣言し合うなど、非効率な運用が続いていました…。
これらを解決するために3つのワークフロー を勝手に開発しました。
⚙️ 運用の検討
Release+release-drafterというライブラリ で自動でドラフトリリースを組み立てられる方法も検討しました。
しかし、Release だけでは PR をまとめて管理できないためマージ漏れに気づきにくくなります。
Milestone を併用する場合、Milestone と Release の二重管理で運用が煩雑です。
そのため、今回は Milestone 運用のみを自動化 する方針に決定しました。
🚀 3 つの自動化ワークフロー
1️⃣ 「Milestone 自動作成」、2️⃣ 「PR ラベル&Assignee 自動付与」、3️⃣ 「Milestone 説明欄自動更新」
1️⃣ Milestone 自動作成
- スケジュール:毎週木曜 10:00(JST)
- 処理内容:
- タイトルを
MM/DDリリース
形式で自動生成(2週間後のMilestoneを作成) - 説明欄に「手動編集エリア」と「自動更新エリア」を分けるマーカーを配置
- タイトルを
- メリット:
- Milestone 作成忘れゼロ
- こだわりポイント:
- 手動追記が必要な場合を想定しマーカー上部を手動編集エリアとして確保
2️⃣ PR ラベル&Assignee 自動付与
- 背景:3️⃣ Milestone 説明欄自動更新で「カテゴリ別」「チーム別」に振り分けるには、PR にラベル付けが必須なため作成
- トリガー:PR 作成・更新時
- 処理内容:
- ブランチ名のプレフィックスから「feature」「bug」「hotfix」「silent」などを判定しラベル付与
feature/silent
やbug/silent
など複数プレフィックスの場合は両方のラベルを付与- PR 作成者の所属チーム(
team-a
/team-b
など)を判定しラベル付与(所属チーム関係ないPRの場合はラベルを外したらOK) - PR 作成者を Assignee に自動設定(ついでに)
- メリット:
- 自動分類の精度向上
- こだわりポイント:
- 運用の変更点を最小にするようにした。ブランチ名に“サイレントリリース” 用の
silent
付与の運用だけ追加になるが、リリースノートを手動で分類する手間に比べたら微々たるもの
- 運用の変更点を最小にするようにした。ブランチ名に“サイレントリリース” 用の
3️⃣ Milestone 説明欄自動更新
- スケジュール:毎平日 9:00(JST)+ 手動トリガー
- 処理内容:
- Open &
MM/DDリリース
タイトル、かつ“14日以内” の Milestone を対象 - 既存説明から手動編集エリアを保持
- PR 情報を取得し、
- カテゴリ(✨機能作成/🐛バグフィックス/🚨ホットフィックス/♻️リファクタリング/📌その他/🔇サイレント…)
- チームラベル
の順にソート&グルーピングした Markdown を完全生成
- Open &
- メリット:
- 手動 Markdown 組み立て不要(リンクを貼るのが一番めんどう)
- PR の増減を自動キャッチアップ
- 朝イチで“カテゴリ・チーム別”に整ったリリースノートが完成
- こだわりポイント:
- カテゴリ毎に並びかえするだけでなく、チーム毎にソートさせ見やすさにもこだわった
- 基本的には手動での記載はしない想定だが、どうしても手動で記載したいケースがあるときに記載できるよう手動編集エリアを設けた
おわりに
今後も非効率な業務をガンガン潰していきたいと思います。
今回は社内用のリリースノートを自動で作成するようにしましたが、社外向けのアップデート情報 も自動化を進めていきたいと考えています。
ひとまず、下書きはさくっとできそうです。
今回作成した社内用のリリースノートから情報を取捨選択し、トンマナ調整をすれば良さそう。
(AIチームよろしくおねがいします✨)