リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

Book description

美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ。(本書「はじめに」より)
コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。日本語版ではRubyやgroongaのコミッタとしても著名な須藤功平氏による解説を収録。

Table of contents

  1. 表紙
  2. 大扉
  3. 原書大扉
  4. クレジット
  5. 訳者まえがき
    1. 面白いと、読みやすいは、違うんだよ?
    2. やらんもんは…勝たれへん!!
    3. 謝辞
  6. はじめに
    1. 本書について
    2. 本書の読み方
    3. ライセンスについて
    4. サンプルコードの使用
    5. 謝辞
    6. 1章 理解しやすいコード
      1. 1.1 「優れた」コードって何?
      2. 1.2 読みやすさの基本定理
      3. 1.3 小さなことは絶対にいいこと?
      4. 1.4 「理解するまでにかかる時間」は競合する?
      5. 1.5 でもやるんだよ
  7. 第I部 表面上の改善
    1. 2章 名前に情報を詰め込む
      1. 2.1 明確な単語を選ぶ
        1. もっと「カラフル」な単語を探す
      2. 2.2 tmpやretvalなどの汎用的な名前を避ける
        1. tmp
        2. ループイテレータ
        3. 汎用的な名前のまとめ
      3. 2.3 抽象的な名前よりも具体的な名前を使う
        1. 例:DISALLOW_EVIL_CONSTRUCTORS
        2. 例:--run_locally
      4. 2.4 名前に情報を追加する
        1. 値の単位
        2. その他の重要な属性を追加する
      5. 2.5 名前の長さを決める
        1. スコープが小さければ短い名前でもいい
        2. 長い名前を入力するのは問題じゃない
        3. 頭文字と省略形
        4. 不要な単語を投げ捨てる
      6. 2.6 名前のフォーマットで情報を伝える
        1. その他のフォーマット規約
      7. 2.7 まとめ
    2. 3章 誤解されない名前
      1. 3.1 例:filter()
      2. 3.2 例:Clip(text, length)
      3. 3.3 限界値を含めるときはminとmaxを使う
      4. 3.4 範囲を指定するときはfirstとlastを使う
      5. 3.5 包含/排他的範囲にはbeginとendを使う
      6. 3.6 ブール値の名前
      7. 3.7 ユーザの期待に合わせる
        1. 例:get*()
        2. 例:list::size()
      8. 3.8 例:複数の名前を検討する
      9. 3.9 まとめ
    3. 4章 美しさ
      1. 4.1 なぜ美しさが大切なのか?
      2. 4.2 一貫性のある簡潔な改行位置
      3. 4.3 メソッドを使った整列
      4. 4.4 縦の線をまっすぐにする
        1. 整列すべきなのか?
      5. 4.5 一貫性と意味のある並び
      6. 4.6 宣言をブロックにまとめる
      7. 4.7 コードを「段落」に分割する
      8. 4.8 個人的な好みと一貫性
      9. 4.9 まとめ
    4. 5章 コメントすべきことを知る
      1. 5.1 コメントするべきでは「ない」こと
        1. コメントのためのコメントをしない
        2. ひどい名前はコメントをつけずに名前を変える
      2. 5.2 自分の考えを記録する
        1. 「監督のコメンタリー」を入れる
        2. コードの欠陥にコメントをつける
        3. 定数にコメントをつける
      3. 5.3 読み手の立場になって考える
        1. 質問されそうなことを想像する
        2. ハマりそうな罠を告知する
        3. 「全体像」のコメント
        4. 要約コメント
      4. 5.4 ライターズブロックを乗り越える
      5. 5.5 まとめ
    5. 6章 コメントは正確で簡潔に
      1. 6.1 コメントを簡潔にしておく
      2. 6.2 あいまいな代名詞を避ける
      3. 6.3 歯切れの悪い文章を磨く
      4. 6.4 関数の動作を正確に記述する
      5. 6.5 入出力のコーナーケースに実例を使う
      6. 6.6 コードの意図を書く
      7. 6.7 「名前付き引数」コメント
      8. 6.8 情報密度の高い言葉を使う
      9. 6.9 まとめ
  8. 第II部 ループとロジックの単純化
    1. 7章 制御フローを読みやすくする
      1. 7.1 条件式の引数の並び順
      2. 7.2 if/elseブロックの並び順
      3. 7.3 三項演算子
      4. 7.4 do/whileループを避ける
      5. 7.5 関数から早く返す
      6. 7.6 悪名高きgoto
      7. 7.7 ネストを浅くする
        1. ネストが増える仕組み
        2. 早めに返してネストを削除する
        3. ループ内部のネストを削除する
      8. 7.8 実行の流れを追えるかい?
      9. 7.9 まとめ
    2. 8章 巨大な式を分割する
      1. 8.1 説明変数
      2. 8.2 要約変数
      3. 8.3 ド・モルガンの法則を使う
      4. 8.4 短絡評価の悪用
      5. 8.5 例:複雑なロジックと格闘する
        1. より優雅な手法を見つける
      6. 8.6 巨大な文を分割する
      7. 8.7 式を簡潔にするもう1つの創造的な方法
      8. 8.8 まとめ
    3. 9章 変数と読みやすさ
      1. 9.1 変数を削除する
        1. 役に立たない一時変数
        2. 中間結果を削除する
        3. 制御フロー変数を削除する
      2. 9.2 変数のスコープを縮める
        1. C++のif文のスコープ
        2. JavaScriptで「プライベート」変数を作る
        3. JavaScriptのグローバルスコープ
        4. PythonとJavaScriptのネストしないスコープ
        5. 定義の位置を下げる
      3. 9.3 変数は一度だけ書き込む
      4. 9.4 最後の例
      5. 9.5 まとめ
  9. 第III部 コードの再構成
    1. 10章 無関係の下位問題を抽出する
      1. 10.1 入門的な例:findClosestLocation()
      2. 10.2 純粋なユーティリティコード
      3. 10.3 その他の汎用コード
        1. 思いも寄らない恩恵
      4. 10.4 汎用コードをたくさん作る
      5. 10.5 プロジェクトに特化した機能
      6. 10.6 既存のインタフェースを簡潔にする
      7. 10.7 必要に応じてインタフェースを整える
      8. 10.8 やりすぎ
      9. 10.9 まとめ
    2. 11章 一度に1つのことを
      1. 11.1 タスクは小さくできる
      2. 11.2 オブジェクトから値を抽出する
        1. 「一度に1つのタスク」を適用する
        2. その他の手法
      3. 11.3 もっと大きな例
        1. さらなる改善
      4. 11.4 まとめ
    3. 12章 コードに思いを込める
      1. 12.1 ロジックを明確に説明する
      2. 12.2 ライブラリを知る
      3. 12.3 この手法を大きな問題に適用する
        1. 解決策を言葉で説明する
        2. 手法を再帰的に適用する
      4. 12.4 まとめ
    4. 13章 短いコードを書く
      1. 13.1 その機能の実装について悩まないで——きっと必要ないから
      2. 13.2 質問と要求の分割
        1. 例:店舗検索システム
        2. 例:キャッシュを追加する
      3. 13.3 コードを小さく保つ
      4. 13.4 身近なライブラリに親しむ
        1. 例:Pythonのリストとセット
        2. ライブラリの再利用はなぜいいことなのか
      5. 13.5 例:コーディングするよりもUnixツールボックスを使う
      6. 13.6 まとめ
  10. 第IV部 選抜テーマ
    1. 14章 テストと読みやすさ
      1. 14.1 テストを読みやすくて保守しやすいものにする
      2. 14.2 このテストのどこがダメなの?
      3. 14.3 テストを読みやすくする
        1. 最小のテストを作る
        2. 独自の「ミニ言語」を実装する
      4. 14.4 エラーメッセージを読みやすくする
        1. もっといいassert()を使う
        2. 手作りのエラーメッセージ
      5. 14.5 テストの適切な入力値を選択する
        1. 入力値を単純化する
        2. 1つの機能に複数のテスト
      6. 14.6 テストの機能に名前をつける
      7. 14.7 このテストのどこがダメだったのか?
      8. 14.8 テストに優しい開発
      9. 14.9 やりすぎ
      10. 14.10 まとめ
    2. 15章 「分/時間カウンタ」を設計・実装する
      1. 15.1 問題点
      2. 15.2 クラスのインタフェースを定義する
        1. 名前を改善する
        2. コメントを改善する
      3. 15.3 試案1:素朴な解決策
        1. このコードは理解しやすいか?
        2. 読みやすいバージョン
        3. パフォーマンスの問題
      4. 15.4 試案2:ベルトコンベヤー設計
        1. 二段階ベルトコンベヤーの実装
        2. これで終わり?
      5. 15.5 試案3:時間バケツの設計
        1. 時間バケツの実装
        2. TrailingBucketCounterを実装する
        3. ConveyorQueueの実装
      6. 15.6 3つの解決策を比較する
      7. 15.7 まとめ
  11. 付録 あわせて読みたい
    1. 高品質のコードを書くための書籍
    2. プログラミングに関する書籍
    3. 歴史的記録
  12. 解説 須藤 功平
    1. 実際にやる
      1. 実際にやるとぶつかること
      2. 他の人に読んでもらう
      3. おさらい
    2. 当たり前にする
      1. 既存のコードを読みやすくする前にやること
      2. 続けることが大事
    3. コードで伝える
      1. 読みやすいコードがもっと当たり前であり続けるために
      2. コミットメールのススメ
      3. まずはあなたが読む
      4. 添削コミット
      5. おさらい
    4. 最後に
  13. 著者・訳者紹介
  14. 奥付

