プログラマーとして企業に所属し、チームでシステム開発を行っていると、自分だけが理解できるコードを書くことは許されない。
これまでのキャリアの中で痛感してきたのは、動くコードを書くのはプログラマーにとって最低限のスタートラインであり、本当に価値があるのは「他人が読んだときに瞬時に意図が伝わる、可読性の高いコード」を書けることである。
今回は、理屈っぽいと言われがちな私が、日々の業務の中でコードの可読性を高めるために徹底的に意識しているいくつかのこだわりについて語ってみたいと思う。
命名規則と変数名に徹底的にこだわる理由
プログラムの可読性を決定づける最も重要な要素は、変数や関数、クラスといった要素に対する「名前の付け方」にあると私は確信している。
ソフトウェア開発の世界には「プログラマーが最も頭を悩ませるのは名前付けである」という有名な格言があるが、これは全くその通りだ。
たとえば、顧客のデータを格納する変数に単に「data」や「info」といった曖昧な名前をつけてしまうと、後からそのコードを読んだ人間は、それが顧客の住所なのか、年齢なのか、あるいは購入履歴なのかを推測するために、処理の前後をくまなく読み解かなければならなくなる。
そのため、私は変数名を決める際、多少文字数が長くなったとしても、その変数が何を表しているのかが英単語だけで明確に伝わるように意識している。
「customerBillingAddress」のように具体的に記述すれば、エディタの機能で変数名を補完できる現代においてはタイピングの手間もかからない。
また、真偽値(ブーリアン)を返す関数であれば、必ず「is」や「has」といった疑問形から始めるなど、チームで定められた命名規則を厳格に守ることで、コード全体に統一感を持たせられる。
コメントは処理の内容ではなく理由を記述する
コードの可読性を上げるために、何でもかんでもコメントを書き込めば良いと誤解している新人プログラマーをたまに見かける。
「ここでループを開始する」「変数に一を足す」といった、コードを読めば自明な処理の内容をそのまま日本語に翻訳しただけのコメントは、画面を圧迫し可読性を下げるノイズでしかない。
私がコメントを書く際に強く意識しているのは、「何をしているか(What)」ではなく、「なぜそう書いたのか(Why)」という背景や理由を記述することだ。
たとえば、特定の顧客データだけを計算から除外するような特殊な条件分岐があった場合、コードだけではそれが仕様によるものなのか、それとも一時的なバグ対応のパッチなのかを判断できない。
そういった箇所にこそ、「このクライアントの旧システムとの互換性を保つために、2000年以前のデータは除外する」といった業務上の背景知識や理由をコメントとして残しておくべきなのだ。
また、一般的なアルゴリズムではなく、あえて少しトリッキーな実装をした場合にも、なぜ標準的なアプローチを採用しなかったのか(パフォーマンスの問題など)を明記しておく。
優れたコードはそれ自体が説明書として機能し、コメントはコードが語り切れない文脈を補足するための手段であるという前提を忘れてはならない。
メソッドを適切に分割して単一責任の原則を守る
もう一つ、私がコーディングの際に細心の注意を払っているのが、一つのメソッド(関数)を長くしすぎないことだ。
上から下まで何百行にも及ぶ巨大なメソッドは、変数のスコープが広がりすぎて状態の追跡が困難になるだけでなく、テストを記述することも非常に難しくなる。
こうした事態を防ぐために、私は「単一責任の原則」というオブジェクト指向設計の考え方を常に意識している。
これは、一つのクラスやメソッドは「たった一つの仕事」だけを持つべきであるという原則である。
たとえば、「データベースからユーザー情報を取得し、年齢を計算し、画面に出力するための文字列を生成する」という処理を一つのメソッドに詰め込むのは完全にアンチパターンだ。
これを「データの取得」「計算」「フォーマットの変換」という三つの小さなメソッドに分割し、それぞれのメソッドに適切な名前をつける。
そうすることで、メインの処理の流れが劇的に見通しやすくなり、仮に計算処理にバグがあった場合でも、修正箇所を特定のメソッド内だけに限定できる。
処理を細かく分割することは、最初は手間がかかるように感じるかもしれない。
しかし、結果的にコードの再利用性を高め、長期的なメンテナンスのコストを大幅に下げることに繋がる。
美しいコードを書くためのこのこだわりは、理系的な整理整頓の楽しさに通じるものがある。