GitHubのPRレビューコメントにバッジをつけてチームの認識ズレをなくす

スポンサーリンク

GitHubのPRレビューコメントにバッジをつけてチームの認識ズレをなくす

はじめに

コードレビューのコメントを受け取ったとき、こんな経験はないでしょうか。

  • 「これは必ず直さないといけないの?それとも参考意見?」
  • 「全部対応してからレビューを依頼し直すべき?」
  • レビュアーに確認するのも気が引けて、とりあえず全部対応してしまう

指摘の重要度が文章だけでは伝わりにくく、レビュイーが過剰対応したり、逆に重要な指摘を見落としたりするのはよくある問題です。

この記事では、PRレビューコメントに視覚的なバッジをつけて重要度を一目で伝える方法と、それを GitHub Saved Replies(保存済みの返信) に登録してすぐ呼び出せるようにする手順を紹介します。


バッジで何が変わるか

バッジをつけると、コメントの冒頭がこうなります。

![must](https://img.shields.io/badge/review-must-red.svg) このメソッドはnullを返す可能性があります。呼び出し元でのnullチェックを追加してください。

![ask](https://img.shields.io/badge/review-ask-yellowgreen.svg) ここでuseMemoを使っている理由を教えてもらえますか?パフォーマンス上の意図があれば問題ありません。

![memo](https://img.shields.io/badge/review-memo-lightgrey.svg) このパターンはRepository Patternと呼ばれます。データアクセスロジックをサービス層から分離するための設計です。

色とラベルで重要度がすぐわかるので、レビュイーが「どれを優先して直すか」を迷わずに判断できます。


バッジの種類

shields.io を使ったバッジを用途別に使い分けます。以下は実用的な7種類です。

バッジ 意味 対応要否
![must] 修正必須。Approveの条件 必須
![ask] 質問。回答または対応が必要 必須
![imo] 私見・代替案の提示 任意
![nits] 細かい指摘(typoや命名等) 任意
![next] 今回のPRでは不要、将来の改善点 不要
![good] 良い実装の称賛 不要
![memo] 補足説明・知識共有 不要

バッジのMarkdownは以下の形式です。

![must](https://img.shields.io/badge/review-must-red.svg)
![ask](https://img.shields.io/badge/review-ask-yellowgreen.svg)
![imo](https://img.shields.io/badge/review-imo-orange.svg)
![nits](https://img.shields.io/badge/review-nits-green.svg)
![next](https://img.shields.io/badge/review-next-blueviolet.svg)
![good](https://img.shields.io/badge/review-good-brightgreen.svg)
![memo](https://img.shields.io/badge/review-memo-lightgrey.svg)

GitHub Saved Replies に登録する

毎回バッジのMarkdownをコピペするのは手間です。GitHubには Saved Replies(保存済みの返信) という機能があり、よく使うコメントテンプレートをショートカットとして登録できます。拡張機能のインストールは不要で、GitHubアカウントの設定だけで使えます。

登録手順

1. 設定画面を開く

GitHubにログインした状態で、以下のURLに直接アクセスします。

https://github.com/settings/replies

または、右上のアバター → Settings → 左メニューの Saved replies でも到達できます。

2. 新しいSaved Replyを作成する

「Add a saved reply」ボタンをクリックし、以下の内容で登録します。

must用

  • Saved Reply Title: review-must
  • Content:
![must](https://img.shields.io/badge/review-must-red.svg) 

ask用

  • Saved Reply Title: review-ask
  • Content:
![ask](https://img.shields.io/badge/review-ask-yellowgreen.svg) 

同様に imonitsnextgoodmemo 分も登録します。全部で7つです。

タイトルは自分がわかりやすければ何でも構いません。絵文字を入れると視認性が上がります(例: 🔴 must)。

3. 登録完了の確認

登録するとリストに並びます。この設定は自分のアカウントに紐づくため、チームへの共有は不要です。

PRレビューで使う

PRのコメント入力欄の右上にある 「...」(Show saved replies) アイコンをクリックすると、登録したSaved Repliesが一覧で表示されます。

使いたいバッジを選ぶとコメント欄にMarkdownが挿入されるので、続けてコメント本文を書けばOKです。

キーボードショートカットも使えます。コメント入力中に Ctrl + .(Mac は Cmd + .)でSaved Repliesを呼び出せます。


実際のレビューコメント例

登録後のレビューはこんな形になります。

![must](https://img.shields.io/badge/review-must-red.svg)
`fetchUser` はPromiseを返しますが、エラーハンドリングがありません。
try-catchかcatch()で明示的に処理してください。

![ask](https://img.shields.io/badge/review-ask-yellowgreen.svg)
`userId` を引数で受け取らずにstoreから取得しているのはなぜですか?
テスタビリティの観点で引数渡しの方が良いように思えますが、意図があれば教えてください。

![good](https://img.shields.io/badge/review-good-brightgreen.svg)
カスタムフックへの切り出し、きれいに分離できていますね!

レビュイーは mustask だけ対応すればApproveをもらえることが一目でわかります。


チームで運用するときのコツ

READMEやNotionにバッジ一覧を貼る

Saved Repliesは個人設定なので、チームメンバー全員がそれぞれ登録する必要があります。バッジの意味の定義と登録用Markdownをドキュメント化しておくと展開しやすいです。

最初はmust/ask/memoの3つだけでも十分

全種類を一気に導入するより、重要度が明確に分かれる3つから始める方がチームに定着しやすいです。

レビュイー側のルールも決める

mustask を全て対応したら、対応内容をコメントで返信してから再レビュー依頼する、というルールをセットで決めると機能しやすくなります。


まとめ

  • PRレビューコメントへのバッジ導入で、指摘の重要度が視覚的に伝わる
  • shields.io のバッジはMarkdown1行で使える
  • GitHub Saved Replies に登録することで、毎回のコピペが不要になる
  • 拡張機能不要・無料でGitHubアカウントの設定だけで完結する
  • まずは must / ask / memo の3種類から始めるのがおすすめ