PHONE APPLI Engineer blog

エンジニアブログ

【開発効率向上】GitHub ActionsでPull Requestのレビュアー指定を自動化した話

こんにちは、PHONE APPLIのスマホチーム所属、チームリーダー担当の高橋 篤史(たかはし あつし)です。

今回は、私の主な担当領域である開発効率向上の一環として、GitHub ActionsでPull Requestのレビュアー(レビューをする人)自動指定の仕組みを導入してみましたので、背景や実際の導入方法、効果について書いていきたいと思います。

この記事のターゲット

  • 自動化に興味のある開発者や管理者
  • Pull Requestのレビュアー指定に時間がかかって困っている開発者

GitHub Actionsとは

https://docs.github.com/ja/actions

公式ドキュメントより引用

GitHub Actions は、ソフトウェア開発ライフサイクル内のタスクを自動化するのに役立ちます。 GitHub Actions はイベント駆動型で、指定されたイベントが発生した後に一連のコマンドを実行できます。 たとえば、誰かがリポジトリのPull Requestを作成するたびに、ソフトウェアテストスクリプトを実行するコマンドを自動的に実行できます。

つまりは、GitHub上で色々自動化して開発の効率を向上しましょうってことですね。

仕組みを導入しようと思った背景

スマホチームではPull Requestのコードレビュー時に、Android/iOSの各OSごとに全員をレビュアーに指定しています。特定の誰かがOKを出すのではなく、できるだけ全員がコードレビューに参加できるようにし、何人以上OKを出したらマージ可能(コードレビュー完了)という運用です。

全員をレビュアーに指定

メンバーが少ないうちは手動でレビュアー指定するのに大きな手間がかからなかったのですが、メンバーが2020年4月から急激に増えた(約2倍)こともあり、段々と手動で指定するには時間がかかる、または指定漏れが発生するなどの問題が発生するようになっていきました。実際、私自身でPull Requestを出す場合に平均3分ほどレビュアーを指定するのに時間がかかっていましたし、指定漏れをしたことも何回かありました。

そこで、「何かしら自動でレビュアー指定する方法あるだろう」と思い立ち調査した結果、レビュアー自動指定の仕組みが比較的簡単にできそうでしたので、導入することにしました。

導入方法

最速導入を目指したかったため、OSSを利用しました。

github.com

.github/workflowsディレクトリに以下のようなファイルを作成します。

例) .github/workflows/auto-review-assign.yml

name: Auto Assign Reveiwers Action

on:
  pull_request:
    # Pull Requestの状態によって動作する/しないを指定する。以下はPull Requestを出した際と閉じた際に動作する
    types: [opened, closed]

jobs:
  assign:
    runs-on: ubuntu-latest
    steps:
      - uses: hkusu/review-assign-action@v1.0.0
        with:
          # AssigneeはPull Requestを作成した人を自動的に指定
          assignees: ${{ github.actor }}
          
          # Rewiewersに含める人のGitHub Usernameを,(カンマ)区切りで記載する
          reviewers: A, B, C
          
          # マージ時にレビューをSubmitした人にメンションして自動でコメントされる文言を指定可能
          merged-comment: 'This PR was merged. Thanks for your review :bowing_man: <reviewers>'

Pull Request Open時 f:id:pa-atsushi-takahashi:20210317092359p:plain

github-actionsのbotがレビュアーを自動指定してくれます。

Pull Requestがマージされた時 f:id:pa-atsushi-takahashi:20210317092413p:plain github-actionsのbotがコードレビューをしてくれた人にメンションして自動でコメントしてくれます。できれば直接お礼言えるといいですが、毎回となると人間忘れることもあるので、ないよりはあった方がいいという考えで自動コメントの仕組みも入れています。

効果

手動で指定するには時間がかかる、または指定漏れが発生する、という問題がなくなりました!

時間で換算すると

3(分) × 150(件) × 2(OS) = 900(分) = 15(時間)のチーム全体の作業時間を削減でき、別の作業に当てることができたと思います。

前提:

  • 1回のPull Requestのレビュアー指定に平均3分かかる(仮定)
  • 導入時(2020年12月)から2021年3月現在にかけて、Android/iOSともに150件ほどのPull Requestが存在(事実)

注意点

  • メンバーが新しく入社した場合は、ファイルに新メンバーのGitHub Usernameを追加する必要があります。
  • メンバーが退社した場合は、ファイルから退社したメンバーのGitHub Usernameを削除する必要があります。GitHub Usernameが存在しない場合にエラーになってしまうため、特に注意が必要です。

今後の展望

概ねこの仕組み自体には満足しているのですが、全員レビュアーに指定していても特定の人がレビューしがちなところに課題感があります。あまりレビューに参加できてない人をランダムで優先的にアサインする仕組みがあってもいいかな、という思いもあります。様子を見つつ、今後やるかもしれません。

また、今はOSSを利用しているのですが、調べた限りでは自分でも実装できそうな感じだったため、自動化OSSを自作してみるということにも、いずれチャレンジしてみたいです!