【エンジニアあるある】コードレビューで指摘された箇所、実は仕様だった

こんばんは!IT業界で働くアライグマです!

エンジニアなら誰しも経験があるのではないでしょうか。
コードレビュー中に「ここの処理、バグでは?」と指摘され、確認してみると…「仕様通りです」というオチ。

  • 「この計算式、間違ってません?」→ 仕様です
  • 「このAPI、なぜこんな挙動?」→ 仕様です
  • 「この変数名、もっと分かりやすくできませんか?」→ 仕様書のままです

コードレビューはバグの早期発見や品質向上のために行われますが、指摘が実は正しい動作だったというケースも少なくありません
なぜこのようなすれ違いが発生するのか? どうすれば防げるのか?

この記事では、コードレビューで「これは仕様です」を減らすための工夫や対策を紹介します。

なぜ「仕様です」が起こるのか?

仕様が十分に共有されていない

コードレビューで「バグでは?」と指摘される原因の一つが、仕様がチーム内で十分に共有されていないことです。

  • 仕様書はあるけれど、読まれていない
  • 口頭で伝えただけで、ドキュメント化されていない
  • 「過去の経緯」を知っている人が限られている

仕様がドキュメント化されておらず、知識が個人に依存していると、レビュー時に誤解が生じやすくなります。

仕様が直感的でない(意外な動作をする)

「仕様です」と言われても納得しづらいのは、仕様の挙動が直感的でない場合です。

たとえば、次のようなケースです。

  • 「0÷0」を計算したらエラーではなく、デフォルト値の100が返る(仕様書にはそう書いてある)
  • ボタンを押すと1秒待ってから処理が実行される(パフォーマンス対策だが、見た目はバグっぽい)
  • エラーメッセージが「成功しました」になっている(仕様書の翻訳ミス)

開発者の直感に反する仕様は、コードを読んだだけでは理解しにくく、誤解を生みやすいです。

過去の仕様変更が影響している

「昔の仕様」と「今の仕様」が混在しているケースも要注意です。

  • 以前はAの挙動だったが、仕様変更でBになった
  • 古いコードが残っており、どちらが正しいのか判断がつかない
  • ドキュメントの更新が追いついていない

このような状態だと、「仕様通り」と言われても、本当に最新の仕様なのか疑問が残ります

「仕様です」を減らすための工夫

レビュー前に仕様を明確に共有する

コードレビューで「これは仕様です」を減らすためには、事前に仕様を明確に共有することが重要です。

仕様書を用意する

  • 仕様が確定したら、できるだけ詳細にドキュメント化する
  • 変更があったら、必ず更新する
  • 可能なら「なぜこの仕様になったのか?」という経緯も書く

プルリクエストに仕様の説明を含める

  • PRの説明欄に「この挙動は仕様です」と明記する
  • 参考になる仕様書のリンクを貼る
  • 実装の背景や意図を簡単に説明する

チームで事前に仕様をすり合わせる

  • 仕様が曖昧なまま実装を進めない
  • 設計段階で「この仕様で問題ないか?」を確認する
  • 不明点があれば、早めに相談する

これらを徹底することで、レビュー時の「これは仕様?」を減らし、スムーズな開発が可能になります

「直感的でない仕様」はコメントやテストで補足する

どうしても直感的でない仕様は、コードだけでは理解しにくいことがあります。
その場合は、コメントやテストで仕様を明示すると効果的です。

コードコメントに仕様の根拠を記載する

// 仕様書によると、0除算時はデフォルト値100を返す
function calculate($a, $b) {
    return $b === 0 ? 100 : $a / $b;
}

テストコードで期待される動作を示す

it('should return 100 when dividing by zero', function () {
    expect(calculate(10, 0))->toBe(100);
});

こうすることで、レビューする側も仕様を理解しやすくなり、余計な指摘を減らせます

仕様変更があったら履歴を残す

仕様が頻繁に変わる場合は、仕様変更の履歴を残すことが重要です。

  • バージョン管理をしっかりする(GitHubのWikiやNotionなど)
  • 変更の背景を記録する(「なぜこの変更をしたのか?」を残す)
  • 古い仕様と新しい仕様を明確に区別する

特に、「過去の仕様のせいでレビュー時に混乱する」ケースは多いので、履歴を整理することが重要です。

まとめ:「仕様です」を減らして、スムーズなコードレビューを

コードレビューで「これは仕様です」という指摘が多いと、レビューの生産性が下がり、不要なコミュニケーションコストが発生します

仕様を明確に共有し、ドキュメントを整備する
直感的でない仕様はコメントやテストで補足する
仕様変更の履歴を残し、チーム全体で把握できるようにする

「仕様通りだけど分かりにくい」ではなく、誰が見ても分かりやすいコードと仕様を目指すことで、よりスムーズな開発が可能になります

次のコードレビューでは、「これバグじゃない?」と言われる前に、「仕様書の○○に書いてあります!」と自信を持って答えられるようにしたいですね。