コードの「可読性」って何?読みやすいとは何か・読みやすいことのメリットとは

新人プログラマがコードレビューしてもらった時に、「可読性」に関する指摘がすんなりと理解できてすぐ改善していける人と、いつまでも理解できず改善しない人がいる。というか、年々理解できない若手が増えていく気がしている。

今回は、可読性・読みやすさとはどういうことか、「読みやすい」と云われる状態にすると何が良いのか、というところを振り返り、読みやすいコードを書くための心構えや考え方をまとめたい。

「読みやすさ」の種類

コードの可読性にはいくつかの種類がある。

つまり、「インデントさえ揃えれば良い」ワケでもないし、「命名だけちゃんとしていればインデントがメチャクチャでも良い」ワケでもない。

こうして見てみると、「インデントが揃っている」とか「周りと馴染んでいる」とかいう目線は、具体的な「行」を読んでいるのではなく、モニタに映されたコード全体のカタチというか、雰囲気を見ている感覚に近い。実際にコードを読む時も、モニタから目を離して全体を読んだ時に、どう感じているか、に近いのではないだろうか。

一方、変数名や処理の流れなどは、具体的な行や、数行の「段落」レベルの細かな話。コチラは逆にモニタに目を近付けて、一行一行をちゃんと読んでいった時の感覚。

モニタとの距離 (= 一度に視界に入れるコード量) に応じて、「読みやすさ」を判断する基準が少し違う、ということだ。

実装時に自分が読みやすいコードを書けているか確認する時に、意識的にモニタとの距離を変えてみよう。実装中はついモニタに顔が近付いているが、目線を離して遠ざけた時に違和感がないか。俗にいう「コードスメル」「臭いコード」も、こうやってモニタから距離を離すと見付けやすかったりする。コード全体のスタイルや可読性が悪いということは、細かな実装もまともである可能性が低いからだ。

なぜ「読みやすさ」が大事なのか

ところで、そもそも何故「コードの読みやすさ」が大事なのだろうか。

そう思うかもしれない。だがコレは、実装者としての視野でしか物事を見ていないからこその意見だ。

実装者の目線だけで物事を考えると、「今実装しているこの瞬間」のことしか意識がないので、「読む」意識がそもそもなく、「書く」ことだけに集中している。

しかし、コードというものは書く時間より読まれる時間の方が圧倒的に長いのだ。しかも、レビュアー、他のメンバ、後任者、「未来の自分」など、読み手はいずれも他人だ。他人に分かってもらえないといけないのに、読みやすさを考えなくて良いはずがない。

そして、読みづらくて読めなかったことによる損失のリスクが極めて高い。一度稼働したシステムで不具合が出たり、改修時にデグレードを起こしたりするのは、システム屋の評価としてはとても厳しいものになる。コードの読みやすさを意識しなかったことが、回り回って会社の評価・売上を落とすことに繋がりかねない。

これは大袈裟な話ではなく、「何でこんなに改修に時間がかかるの」とか「何でこんな初歩的なバグで本番障害が起こるの」とかいう問題は、仕様書でも PM でもなく、全てコードが引き起こしている問題なのだ。だから、コードを生み出す時はそのコードが今後どう扱われていくか、考える必要があるのである。

何が世間一般的に「読みやすい」とされているか・どうしたらそう書けるか

コードの読みやすさとは、「書いた自分自身が読みやすいこと」というよりは、「自分以外の人が読みやすいこと」が重視されることが分かった。

では、世間一般のプログラマにとって、どんなコードが読みやすいのか。どうすると読みやすくなるのか、を知ろう。コレは自分の中で考えて探すのではなく、定石を知ることが大事だ。自分目線なんて要らないので、「自分で考える」なんて不要。世間の物事をたくさん知れ。

「命名規則」もそうだが、「読みやすさ」に関しても、「コレだけ学べば終わり」というモノではない。常に学び続け、その場において適切な改善パターンを見極められるようにしないといけない。

読みやすさの判断基準を「自分」に持たないこと。書いている自分は読むことはないので、他人にとっての読みやすさを考える。それはつまり、他人の立場、他人が持つ知識を考えること (他人は書いている自分と同じだけの知識は持ち合わせていないのだから)。