本の紹介『読みやすいコードのガイドライン』

はじめに

良い本です。コードを書く人であればだれでもが気づきと学びがあるでしょう。
特に、コードの規模が大きく長期間にわたってさまざまな関係者が読むことになるプログラムを書く人にはぜひ読んでほしい本です。

gihyo.jp

この本から学べるのは、どちらかというと「やり方」よりも「考え方」です。
書き方の具体例というよりは、良いコードを書くための考え方を、著者の知見に基づいて丁寧かつ具体的に説明しています。 別の言い方をすると、とにかくコードの具体例で「やり方」を覚えたい、という人には合わないかもしれません。
コードの具体例もたくさん登場しますが、それは「考え方」を説明するための例であって、コードの書き方のお手本やサンプルを集めた本ではありません。

サンプルコードはKotlinです。内容は、どちらかといえばユーザーインタフェースよりという印象です。しかし、Kotlinを知らなくてもほぼ問題なく読めますし、「考え方」の本なのでサーバーサイドのプログラミングでも役に立つ内容ばかりです。

この本の内容は次の三つに分けることができます。

  • 基本となる考え方の説明(はじめに、1章)
  • 自然言語を使った人と人とのコミュニケーション(2章、3章、7ç« )
  • プログラムの構造と複雑さの改善(4章、5章、6章)

それぞれに内容について、概略を紹介します。

基本となる考え方(はじめに、1章)

コードの読みやすさが開発の生産性に与える影響を述べています。
その視点から、コードの読みやすさの指標を4つあげています。

  • 単純なコード
  • 意図が明確なコード
  • 独立性の高いコード
  • 構造化されたコード

この本で説明している「読みやすいコード」の考え方を要約した内容です。

また、この考え方にそって、さまざまな一般的な設計原則のなから、以下を取り上げて説明しています。

この五つを代表的な原則として選んだ理由として「過剰に適用したとしても比較的悪影響が出にくい」ことをあげているところに、著者の設計原則についての考え方が表れていると感じました。

自然言語を使った人と人とのコミュニケーション(2章、3章、7章)

コードを書くとは、人と人とのコミュニケーションである、という観点で参考になるのが次の三つの章の考え方でしょう。

  • 第2章 命名
  • 第3章 コメント
  • 第7章 コードレビュー

自然言語を使ってうまく意図を伝達するには、どのようなことに気を付ければよいかを説明した内容です。
ソフトウェア開発とはコミュニケーションでありドキュメンテーションである、という考え方が一貫しています。コードの規模が大きく関係者も多い開発の現場で、ほんとうに役に立つ考え方をわかりやすく解説しています。
チーム開発に関わる人にはぜひ読んでほしい内容です。

プログラムの構造と複雑さの改善(4章、5章、6章)

個人的には、この三つの章が特に参考になりました。コードの書き方というよりは、設計がテーマの章だと思います。
コードが複雑になり読みにくくなる原因とその改善策を「状態」「関数」「依存関係」の視点から説明しています。

第4章 状態

状態を単純化する方法がいろいろ紹介されています。
状態の扱いはプログラムを複雑にします。この複雑さの扱い方について、学びの多い章です。
複数の変数を扱うときの「直交性」の大切さ、状態遷移の複雑さを緩和するための「不変性」「べき等性」「巡回と非巡回」などの考え方を具体例や図を使いながら説明してあります。

かなり高度な内容が含まれていると思いますが、それをわかりやすく説明できているのは、著者がソフトウェア開発の現場で、こういう考え方を回りに何度も伝えてきた経験が背景にあるのだろうと感じました。

第5章 関数

関数の動作を予測可能にする、という視点からのコードの書き方を説明しています。
「関数の責任の分割の考え方」と「関数の流れをわかりやすくする工夫とその効果」が説明されています。
「早期リターン」というある意味で単純なテクニックを取り上げて、5ページにわたって背景にある考え方、適用する時の注意点が丁寧に説明されています。こういうところがこの本の特徴であり、この本を読む価値だと思います。

第6章 依存関係

クラスの依存関係というやっかいな課題を「結合度」「方向」「重複」「明示性」の四点から取り上げています。
依存の強さ(結合度)について、7つの結合パターンと結合度の強弱についての説明は、とてもわかりやすく参考になります。考え方自体は従来からあるものですが、従来からの考え方について、いろいろ調べ、それを現場に取り入れてきた著者の知識と経験がにじみ出ている内容だと感じました。
「方向」「重複」「明示性」については、図とサンプルコードが丁寧に作られていて、なかなかの力作だと思いました。この本のもとになったプレゼンテーション、講義、現場での意見交換などからのフィードバックか活かされているのでしょう。

この三つの章は、コードの書き方というよりは設計の考え方とやり方として大いに参考にしてほしい内容です。

関連書籍など

この本に関連した書籍をいくつか取り上げておきます。

O'Reilly Japan - リーダブルコード

コードの書き方についての古典的な名著です。
取り扱っている内容は、本書と重なるところもありますが『リーダブルコード』のほうがコードよりで基礎的な内容だと思います。

『読みやすいコードのガイドライン』はわかりやすく書いてありますが、取り上げている内容や考え方の説明は、初級者向けというよりは中級者向けだと思います。

良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方:書籍案内|技術評論社

仙塲さん(ミノ駆動さん)のこの本も内容としては重なるところがあります。
仙塲さんの本は、現場の生々しいコード例が豊富で、コードの具体例で学びたい人には、こちらのほうが合うかもしれません。しかしこちらも単なるコードのサンプル集ではなく「設計の考え方」に触れることを強く意識している本です。
リファクタリングを通じた設計改善の指針と具体例という点で、こちらの本も合わせて読むことをお勧めします。

最後に『読みやすいコードのガイドライン』とは少し異なる視点で書かれた本を2冊紹介します。
これらの本の背景にある設計の考え方は、かなりの部分が共通しているので、参考になる点も多いと思います。

達人プログラマー(第2版) 熟達に向けたあなたの旅 | Ohmsha
現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法:書籍案内|技術評論社

(拙著です)