目次
まえがき
第I部 Rubyプログラミングの基礎的な原則
第1章 組み込みクラスを最大限に活用する
1.1 いつ組み込みクラスを使うべきか
1.2 true、false、nilを活用する
1.3 用途に応じて数値型を使い分ける
1.4 シンボルと文字列の違いを理解する
1.5 配列、ハッシュ、セット(集合)を使い分ける
1.6 Structを活用する(Structはもっと評価されるべき)
1.7 まとめ
1.8 復習問題
1.9 もっと詳しく学ぶには
第2章 役に立つ独自クラスを設計する
2.1 いつ独自クラスを定義すべきか
2.2 SOLID 原則のトレードオフ
2.3 大きなクラスか、多くのクラスか
2.4 独自データ構造の使いどころ
2.5 まとめ
2.6 復習問題
第3章 変数を適切に使う
3.1 ローカル変数:Rubyで大活躍の変数
3.2 インスタンス変数を活用する
3.3 定数も単なる変数である
3.4 クラス変数を置き換える
3.5 基本的に、グローバル変数は避ける
3.6 まとめ
3.7 復習問題
3.8 もっと詳しく学ぶには
第4章 メソッドと引数
4.1 クラスメソッドはない。あるのはインスタンスメソッドだけ
4.2 メソッドの命名
4.3 メソッド引数を使いこなす
4.4 メソッドの可視性は重要である
4.5 委譲の扱い方
4.6 まとめ
4.7 復習問題
第5章 エラーに対処する
5.1 戻り値によるエラー処理
5.2 例外によるエラー処理
5.3 一時的なエラーを再試行する
5.4 例外クラス階層の設計
5.5 まとめ
5.6 復習問題
第6章 コードを読みやすくフォーマットする
6.1 コードフォーマットにまつわる見解の違い
6.2 構文の一貫性とメンテナンス容易性
6.3 恣意的な制限の末路
6.4 Ruby自体で基本的なコードフォーマットを検査する
6.5 コードのフォーマットで本当に大切なこと
6.6 まとめ
6.7 復習問題
第II部 Rubyのライブラリプログラミングの原則
第7章 自分のライブラリを設計する
7.1 ユーザーエクスペリエンスを重視する
7.2 ライブラリの適切な規模を見極める
7.3 メソッド設計の複雑性のトレードオフ
7.4 まとめ
7.5 復習問題
第8章 ライブラリを拡張可能にする
8.1 Rubyが提供する拡張性関連の機能
8.2 プラグインシステムを設計する
8.3 「グローバルでは不変、ローカルでは可変」
8.4 まとめ
8.5 復習問題
第9章 時宜にかなったメタプログラミング
9.1 抽象化の利点と欠点
9.2 冗長なコードを削減する
9.3 2つのメタプログラミング手法
9.4 method_missingのわきまえ
9.5 まとめ
9.6 復習問題
第10章 役に立つドメイン特化言語を設計する
10.1 独自のDSLを設計する
10.2 独自のDSLを実装する
10.3 DSLの使いどころ
10.4 まとめ
10.5 復習問題
第11章 きちんとコードが動くことをテストする
11.1 なぜそんなにもRubyではテストが重要なのか
11.2 さまざまなテスト手法
11.3 テストをどこまで複雑にするか
11.4 さまざまなレベルでのテスト
11.5 カバレッジ100%に意味はない
11.6 まとめ
11.7 復習問題
第12章 変更に対処する
12.1 リファクタリングする理由
12.2 リファクタリングの進め方
12.3 よく使われるRubyのリファクタリング技法
12.4 機能追加のためのリファクタリング
12.5 機能を適切に削除する
12.6 まとめ
12.7 復習問題
第13章 代表的なデザインパターンを使う
13.1 Rubyに組み込まれているデザインパターン
13.2 「1つだけあればよい」に対処する
13.3 「何もない」を扱う
13.4 Visitor パターン
13.5 Adapter パターンとStrategy パターン
13.6 まとめ
13.7 復習問題
第14章 ライブラリを最適化する
14.1 最適化の必要がなさそうなコードを把握する
14.2 プロファイリングが先、最適化は後
14.3 存在しないコードより速いコードは存在しない
14.4 何もかもが遅い場合の対処法
14.5 まとめ
14.6 復習問題
第III部 Rubyのウェブプログラミングの原則
第15章 データベースが鍵を握る
15.1 なぜそんなにもデータベース設計が重要なのか
15.2 採用するデータベースを決める
15.3 最も重要なデータベース設計の原則
15.4 データベースは単なるデータ置き場ではない
15.5 モデル層を選ぶ
15.6 データベースとモデルのエラー処理
15.7 まとめ
15.8 もっと詳しく学ぶには
15.9 復習問題
第16章 ウェブアプリケーション設計の原則
16.1 クライアントサイド中心の設計とサーバーサイド中心の設計
16.2 ウェブフレームワークの選定
16.3 URLパスの設計
16.4 モノリス、マイクロサービス、アイランドチェーン
16.5 まとめ
16.6 復習問題
第17章 堅牢なウェブアプリケーションのセキュリティ
17.1 Ruby のウェブアプリケーションにおけるセキュリティ上の問題は、ほとんどが高レイヤのもの
17.2 入力を信用してはならない
17.3 可能な限りの高レイヤでアクセスを制御する
17.4 インジェクション対策
17.5 高いセキュリティが求められる環境に向けた取り組み
17.6 まとめ
17.7 復習問題
付録A 復習問題の回答例
索引