BambTech

コンピュータサイエンスの学習記録等です。

PRレビューのやりとりを改善した話

GitHub での PR レビューについて、仕事で改善したことのメモ

問題点

  1. PR を作成し、レビュー依頼を出すものの放置されることが多かった
  2. わざわざ Slack でレビューお願いしますやコメントしましたなどのやりとりをするのがめんどくさかった
  3. スクラムが別れて、全員がレビュアー指定される必要がなくなった

主に上記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 のユーザーネームが入ります
なんとなく最後に curlGitHub REST API を叩いているところがいけていないと思っているので、公式に対応してくれると嬉しいなぁ(もうあるかも)

Slack 連携

Slack App に GitHub の公式アプリケーションがあるから、これを使えるようにする。やることはすごく簡単。
GitHub どこかのページから右上のアイコンをクリックし Settings -> Scheduled reminders にいき、Slack と連携できるようにする。(要: 管理者権限)
f:id:wamiota:20200501110951p:plain

こんなのが出てくるから、後は個人で設定を変えるといい感じ。(画像は僕の設定)

チームの評判

これまでは、Slack のレビューチャンネルにわざわざ PR のリクエストを書いたり、コメントしましたと書いたりしていたのが一切なくなった。コメントがついたり、自分のコメントにスレッドがついたり、いろんな条件で DM がくるように設定できるから、レスポンスもかなり速くなって今では放置されているレビューはほとんどない。デプロイ戦略とかでもっと自動化したいことがあるから、GitHub Actions を使いこなしていこうねの機運が高まった。
やってよかった〜〜

学生もどきになります

5月から社会人として働きながら東京工業大学の科目履修生として授業を受けることになった。

いったん決まっている受ける科目は以下

1Q

2Q

  • 先端データ工学
  • 分散システム

これまで独学で CS の勉強をしてきたけど、ちゃんと体系だって誰かに教えてもらえるからちゃんと頑張る。

ちなみに東工大では Zoom を使ったオンライン授業になるっぽい。楽しみな反面ちゃんと仕事と両立できるか心配。