GitHub Actionsでリリースノートを作成しkintoneに登録してみた


こんにちは！かねごん（[@hrbk25](https://x.com/hrbk25)）です。  

今回は、GitHubでPull Request（以下 PR）を、mainブランチにマージしたとき、GitHub Actionsによりリリースノートを作成し、その内容をkintoneアプリへ自動登録する仕組みを検証したので、備忘録としてまとめました！

---

## どんな人向けの記事か

- GitHub Actionsをまだ触ったことがないけど興味がある方！
- GitHub Actionsによりkintoneへレコードを登録したい方！

---

## 事前準備

### kintoneアプリの作成

まず、以下の内容でkintoneのアプリを作成します。

| フィールド名      | フィールドコード   | 種別（推奨）       |
|------------------|-------------------|--------------------|
| リリースタグ      | release_tag       | 文字列（1行）      |
| リリースノート    | release_note      | 文字列（複数行）   |
| リリースURL       | release_url       | リンク             |


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582762/a23fa28e-bfb7-44a3-8307-f5d2cf0e9110.png)



### リポジトリのシークレットの作成

次に、Github Actionsで使用するシークレットに以下の情報を設定します。
設定の手順は公式ドキュメントを参照しました。

https://docs.github.com/ja/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions

| 変数名              | 設定例／説明                        |
|---------------------|-------------------------------------|
| KINTONE_BASE_URL    | https:// subdomain .cybozu.com     |
| KINTONE_API_TOKEN   | ********************************    |
| KINTONE_APP_ID      | 123　                 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582762/32e4b1b3-078d-4ef9-809b-2a0b6c626190.png)

### ワークフローの作成

Release Drafterを使ってリリースノートを自動作成するためのファイルと、kintoneのレコードを登録するためのファイルをそれぞれ作成します。 
Release Drafterの基本設定は以下の記事を参考にしました。  

https://zenn.dev/kounoike/articles/20220211-easy-generate-release-notes

>release-drafter のインストール（って言うのかな？）は簡単で、ドキュメントの Usage にあるワークフロー設定の YAML ファイルをリポジトリの .github/workflows ディレクトリに置き、設定ファイルをドキュメントの Example からコピーしてきます。先の例のリポジトリからコピーしても構いません。





:::note
基本的にChat GPTの力を借りて、一旦動かすために、必要なファイルをさくっと作ってみました！
:::



#### .github/release-drafter.ymlの作成

上記の記事の「Example」を活用しました。

#### .github/workflows/release-drafter.ymlの作成

`main` ブランチへPRがマージされたタイミングでリリースノートのドラフトを作成します。

```yaml
name: Release Drafter

on:
  pull_request:
    types: [closed]    
    branches:
      - main            # 対象ブランチ

permissions:
  contents: write       # リリース下書き作成に必須
  pull-requests: write  # Autolabeler を使う場合に必須

jobs:
  update_release_draft:
    runs-on: ubuntu-latest
    steps:
      - uses: release-drafter/release-drafter@v6
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

```

#### .github/workflows/publish-release-to-kintone.ymlの作成

リリースを「Publish release」したときに、kintoneにレコードを追加します。

```yaml
name: Publish release note to kintone

on:
  release:
    types: [published]   # 「Publish release」を押した瞬間だけ発火

jobs:
  post-to-kintone:
    runs-on: ubuntu-latest
    steps:
      - name: Build kintone payload
        id: build
        env:
          BODY: ${{ github.event.release.body }}
        run: |
          # 改行を安全に扱うため base64 → jq で JSON 化
          echo "${BODY}" | base64 -w0 > body.b64
          echo "encoded=$(cat body.b64)" >> "$GITHUB_OUTPUT"

      - name: Send to kintone
        env:
          KINTONE_BASE_URL: ${{ secrets.KINTONE_BASE_URL }}   # 例: https://example.cybozu.com
          KINTONE_API_TOKEN: ${{ secrets.KINTONE_API_TOKEN }} # レコード追加権限付き
          KINTONE_APP_ID: ${{ secrets.KINTONE_APP_ID }}       # 数値 (例: 123)
          TAG_NAME: ${{ github.event.release.tag_name }}
          RELEASE_URL: ${{ github.event.release.html_url }}
          BODY_B64: ${{ steps.build.outputs.encoded }}
        run: |
          jq -nr \
            --arg app "$KINTONE_APP_ID" \
            --arg tag "$TAG_NAME" \
            --arg url "$RELEASE_URL" \
            --arg body "$(echo "$BODY_B64" | base64 -d)" \
            '{
              app: ($app|tonumber),
              record: {
                release_tag:  { value: $tag },
                release_note: { value: $body },
                release_url:  { value: $url }
              }
            }' > payload.json

          curl -sS -X POST \
            -H "X-Cybozu-API-Token: $KINTONE_API_TOKEN" \
            -H "Content-Type: application/json" \
            --data @payload.json \
            "$KINTONE_BASE_URL/k/v1/record.json"
```


## 行った作業

1. `main` ブランチへPRをマージする。
2. 「Publish release」ボタンを押下して、リリースノートを作成する。
3. リリースノートの内容が対象のkintoneアプリのレコードに登録されているか確認する。


---

### 詳細

`main` ブランチへPRをマージして、リリースノートのドラフトが作成されていることを確認します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582762/dd3974b4-07b7-4687-9eb1-ebb4a33a0d63.png)


リリースノートの内容に問題が無ければ、「Publish release」ボタンを押下して、リリースノートを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582762/925d8bfd-29c0-4fcf-ab7e-043d74e6d76a.png)

Github Actionsにより、リリースノートの内容が、kintoneアプリのレコードに登録されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582762/37d62919-56cb-4573-a11f-c8f6edfacd37.png)


無事にレコードが1件作成されました！！！

---


## まとめ
今回は、「Github Actionsにより、リリースノートを自動でkintoneに登録する」ところまで動かしてみました。  
まだまだ試したいことがいっぱいあるので、これからも色々触っていきます！