コードレビューを極める:レビュアーと著者のためのガイド
ジュニア開発者に仕事は何かと尋ねれば、「コードを書くこと」と答えるでしょう。シニア開発者に尋ねれば、「問題を解決すること」と言うでしょう。しかし、スタッフエンジニアに尋ねれば、「コードを読み、レビューすること」と答えるかもしれません。
キャリアを積むにつれて、コードを書く時間よりも読む時間の方が長くなります。コードレビューは、コードの品質を維持し、知識を共有し、チームメンバーを指導するための最も重要なメカニズムです。
しかし、それはしばしば不安の種でもあります。著者は批判を恐れ、レビュアーは対立を恐れます。このガイドでは、コードレビューを苦痛な雑用からチームのためのスーパーパワーに変える方法を探ります。
哲学:あなた自身への批判ではありません
コードレビューの第一原則はこれです:私たちは人を批判しているのではなく、コードを批評しているのです。
- 悪い例: 「君がこの変更でビルドを壊した。」
- 良い例: 「この変更がビルドエラーの原因になっているようです。」
些細な言葉の違いのように聞こえるかもしれませんが、これにより対話の力学が「非難」から「協力」へと変わります。
著者のために:プルリクエスト(PR)の芸術
優れたコードレビューは、PRを開く前に始まります。あなたの目標は、レビュアーの仕事をできるだけ簡単にすることです。
1. コンテキストは王様(Context is King)
絶対に空の説明文でPRを開かないでください。少なくとも以下を含めるべきです:
- What: この変更は何をするものですか?
- Why: なぜ必要なのですか?(チケット/Issueへのリンク)
- How: どのようにテストしましたか?(スクリーンショット、動画、またはCLI出力)
2. ゴルディロックス・サイズ(ちょうどいいサイズ)
Cisco Systemsの研究によると、一度に200〜400行以上のコードをレビューすると、レビュアーの欠陥発見能力が著しく低下することがわかっています。
- 小さすぎる: タイプミスの修正(緊急でなければ)。
- 大きすぎる: 「認証システム全体のリファクタリング」(2,000行)。
- ちょうどいい: 1つの論理的な作業単位(例:「ユーザーログインエンドポイントの追加」)。
PRが大きすぎる場合は、**スタック(Stack)**してください。依存関係のある小さなPRに分割するのです。
3. セルフレビュー
レビュアーを割り当てる前に、自分のdiffを読んでください。console.logやコメントアウトされたコードなど、どれほど多くの愚かなミスを自分で見つけられるかに驚くでしょう。きれいなdiffは、レビュアーの時間への敬意を示します。
レビュアーのために:何を見るべきか
レビューを開くとき、単に抜けているセミコロンを探すだけではいけません。レイヤー(層)で考えてください。
レイヤー1:アーキテクチャと設計(全体像)
- この変更はここに属するものですか?
- スケーラブルですか?
- 技術的負債を生み出しませんか?
- アクション: 設計が間違っている場合は、詳細のレビューを中止してください。まずアプローチについて議論しましょう。
レイヤー2:機能とバグ
- 実際に動作しますか?
- エッジケースは処理されていますか?(Nullチェック、空リスト、エラー状態)
- セキュリティ上の脆弱性はありませんか?(SQLインジェクション、XSS)
レイヤー3:可読性と保守性
- 変数名は説明的ですか?(
xvsuserIndex) - ロジックが複雑すぎませんか?(ネストされたループ、巨大な関数)
- 半年後の開発者がこれを理解できるでしょうか?
レイヤー4:スタイルと些細な指摘(自動化の領域)
- インデント、スペース、括弧。
- プロのヒント: これはPrettierやESLintに任せましょう。人間がカンマについて議論するのに時間を浪費すべきではありません。
「Nitpick(粗探し)」の罠
誰もが経験があるでしょう。複雑なアルゴリズムを提出したのに、レビュアーがこうコメントするのです:「ファイルの最後に改行を追加してください。」
スタイルも重要ですが、些細なこと(Nits)だけに集中するのは士気を下げます。「自転車置き場の議論(Bike-shedding)」のように感じられます。
経験則:
コメントが純粋に主観的であったり、些細な好みである場合は、**「Nit」または「Non-blocking(ブロックしない)」**とラベル付けしてください。
"Nit: 私はここで
constを好みますが、無視しても構いません。"
これは著者に次のようなシグナルを送ります:「あなたのロジックは承認します。これは単により良くするための提案に過ぎません。」
意見の不一致への対処
意見の不一致は健全なことです。それは人々が気にかけていることを意味します。しかし、扱いを誤ると有害になる可能性があります。
- 命令せず、質問する:
- 「これをユーティリティ関数に移して。」(×)
- 「再利用性を高めるために、これをユーティリティ関数に移すのはどう思いますか?」(○)
- 通話する:
- コメントスレッドが3回以上往復したら、タイピングをやめてください。ビデオ通話をするか、相手の席に行きましょう。テキストはニュアンスを伝えるには最悪の媒体です。
- Disagree and Commit(同意できなくてもコミットする):
- 正解がない場合もあります。著者に正当な理由があり、それが致命的な問題でないなら、彼らのやり方を尊重しましょう。100%正しいことよりも、信頼の方が重要です。
結論
コードレビューは、コーディングと同様に一つのスキルです。共感、明確さ、そして忍耐が必要です。
- 著者: コンテキストが豊富なPRを書き、レビュアーの時間を尊重しましょう。
- レビュアー: まずアーキテクチャの問題を見て、親切に接し、「修正必須」と「あれば良い」を区別しましょう。
正しく行われれば、コードレビューはより良いコードを生み出すだけでなく、より良いエンジニアを生み出します。
関連ツールを見る
Pockitの無料開発者ツールを試してみましょう