💌

コードレビューにラベルを付けるだけでチームの心理的安全性を高めた話

2023/03/06に公開
3

この記事ではハコベルの開発チームが心理的安全性の向上を目的に採用した、プルリクエスト (マージリクエスト) コメントにラベルを付ける手法についてご紹介します。

背景

プルリクエストをレビューする時、レビュアーとして上から目線になってしまい相手を傷つけないか緊張したり、ちょっとした確認のつもりで書いたコメントが修正必須と捉えられてしまったりした経験はないでしょうか。

本来、ピアレビューは対等な関係であるはずなのに、レビューする側の方が上になってしまいお互いに恐縮してしまいがちです。「勘だと怪しいけど間違っていたら怖いから言えないな」や、「将来的に辛くなりそうな実装だけどわざわざ指摘するほどでもないな」など荒波を立てずにApproveしてしまい、積極的なレビューが交わされなくなります。

このちょっとしたチリが積もっていくことで、リリース後や数年後にプロダクトの品質が大きく低下する原因となります。

ラベルを付けるルールを決める

そこで、私たちのスクラムチームではWorking Agreement (チームのルール) として、レビュー時のコメントには基本的にラベルを付けることを定めました。次のようなラベルを使用することにしました。

ラベル 意味 意図
Q 質問 (Question) 質問。相手は回答が必要
FYI 参考まで (For your information) 参考までに共有。アクションは不要 (確認事項を残す場合などに使用)
NITS あら捜し (Nitpick) 重箱の隅をつつく提案。無視しても良い
NR お手すきで (No rush) 今やらなくて良いが、将来的には解決したい提案。タスク化や修正を検討
IMO 提案 (In my opinion) 個人的な見解や、軽微な提案。タスク化や修正を検討
MUST 必須 (Must) これを直さないと承認できない。修正を検討

ラベルを付けることにより、このような利点があります。

  • すべてのコメントに対して修正が必須でないので、対等な関係性となる
  • するべきアクションが明確に伝わるため、認識の齟齬が起こらない
  • コメントに重み付けがされるので、優先順位が明確になる
  • 後でやるべきタスクを、タスク化し忘れない
  • コメントの敷居が下がることより、議論の活性化

結果として、以前に比べプルリクエスト上で行われるコードレビューのコメントが増加し、積極的に議論が交わされるようになりました。チームの心理的安全性と開発効率を向上できました。

GitHub のスクリーンショット。 おおいし (@bicstone) が「nits: ここで型キャストしていますが、forwardRefのジェネリクスを活用してこう書くこともできます」というレビューコメントを残している。

使用例

レビュアー

  • q: ここって、こうで良いんでしたっけ?追えきれておらず...
  • FYI: POに口頭でサクっと確認しましたが、このままでOKとのことでした。
  • NITS: ここの条件難しいですよね。こう書くとよりシンプルになりそうだと思いました!
  • NR: ここのテスト漏れていますね。一旦タスク化しておきますか。 (タスクのリンク)
  • IMO: レアケースですが、このパターンをエラーにするとより強固になりそうです。
  • MUST: 引数が反対になっているので修正お願いします。

レビュイー

レビュイーも、事前にコードに対してコメントを入れておくとレビュアーがよりレビューしやすくなります。次のように使用できます。

  • q: ここの実装不安なんですが、あっていますかね...?
  • FYI: デザインと違いますが、POの確認済みです (Slackのリンク)
  • NITS: 以前のコードなのですが、わかりにくかったのでついでに直しました
  • NR: このレアケースに対応できないので、タスク化して別途実装します。

GitHub の Saved replies を活用する

GitHubでは、コメントのテンプレートを設定して、キーボードショートカットやツールバーから呼び出すことができるSaved repliesという機能が存在します。

運用し始めたばかりのタイミングではコメントのラベルの意味を忘れてしまうことも多いので、各自でSaved repliesを設定するのがおすすめです。

https://docs.github.com/ja/get-started/writing-on-github/working-with-saved-replies/creating-a-saved-reply

GitHub のスクリーンショット。ツールバーの「Select a reply」を選択してポップオーバーを展開した状態。前述 6 つのラベルの選択肢が表示されており、いずれかを選択して貼り付けることができるようになっている。

今後の展望

今回の記事を執筆するにあたり、同様の取り組みを調べたところConventional Commentsという規約があることを知りました。

https://conventionalcomments.org/

私たちは特にこの中でDecorationsに注目しています。

Blocking / Non-Blockingを明確にすることで、質問と作業への影響を分離して意図を伝えることができるのではないかと考えています。

チームメンバーとディスカッションしていきながら、今後も開発効率を向上するための改善を続けていきます。

まとめ

ハコベルで行っているチームの心理的安全性と開発効率の取り組みの1つとして、コードレビューにラベルを付ける手法をご紹介しました。

ルール決めさえすれば、ツールも不要で簡単に導入でき、効果が高いのでぜひお試しください。

Hacobell Developers Blog

Discussion

Yoshitaka NaraokaYoshitaka Naraoka

チームで開発している OSS repo で採用しようかと思います.参考になりました.ありがとうございます.

おおいし (bicstone)おおいし (bicstone)

OSSだとコンテキストが伝わりにくいので相性良さそうですね!
コメントありがとうございます!!