Product information

  • Title: リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
  • Author(s): Dustin Boswell, Trevor Foucher, 角 征典
  • Release date: June 2012
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873115658

You might also like

book

プロダクトマネジメント ―ビルドトラップを避け顧客に価値を届ける

by Melissa Perri, 吉羽 龍太郎

本書は、顧客に価値を届けるプロダクトを作り出すプロダクトマネジメントについて学ぶ本です。プロダクトマネジメントを理解することで、企業がビジネス目標を達成しながら、顧客の課題を解決する方法を解説します。はじめにプロダクトマネージャーの役割と責任を定義し、優れた意思決定を促す戦略の立て方を紹介します。実験と最適化によって作るべきプロダクトを決めるプロセスを解説し、最後にプロダクト主導の組織を支えるための文化や方針を紹介します。ビルドトラップを避け、顧客の課題にフォーカスするプロダクトマネジメントの原則を解説する本書は、規模の大小を問わずすべてのプロダクトチーム、マネージャー、プログラマ、アーキテクト、デザイナ、マーケターに必携の一冊です。

book

大規模データ管理 ―エンタープライズアーキテクチャのベストプラクティス

by Piethein Strengholt, 村上 列

データ管理と統合が急速に進化する中、複雑で緊密に結合したアーキテクチャから、現代のビジネスに対応できる、より柔軟なデータアーキテクチャへの移行が求められます。 本書は、変化が激しい時代でも長期的に持続可能な方法で大規模なデータ管理を行い、さまざまなユースケースに対応できる統合アーキテクチャを紹介します。この統合アーキテクチャを構成する、膨大なデータ利用に向けた「読み出し専用データストアアーキテクチャ」、リアルタイムなアプリケーションのための「APIアーキテクチャ」、大容量のスループットを実現する「ストリーミングアーキテクチャ」を詳述します。また技術開発、法規制、プライバシーに関する懸念など、データ管理全体を説明し、データガバナンスとセキュリティ、マスターデータ管理、セルフサービスとデータマーケットプレイス、メタデータの重要性について解説します。 企業のデータ戦略にかかわる本書は、アーキテクトはもちろん、経営者、ガバナンスチーム、データ分析・エンジニアリングチーム必携の一冊です。

