branch名を使ってrelease-drafterを楽に運用する。

PREVENT開発部、フロントエンドチームの高田(@tockii_ )です!

今回は開発を担当しているリポジトリrelease-drafter を導入するに至った経緯と設定について記事を書きました。

書いていること

  • release-drafter を導入した経緯
  • release-drafter とは?
  • branch名を利用して運用する設定

書いてないこと

はじめに

みなさんはこんな経験はありませんか?

  • リリースしたのはいいけどReleaseを作るのを忘れてしまう。
  • リリースタイミングでtagをつけ忘れてしまう
  • tagをつけていないのでReleaseのtargetが変になってしまう

僕はいつもこうでした。毎回プロダクトのリリースが終わると安心感からかそのままスッと退勤ボタンを押してしまい(いつも夜にリリースをするので)Releaseを書いていないことに気づくのは数日後、、、Releaseを書くのもエンジニアの大事な仕事なのですが、やらなくてもアプリは問題なく動くのでつい忘れがちになってしまいます。

また、Releaseを手書きで書くのは案外面倒なので、毎回ただPRの番号を書いただけの簡素なものになってしまい、イマイチ可読性が良くありません。

今回は上記のような問題を解決するためにrelease-drafterを導入しました。

release-drafterとは?

GitHubのRelease Draftとtagを自動で作成してくれる GitHub Actionsのワークフローです。

github.com

release-drafterのgoodな点

途中から導入をしても簡単な設定でいい感じにバージョンタグとバージョンを自動で作ってくれる。

Readmeに書いているexampleの設定を使うことで、自動で過去のtagなどから最新のバージョンを採番してくれます。

Privateなリポジトリにも対応している

現在Privateのリポジトリで使用していますが、問題なく運用できています。

手で作るのが面倒なちょっと凝ったReleaseを作ってくれる。

これはただの見た目の問題ですが、PR番号が箇条書きなだけのReleaseより格段に視認性の高いReleaseを作ってくれます。以下の画像は弊リポジトリで生成されたReleaseです。

ReleaseはPR番号で自動的にタイトルを表示してくれないんで、いつも手書きで書いていたんですがその苦労とも一瞬でおさらばできます。

branch名を使った設定を行う

release-drafterはexampleの設定を使うだけですぐにでも動かすことができますが、そのままだとラベルを手動でPRにつける作業が発生します。大変ではないですが、こういった細かい作業はどうしても忘れがちになってしまうため、この辺りも既存の運用をもとに楽にしたいところです(後述しますが、ラベルを貼り忘れても完全手運用よりは楽に修正できます)

そこで、現状プロジェクトで規定しているブランチ名の付け方が release-drafterの autolabelerと相性が良さそうだったので、設定をしてみました。

以下が autolabeler を追加したymlです

name-template: 'v$RESOLVED_VERSION 🌈'
tag-template: 'v$RESOLVED_VERSION'
categories:
  - title: '🚀 Features'
    labels:
      - 'feature'
  - title: '🔧Bug Fixes'
    labels:
      - 'fix'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
version-resolver:
  major:
    labels:
      - 'major'
  minor:
    labels:
      - 'minor'
  patch:
    labels:
      - 'patch'
  default: patch
template: |
  ## Changes
  $CHANGES
# 以下がautolabelerの設定🔥
autolabeler:
- label: feature
  branch:
    - '/^feature[/-].+/'
- label: fix
  branch:
    - '/^fix[/-].+/'

autolabelerとは?

Release Drafter - GitHub Marketplace

指定した箇所のテキストによってPRにラベルを自動で追加してくれる機能です。

今回はここの branch を使い、以下のように動作するよう設定しました。

  • branchの先頭に feature があれば feature ラベルを付与
  • branchの先頭に fix があれば fix ラベルを付与

弊PJでは、ブランチ名の先頭に featurefix をつけることをルール化しているので、既存の運用に手間を加えることなく簡単にrelease-drafterの管理を行えるようになりました。

ブランチ名を間違えたままマージしてしまった場合は?

もしfeatureやfixなど指定のbranch名を入れていない場合でもreleaseにはPRは全て反映されます。

release-drafterの作成するReleaseはdraft段階のため、手動で公開するタイミングでテキストを書き換えれば問題ありません。

終わりに

Releaseの作成は簡単なようで案外面倒臭く、つい忘れがちになることの一つだと思います。 release-drafterを使ってみなさんも楽をしていきましょう!