読みやすいコードのガイドライン -持続可能なソフトウェア開発のために
書籍情報
発売日 : 2022年10月22日
著者/編集 : 石川 宗寿
出版社 : 技術評論社
発行形態 : 単行本
書籍説明
内容紹介
読みやすく、理解しやすいコードの答えは、目的や時代によって千差万別で、1つのアプローチではカバーしきれません。どんな状況にも対応するために必要なのは、可読性について体系的に理解を深めることです。
目次
はじめに
■■■第1章 可読性の高いコードを書くために
■■1-1 生産性への恩恵
■1-1-1 開発の規模と生産性の関係
■1-1-2 可読性を高めるための環境と評価体制
■■1-2 可読性の高いコードを書くための要件
■1-2-1 可読性に関連する指標
■1-2-2 可読性を高める取り組み方
■■1-3 代表的なプログラミング原則
■1-3-1 ボーイスカウトルール
■1-3-2 YAGNI
■1-3-3 KISS
■1-3-4 単一責任の原則
■1-3-5 早計な最適化は諸悪の根源
■■1-4 まとめ
■■■第2章 命名
■■2-1 命名に使う文法
■2-1-1 名詞または名詞句
■2-1-2 命令文
■2-1-3 その他の文法
■2-1-4 なぜ文法を無視した命名がされるのか
■■2-2 名前の示す内容
■2-2-1 例:引数の名前
■2-2-2 例:関数の名前
■2-2-3 例外:抽象メソッド
■■2-3 単語の選択
■2-3-1 曖昧性の少ない単語を選ぶ
■2-3-2 紛らわしい省略語を避ける
■2-3-3 単位を型で示す
■2-3-4 肯定的な単語を用いる
■■2-4 言語・プラットフォーム・プロダクトの規約
■■2-5 まとめ
■■■第3章 コメント
■■3-1 コメントの種類と目的
■■3-2 ドキュメンテーション
■3-2-1 アンチパターン
■3-2-2 ドキュメンテーションの構成
■3-2-3 ドキュメンテーションの要約
■3-2-4 ドキュメンテーションの詳細
■■3-3 非形式的なコメント
■3-3-1 大きなコードの分割
■3-3-2 非直感的なコードの説明
■■3-4 まとめ
■■■第4章 状態
■■4-1 可変の値の方が有用なケース
■■4-2 複数の変数間の直交性
■4-2-1 直交の定義
■4-2-2 手法:関数への置き換え
■4-2-3 手法:直和型での置き換え
■■4-3 状態遷移の設計
■4-3-1 不変性
■4-3-2 冪等性
■4-3-3 非巡回
■■4-4 まとめ
■■■第5章 関数
■■5-1 関数の責任
■5-1-1 責任の分割の基本方針
■5-1-2 コマンドとクエリの分離
■■5-2 関数の流れ
■5-2-1 定義指向プログラミング
■5-2-2 早期リターン
■5-2-3 操作対象による分割
■■5-3まとめ
■■■第6章 依存関係
■■6-1 依存関係の例
■■6-2 依存の強さ:結合度
■6-2-1 内容結合
■6-2-2 共通結合と外部結合
■6-2-3 制御結合
■6-2-4 スタンプ結合とデータ結合
■6-2-5 メッセージ結合
■■6-3 依存の方向
■6-3-1 呼び出し元→呼び出し先
■6-3-2 具体→抽象
■6-3-3 複雑・可変→単純・不変
■■6-4 依存の重複
■6-4-1 数珠つなぎの依存
■6-4-2 依存の集合の重複
■■6-5 依存の明示性
■6-5-1 アンチパターン1:過度な抽象化
■6-5-2 アンチパターン2:暗黙的な変域
■■6-6 まとめ
■■■第7章 コードレビュー
■■7-1 レビューイの注意点1:レビューしやすいプルリクエストを作る
■7-1-1 プルリクエストの目的の明示
■7-1-2 プルリクエストの分割
■7-1-3 コミットの構造化
■■7-2 レビューイの注意点2:コメントを適用する方法
■7-2-1 間違ったコメントや質問への対応
■7-2-2 提案の意図の理解
■7-2-3 他の部分への適用
■■7-3 レビューアの注意点1:レビュー実施時の基本原則
■7-3-1 レビュー依頼を放置しない
■7-3-2 問題のあるプルリクエストを拒否する
■7-3-3 締切を意識しない
■7-3-4 「提案」以外のコメントを考慮する
■■7-4 レビューアの注意点2:コメントの内容
■7-4-1 ケーススタディ
■■7-5まとめ
■■■付録 本書を読む上で必要となるKotlinの文法
■■■第1章 可読性の高いコードを書くために
■■1-1 生産性への恩恵
■1-1-1 開発の規模と生産性の関係
■1-1-2 可読性を高めるための環境と評価体制
■■1-2 可読性の高いコードを書くための要件
■1-2-1 可読性に関連する指標
■1-2-2 可読性を高める取り組み方
■■1-3 代表的なプログラミング原則
■1-3-1 ボーイスカウトルール
■1-3-2 YAGNI
■1-3-3 KISS
■1-3-4 単一責任の原則
■1-3-5 早計な最適化は諸悪の根源
■■1-4 まとめ
■■■第2章 命名
■■2-1 命名に使う文法
■2-1-1 名詞または名詞句
■2-1-2 命令文
■2-1-3 その他の文法
■2-1-4 なぜ文法を無視した命名がされるのか
■■2-2 名前の示す内容
■2-2-1 例:引数の名前
■2-2-2 例:関数の名前
■2-2-3 例外:抽象メソッド
■■2-3 単語の選択
■2-3-1 曖昧性の少ない単語を選ぶ
■2-3-2 紛らわしい省略語を避ける
■2-3-3 単位を型で示す
■2-3-4 肯定的な単語を用いる
■■2-4 言語・プラットフォーム・プロダクトの規約
■■2-5 まとめ
■■■第3章 コメント
■■3-1 コメントの種類と目的
■■3-2 ドキュメンテーション
■3-2-1 アンチパターン
■3-2-2 ドキュメンテーションの構成
■3-2-3 ドキュメンテーションの要約
■3-2-4 ドキュメンテーションの詳細
■■3-3 非形式的なコメント
■3-3-1 大きなコードの分割
■3-3-2 非直感的なコードの説明
■■3-4 まとめ
■■■第4章 状態
■■4-1 可変の値の方が有用なケース
■■4-2 複数の変数間の直交性
■4-2-1 直交の定義
■4-2-2 手法:関数への置き換え
■4-2-3 手法:直和型での置き換え
■■4-3 状態遷移の設計
■4-3-1 不変性
■4-3-2 冪等性
■4-3-3 非巡回
■■4-4 まとめ
■■■第5章 関数
■■5-1 関数の責任
■5-1-1 責任の分割の基本方針
■5-1-2 コマンドとクエリの分離
■■5-2 関数の流れ
■5-2-1 定義指向プログラミング
■5-2-2 早期リターン
■5-2-3 操作対象による分割
■■5-3まとめ
■■■第6章 依存関係
■■6-1 依存関係の例
■■6-2 依存の強さ:結合度
■6-2-1 内容結合
■6-2-2 共通結合と外部結合
■6-2-3 制御結合
■6-2-4 スタンプ結合とデータ結合
■6-2-5 メッセージ結合
■■6-3 依存の方向
■6-3-1 呼び出し元→呼び出し先
■6-3-2 具体→抽象
■6-3-3 複雑・可変→単純・不変
■■6-4 依存の重複
■6-4-1 数珠つなぎの依存
■6-4-2 依存の集合の重複
■■6-5 依存の明示性
■6-5-1 アンチパターン1:過度な抽象化
■6-5-2 アンチパターン2:暗黙的な変域
■■6-6 まとめ
■■■第7章 コードレビュー
■■7-1 レビューイの注意点1:レビューしやすいプルリクエストを作る
■7-1-1 プルリクエストの目的の明示
■7-1-2 プルリクエストの分割
■7-1-3 コミットの構造化
■■7-2 レビューイの注意点2:コメントを適用する方法
■7-2-1 間違ったコメントや質問への対応
■7-2-2 提案の意図の理解
■7-2-3 他の部分への適用
■■7-3 レビューアの注意点1:レビュー実施時の基本原則
■7-3-1 レビュー依頼を放置しない
■7-3-2 問題のあるプルリクエストを拒否する
■7-3-3 締切を意識しない
■7-3-4 「提案」以外のコメントを考慮する
■■7-4 レビューアの注意点2:コメントの内容
■7-4-1 ケーススタディ
■■7-5まとめ
■■■付録 本書を読む上で必要となるKotlinの文法
著者情報
石川 宗寿
LINE株式会社 LINE Platform Developmentセンター2 モバイルエクスペリエンス開発室 ディベロッパーエクスペリエンス開発チーム所属。シニアソフトウェアエンジニアとして、コミュニケーションアプリ"LINE"のAndroid版の開発に従事。"LINE"のソースコードの可読性向上のため、自らリファクタリング・コードレビューをする他、可読性にかかわる開発文化や基盤の構築、教育・採用プロセスの改善なども行う。
石川, 宗寿