NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

解析機能を使ってプルリクエストの振り返りをしよう

本記事は  【プルリクウィーク】  6日目の記事です。
💻  5日目  ▶▶ 本記事 📚

こんにちは、システムエンジニアの檀上です。 普段は顧客の社内システムの要件調整・基本設計などを担当しています。

さて、皆様は普段の業務の中で、プルリクエストを提出したり、プルリクエストをレビューしたりといったタスクを日々こなされていると思います。 ところで、あなたの所属するプロジェクトでのプルリクエストの扱いについて、振り返ってみたことはありますか? 例えば、レビューはどのタイミングで実施しますか?誰が一番多くプルリクエストを提出していますか?その状態は、健全でしょうか?

この記事では、GitベースのWebプラットフォームとして利用実績の多いGitHubとGitLabの解析ページを利用して、プルリクエストを振り返るアイデアについて紹介します。

注意事項

今回の記事では、サンプルプロジェクトとしてGitHubのOSSプロジェクト「spring-projects/spring-boot」と、GitLabのOSSプロジェクト「inkscape/inkscape」を使用させていただきます。

皆さんがご自身のプロジェクトの解析ページを見て応用しやすくなるように、「もし自分がこのチームの一員だったら」と仮定して分析をしてみました。 私は上記プロジェクトのContributorではありません。分析は完全に予想で実施していますので、あくまで例の一つとしてご覧いただければ幸いです。

なお、皆さんが使用されているプラットフォームの種類や設定、バージョンにより使用できる解析機能が異なりますし、この記事で紹介できない解析の切り口もたくさん存在します。 この記事を足掛かりにして、ぜひ色々解析してみてください。

コミットの時刻・曜日に注目する🕵️‍♂️

GitHubのInsightsページでは、Commit Activityを参照できます。 2024/5/27時点のspring-projects/spring-bootプロジェクトの情報を見ると、このようになっていました。

https://github.com/spring-projects/spring-boot/graphs/commit-activity

画面上部には週ごとのコミット数の集計が表示されています。 12/25を含む週のコミットは極端に少ないですね。2024年よりも、2023年の方が活発だったかもしれません。

画面下部には曜日ごとの集計が表示されています。 月曜日と水曜日のコミットが多いようですね。 土曜日・日曜日はお休みなのでコミットがないとして、金曜日も非常に少ないですね。

もし私がこのプロジェクトの一員なら、このような振り返りができそうです。

  • 「月曜日・水曜日に開発(つまりコミット)を実施して、火曜日・木曜日にプルリクエストをレビューする」というサイクルをチームで定めていると仮定すると、そのサイクルはかなり良く回っていると言えそうです。
  • 継続して観測しましょう。このサイクルが崩れていることを観測したら、何か不測の事態が起きているかもしれません。

GitLabではどうでしょうか。 2024/5/28時点の、inkscape/inkscapeプロジェクトの「リポジトリの分析」を見てみます。 https://gitlab.com/inkscape/inkscape/-/graphs/master/charts

GitHubとは集計方法が違います。 日付ごとのコミット数、曜日ごとのコミット数に加え、時間帯ごとのコミット数が表示されています。

このプロジェクトのマージリクエストについては、下記のような振り返りができそうです。 (GitHubでプルリクエストと呼んでいるものを、GitLabではマージリクエストと呼びますので、それに倣います)

  • 曜日や時間帯による差異が少ないことから、参加している開発者の在住の国や職業にばらつきがあるのかもしれません。 もしそうであれば、対面によるマージリクエストレビューは設定しづらいため、非同期なレビュー方法を考える必要がありそうです。

開発者ごとの傾向に注目する🕵️‍♂️

spring-projects/spring-bootプロジェクトのContributorsを見てみます。 https://github.com/spring-projects/spring-boot/graphs/contributors

画面の一番上には、このプロジェクトのこれまでのコミット数の累計が表示されており、 その下にコミット数の多い順に開発者が記載されています。

この結果からはプルリクエストに関する振り返りを見出せなかったので、機能の紹介のみで終わらせていただきます。。

では、inkscape/inkscapeプロジェクトの「コントリビューター分析」を見てみます。 https://gitlab.com/inkscape/inkscape/-/graphs/master?ref_type=heads

一番上にコミット数の累計が表示されているのは同じですが、開発者ごとの平均値やMAX値も表示されていますね。

では、振り返ってみます。

  • 一部の開発者のコミット数が非常に多いことが分かります。(スクリーンショット内には収まっていませんが、ページ下部にはコミット数が非常に少ない開発者が存在しています。)理由として、そもそも開発量が偏っていることや、開発者によってコミットする際の変更量が異なる可能性が考えられます。
  • もしかしたら、中心的な開発者ではないメンバーは、一度のコミットにたくさんの修正を入れてしまうことでコミット数が少なくなっているかもしれません。

プルリクエスト作成からマージまでの時間に注目する🕵️‍♂️

こちらはGitLabで確認できました。 inkscape/inkscapeプロジェクトの「バリューストリーム分析」を表示し、「Review」タブを選択します。 https://gitlab.com/inkscape/inkscape/-/value_stream_analytics?created_after=2024-04-29&created_before=2024-05-28&value_stream_id=3697&stage_id=15412&sort=duration&direction=desc&page=1

過去30日間でマージされたマージリクエストについて、マージリクエスト作成からマージまでの期間とその平均が参照できます。

振り返ってみます。

  • もし上記の値が長いマージリクエストが多数存在しているなら、レビューのサイクルが上手く行っていないかもしれないので、見直す機会と捉えられます。
  • 解決までにかなりの時間を要しているマージリクエストも多数存在していますが、inkscapeプロジェクトはOSSです。この点だけを見て「健全でない」と結論づけることはできないと考えられます。

おわりに

いかがでしたでしょうか。 プルリクウィークでは、プルリクエストの作成やレビュー時の心構えに言及されている記事が多いと予想して、少し変わり種の「解析」という視点で書いてみました。 もしあなたがプロジェクトのいち開発者であるなら、あこがれの開発者のプルリクエストを解析してみると、何か成長のヒントが得られるかもしれません。 もしあなたがプロジェクトの管理者であるなら、継続して観測することで、プロジェクトの健全性の指標として使えるかもしれません。

蛇足ですが、私は大学生のころにOSSプロジェクトのプルリクエストに紐づくコメントの良し悪しを定量的に解析するという研究をしていました。 現代ではAIに取って代わられそうなアイデアではありますが、「良し悪し」に「気づく」という点では人間の方がアドバンテージがあると思っています。 任せられるところは任せつつ、健全なプロジェクト運営を目指していきたいと思います!

執筆者:檀上未来
システムエンジニア。人の話を聞くことが好きです。