book

行動を変えるデザイン ―心理学と行動経済学をプロダクトデザインに活用する

by Stephen Wendel, 武山 政直, 相島 雅樹, 反中 望, 松村 草也

深津貴之氏推薦!「行動経済学、データ分析、サービス設計のエッセンスが高度に統合された行動変容デザインの良書です」 本書は、行動経済学と心理学をもとに、人々の行動、日常習慣を変える“行動変容”を促すプロダクトをデザインするための書籍です。主にヘルスケア(健康管理)、金融(資産管理)など、これまでITプロダクト(サービス、アプリなど)がなかなか使われてこなかった分野を対象に、ユーザーがやりたいと思っていたものの実行できなかった行動の実現を助けるプロダクトを作り出すための、実践的な視点や知識を提供します。

book

詳説 イーサネット 第2版

by Charles E. Spurgeon, Joann Zimmerman, 三浦 史光, 豊沢 聡

イーサネット技術についての解説書。本書では、ファーストイーサネットやギガビットイーサネットなどの従来技術だけでなく、10ギガ、40ギガ、100ギガビットなど最新のイーサネット仕様を詳しく解説します。また、全二重イーサネット、オートネゴシエーション、Power over Ethernet、Energy Efficient Ethernet、構造化ケーブリングシステム、スイッチを用いたネットワークの設計、ネットワーク管理、ネットワークのトラブルシューティングのテクニックなども解説します。ネットワークの設計、監視、保守、障害時対応までを網羅し、信頼性の高いネットワークの構築を支援します。