21
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

これは好みの問題でも、言い方の問題でもありません。
レビューという行為の定義から外れているというだけの話です。

この記事は、

  • 抽象的なレビュー指摘をしてしまう人
  • それを「なるほど」と受け取ってしまう初心者
  • そして、なんとなく違和感を覚えつつ言語化できていなかったベテラン

全員に向けて書いています。

「可読性」という言葉は、なぜここまで無責任なのか

まず事実確認をしましょう。

可読性は測定不能な指標である。ということです

  • 何行以下なら高いのか?
  • ネストはいくつまでか?
  • どの知識レベルの人間を想定しているのか?

これらが定義されていない「可読性」は、指標ですらなく、ただの感情のラベルです。

そしてレビューで感情ラベルを貼った瞬間、

  • 議論は止まり
  • 学習は起きず
  • 改善も再現されない

それはレビューではなく、単なる感想でしかありません。

読めないコードの正体は、ほぼ100%「前提知識」だ

コードが読めない理由は、ほぼ例外なくこれで説明できます。

コードが要求している前提知識と、読み手が持っている前提知識が一致していない

可読性の問題ではありません。

  • ドメイン知識を知っている前提
  • フレームワークの内部仕様を知っている前提
  • チームローカルな命名規則を知っている前提

これらが暗黙のまま埋め込まれていると、「読めない」という体験が発生します。

そこで言うべき言葉は、「可読性が低い」ではありません。

「可読性が低い」は、読んでいない証拠である

本当にコードを読んだレビュアーは、「可読性が低い」とは言えない。

なぜなら、しっかり読めば必ずこうなるからです。

  • どこで理解が止まったかがわかる
  • 何を知らないと読めないかが見える
  • 自分の認知負荷の正体を自覚する

それを言語化せずに、

「可読性が低いですね」

で済ませるのは、

  • 読んでいないか
  • 読んだが考えていないか
  • あるいは説明する能力がないか

そのいずれかです。

良いレビューは「認知負荷」を特定する

レビューでやるべき仕事は、実は一つしかありません。
どこで、どんな認知負荷が発生しているかを特定し、言語化することです。

具体的にはこう。

  • 「この関数は3つの概念を同時に保持しないと追えない」
  • 「この条件分岐は、ドメインルールを頭の中で復元する必要がある」
  • 「この命名は、実体を想像するまでにワンステップ余計にかかる」

ここまで言って、初めてレビューになります。

ベテランにとって「可読性が低い」は重罪である

ベテランがこの言葉を使うとき、罪はさらに重くなります。

なぜならそれは、

  • 自分の暗黙知を
  • 他人も持っている前提で扱い
  • それを説明しないという選択

をしているからです。

ベテランの役割は、「わかる人だけがわかる世界」を維持することではありません。

暗黙知を言語化し、再利用可能な知識に変換することです。

それを放棄して「可読性が低い」と言うのは、立場を使った責任転嫁に等しいものです。

レビュー指摘は「再現可能」でなければならない

良いレビュー指摘には、必ず再現性があります。

  • 他の人が読んでも同じ指摘ができる
  • 同じ条件なら、誰でも同じ認知負荷を感じる
  • 修正後、何が改善されたか説明できる

「可読性が低い」は、これらを一つも満たさないのです。

再現性のない指摘は、

  • ナレッジにならない
  • ルールにならない
  • チームを強くしない

つまり、ただのノイズとなります。

じゃあ、どうレビューを書けばいいのか

NGレビュー

可読性が低いです。

OKレビュー(最低限)

この処理は、◯◯の仕様を知っていないと意図が読み取れません。
コメントを補足するか、命名で前提を明示した方が良さそうです。

良いレビュー

この関数は

  1. ドメインAの知識
  2. ライブラリBの挙動
  3. 呼び出し元の制約
    を同時に保持しないと理解できません。
    読み手を「新規参画メンバー」と想定すると、ここがボトルネックになります。

ここまで書いて、初めて真のレビューとなります。

「可読性」という言葉を使っていい、唯一の条件

それでも「可読性」という言葉を使いたいなら、条件があります。

必ず「誰にとって」「なぜ」をセットで言語化できることです

例:

新規参画メンバーにとって、
この命名はドメイン知識がないと解釈できず、
読み進める際の認知負荷が高いです。

これなら、ギリギリレビューとして成立します。

初心者エンジニアへ

「可読性が低い」と言われたとき、落ち込む必要はありません。

それは多くの場合、「うまく説明できない」というレビュアー側の失敗だからです。

こう聞いても良いと思います。

  • 「どの知識があれば読めますか?」
  • 「どこで理解が止まりましたか?」
  • 「誰を読み手として想定していますか?」

答えが返ってこないなら、そのレビューは無視して問題ありません。(責任は負いませんが)

結論

可読性が低い、はレビューではなく感想だ。

レビューとは、

  • 読めなかった理由を
  • 再現可能な形で
  • 他人に渡す行為

それができないなら、「可読性」という便利な言葉を使う資格はありません。
それは、エンジニアとしての怠慢です。

21
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?