git-pr-releaseを利用したリリースPR自動化

# 導入
リリースプルリクエストを毎回手動で作成するのは面倒ですよね？GitHubを利用している多くの開発者がこの手間に悩んでいると思います。今回は、リリースPRを自動化してくれる便利なツール「git-pr-release」をご紹介します。他にもリリース自動化のツールはありますが、git-pr-releaseが使いやすそうなので使用しました。

# git-pr-releaseの概要
### 具体例と詳細説明

![Screenshot 2024-06-26 at 0.03.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946561/a6497dfb-4eb1-d3f1-98db-bec84343ac19.png)

git-pr-releaseは、開発ブランチにマージされたプルリクエストを自動的に収集し、その内容をもとに「リリースプルリクエスト」を作成してくれるツールです。これにより、QAやプレリリースチェックが一層簡単になります。具体的には、次のような機能があります。

1. リリースPRの自動生成
マスターブランチにマージされたプルリクエストを集計し、そのリストを元にリリースプルリクエストを自動生成します。

2. PRの内容集計
リリースPRのボディには、リリースされる機能リストやプルリクエストの内容が自動で含まれます。

### 利用手順
実際にgit-pr-release,github actionsを使ってリリースプルリクエストを自動生成する手順を紹介します。


```yaml
# .git-pr-release.yml
name: Create Release Pull Request

on:
  push:
    branches: [staging]
  workflow_dispatch:
jobs:
  release-pull-request:
    permissions:
      pull-requests: write
      contents: read
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.1
      - run: gem install --no-document git-pr-release
      - run: git-pr-release
        env:
          GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GIT_PR_RELEASE_BRANCH_PRODUCTION: main
          GIT_PR_RELEASE_BRANCH_STAGING: staging
          GIT_PR_RELEASE_LABELS: release
          GIT_PR_RELEASE_TEMPLATE: .github/release_pr_template.erb
          TZ: Asia/Tokyo

```
### コードの説明
```yaml
on:
  push:
    branches: [staging]
  workflow_dispatch:
```
push: stagingブランチへのプッシュがトリガーとなります。
workflow_dispatch: 手動でこのワークフローを実行することも可能です。

```yaml
jobs:
  release-pull-request:
    permissions:
      pull-requests: write
      contents: read
    runs-on: ubuntu-latest
```

pull-requests: write: `GITHUB_TOKEN`にプルリクエストの書き込み権限を付与します。
contents: read: `GITHUB_TOKEN`にコンテンツの読み取り権限を付与します。
runs-on: このジョブは最新のUbuntu環境で実行されます。

```yaml
steps:
  - uses: actions/checkout@v4
  - uses: ruby/setup-ruby@v1
    with:
      ruby-version: 3.1
  - run: gem install --no-document git-pr-release
  
```
`actions/checkout@v4`: リポジトリのコードをチェックアウトします。
`ruby/setup-ruby@v1`: Ruby環境をセットアップします。
`ruby-version`: 3.1: Rubyのバージョンを3.1に設定します。
`gem install --no-document git-pr-release`: git-pr-releaseというGemをドキュメントなしでインストールします。

```yaml
  - run: git-pr-release
    env:
      GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      GIT_PR_RELEASE_BRANCH_PRODUCTION: main
      GIT_PR_RELEASE_BRANCH_STAGING: staging
      GIT_PR_RELEASE_LABELS: release
      GIT_PR_RELEASE_TEMPLATE: .github/release_pr_template.erb
      TZ: Asia/Tokyo
```
`git-pr-release`: git-pr-releaseコマンドを実行してリリースプルリクエストを作成します。
env:
`GIT_PR_RELEASE_TOKEN`: GitHubトークンを環境変数として設定します。
`GIT_PR_RELEASE_BRANCH_PRODUCTION`: 本番ブランチをmainに設定します。
`GIT_PR_RELEASE_BRANCH_STAGING`: ステージングブランチをstagingに設定します。
`GIT_PR_RELEASE_LABELS`: プルリクエストに付与するラベルをreleaseに設定します。
`GIT_PR_RELEASE_TEMPLATE`: リリースプルリクエストのテンプレートを指定します。
TZ`: タイムゾーンを東京（Asia/Tokyo）に設定します。


```erb
# .github/release_pr_template.erb
Release <%= Time.now.strftime('%Y-%m-%d') %>
<% pull_requests.each do |pr| -%>
<%= pr.to_checklist_item %>
<% end -%>
```

### メリット・デメリット
##### メリット
時間の節約: 毎回手動でリリースプルリクエストを作成する手間が省けます。
自動化によるミスの削減: 自動で集計されるため、人的ミスが減ります。
簡単な設定: 初期設定が非常に簡単で、すぐに導入できます。毎回マージされるたびにPRも書き換えられるのでその点も心配ありません！
##### デメリット
特に大きなデメリットはありません。手動での作成に比べて圧倒的に効率が良いです。


![Screenshot 2024-06-26 at 0.06.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946561/bca6dfa1-787e-c775-cf68-0d8217be059b.png)


# 総括と結論
git-pr-releaseを使うことで、リリースプルリクエストの作成が驚くほど簡単になります。これにより、手間と時間を大幅に節約でき、リリースのプロセスがスムーズになります。まだ手動でリリースプルリクエストを作成している方は、ぜひこのツールを試してみてください。きっとその便利さに驚くことでしょう。

皆さんもぜひ、git-pr-releaseを導入してリリースPR自動化の恩恵を受けてみてください！

# 参考記事
[git-pr-release](https://github.com/x-motemen/git-pr-release)
[GitHub Actions リリースプルリクエストを自動生成する](https://qiita.com/ucan-lab/items/b831f42dbb936441aeae)