PRレビューのやりとりを改善した話
GitHub での PR レビューについて、仕事で改善したことのメモ
問題点
- PR を作成し、レビュー依頼を出すものの放置されることが多かった
- わざわざ Slack でレビューお願いしますやコメントしましたなどのやりとりをするのがめんどくさかった
- スクラムが別れて、全員がレビュアー指定される必要がなくなった
主に上記3つについて改善した。
やったこと
GitHub Actions を使用してのレビュアー自動指定と、Slack と GitHub の連携を行った。
GitHub Actions
GitHub が提供している CI/CD を用いて開発のワークフローを自動化するもの。
今回やりたいことは簡単なことだったので、がっつりドキュメントを読んだわけではないけど、イメージとしては GitHub の UI 操作でできるものは基本的にワークフローを起動するトリガーにできそう。GitHub REST API で取得できる情報は条件分岐等 yaml の中で使用できそう。といったイメージ。
今回の改善でやったことは、PR 作成者が PR タイトルから WIP を外した時に所属するスクラムのメンバーがレビュアーに自動設定されること。
name: Set Reviewers on: pull_request: types: [assigned, opened, synchronize, reopened, edited] branches: - develop jobs: continuous_integration: name: Reviewers runs-on: ubuntu-latest if: "!contains(github.event.pull_request.title, 'WIP')" env: SCRUM_A: "user1, user2, user3, user4" SCRUM_B: "user5, user6, user7, user8" steps: - name: Set Reviewers run: | reviewer_count=$(cat ${{ github.event_path }} | jq '.pull_request.requested_reviewers | length') if [[ 0 == $reviewer_count ]]; then if [[ "$SCRUM_A" == *"${{ github.actor }}"* ]]; then reviewers=$(echo "\"${SCRUM_A// /}\"" | jq 'split(",") | .-["${{ github.actor }}"]') elif [[ "$SCRUM_B" == *"${{ github.actor }}"* ]]; then reviewers=$(echo "\"${SCRUM_B// /}\"" | jq 'split(",") | .-["${{ github.actor }}"]') fi curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -d "{ \"reviewers\": $reviewers }" \ https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/requested_reviewers fi
※ SCRUM_A
の環境変数には、GitHub のユーザーネームが入ります
なんとなく最後に curl で GitHub REST API を叩いているところがいけていないと思っているので、公式に対応してくれると嬉しいなぁ(もうあるかも)
Slack 連携
Slack App に GitHub の公式アプリケーションがあるから、これを使えるようにする。やることはすごく簡単。
GitHub どこかのページから右上のアイコンをクリックし Settings -> Scheduled reminders にいき、Slack と連携できるようにする。(要: 管理者権限)
こんなのが出てくるから、後は個人で設定を変えるといい感じ。(画像は僕の設定)
チームの評判
これまでは、Slack のレビューチャンネルにわざわざ PR のリクエストを書いたり、コメントしましたと書いたりしていたのが一切なくなった。コメントがついたり、自分のコメントにスレッドがついたり、いろんな条件で DM がくるように設定できるから、レスポンスもかなり速くなって今では放置されているレビューはほとんどない。デプロイ戦略とかでもっと自動化したいことがあるから、GitHub Actions を使いこなしていこうねの機運が高まった。
やってよかった〜〜