エンタープライズ Rails ――企業ユーザのためのWebアプリケーション設計術 (Dan Chak)
書籍情報
- 著者:Dan Chak(著), 高井直人(監訳), 笹井崇司(訳)
- 発行日:2009-07-23
- ISBN:9784873114163
- URL:https://www.oreilly.co.jp/books/9784873114163/
書籍目次
- 監訳者まえがき
- はじめに
- 1章 全体像
- 1.1 エンタープライズとは何か?
- 1.2 ゆっくりと成長する
- 1.3 すべての部品を理解する
- 1.3.1 永続化層
- 1.3.2 アプリケーション層
- 1.3.3 キャッシュ層
- 1.3.4 メッセージングシステム
- 1.3.5 Webサーバ
- 1.3.6 ファイアウォール
- 2章 プラグインによる構成
- 2.1 利点
- 2.2 自分のプラグインを書く
- 2.2.1 コアの機能追加
- 2.2.2 カスタム拡張
- 2.3 デプロイメント
- 2.3.1 svn:externals
- 3章 モジュールによる構成
- 3.1 ファイルとディレクトリ
- 3.2 名前空間のためのモジュール境界
- 3.2.1 モジュール間でのActiveRecordの連携
- 3.2.2 双方向関連
- 3.2.3 モジュールはサービスの予兆
- 3.2.4 ロード順序を適切にする
- 3.3 練習問題
- 3.4 リファクタリング
- 3.4.1 高度なモジュールリファクタリング
- 3.4.2 ユーティリティメソッドを解きほぐす
- 4章 砦としてのデータベース
- 4.1 データベースもアプリケーション
- 4.1.1 「すべてを支配している1つのフレームワークだ」
- 4.1.2 「私の会社では今まで誰もバグを書いたことがない」
- 4.1.3 「このRailsアプリケーションはこの世でたった1つのアプリケーションだ」
- 4.2 巨人の肩に乗る
- 4.2.1 正しいRDBMSを選択する
- 4.2.2 マイグレーションにおける注意事項
- 4.2.3 神話を打破する
- 4.3 運用とレポート
- 4.1 データベースもアプリケーション
- 5章 堅牢なデータモデルの構築
- 5.1 映画のチケット
- 5.1.1 簡単なものから始める
- 5.1.2 制約
- 5.1.3 神話の打破
- 5.1.4 参照整合性
- 5.1.5 インデックスの導入
- 5.1 映画のチケット
- 6章 第3正規形へのリファクタリング
- 6.1 第3正規形
- 6.1.1 タイミングが重要
- 6.2 リファクタリング:継承とミックスイン
- 6.3 練習問題
- 6.4 リファクタリングのステップ
- 6.1 第3正規形
- 7章 ドメインデータ
- 7.1 郵便番号を扱う
- 7.2 ドメインテーブルを使ったStrategyパターン
- 7.3 初日からリファクタリング
- 8章 複合キーとドメインキー正規形
- 8.1 なぜ複合自然キーが重要なのか?
- 8.1.1 複合キーを見つける
- 8.2 肩に乗って……
- 8.2.1 ドメインキー正規形に移行する
- 8.2.2 Railsで複合キーを使う
- 8.2.3 遅延可能な外部キー制約
- 8.2.4 トレードオフを理解する
- 8.3 練習問題
- 8.4 リファクタリング
- 8.4.1 単一カラムのリファクタリング
- 8.4.2 複数カラムのリファクタリング
- 8.1 なぜ複合自然キーが重要なのか?
- 9章 トリガーを使って複雑な関係を保証する
- 9.1 トリガーによる制約チェック
- 9.1.1 PL/pgSQL関数の解剖
- 9.1 トリガーによる制約チェック
- 10章 多重テーブル継承
- 10.1 問題
- 10.2 ポリモーフィズムとは
- 10.3 継承と永続化
- 10.3.1 単一テーブル継承
- 10.3.2 多重テーブル継承
- 10.3.3 カラムにおけるXOR
- 10.3.4 Railsにおける洗練されたMTI
- 10.4 Factoryクラス
- 10.5 練習問題
- 10.6 リファクタリング
- 10.6.1 STIのリファクタリング
- 10.6.2 polymorphic => trueのリファクタリング
- 11章 View-Backedモデル
- 11.1 データベースビュー
- 11.1.1 ビューの作成
- 11.2 ビューに基づいたモデルを作る
- 11.3 検討
- 11.3.1 挿入、更新、削除
- 11.3.2 参照と制約
- 11.3.3 インデックス
- 11.4 練習問題
- 11.5 リファクタリング
- 11.1 データベースビュー
- 12章 マテリアライズドビュー
- 12.1 マテリアライズドビューの原則
- 12.2 マテリアライズするべきビュー
- 12.2.1 形式化する
- 12.3 ターゲットテーブル
- 12.4 リフレッシュ関数と無効化関数
- 12.4.1 時間への依存
- 12.4.2 誰が代償を払うのか?
- 12.5 リフレッシュと無効化を起動する
- 12.5.1 映画のショータイム
- 12.6 調停者ビューを使って実装を隠蔽する
- 12.6.1 定期的なリフレッシュ
- 12.7 キャッシュインデックス
- 12.8 結果
- 12.9 入れ子になったキャッシュ
- 12.10 練習問題
- 13章 SOA入門
- 13.1 SOAとは何か?
- 13.2 なぜSOAなのか?
- 13.2.1 共有リソース
- 13.2.2 データベース負荷を軽減する
- 13.2.3 スケーラビリティⅡ:キャッシュはやっかい
- 13.2.4 ローカルの複雑さを軽減する
- 13.2.5 まとめ
- 13.3 練習問題
- 14章 SOAの検討
- 14.1 サービスの検討
- 14.1.1 実装の詳細を隠蔽する
- 14.1.2 APIはアクセス可能
- 14.2 API設計のベストプラクティス
- 14.2.1 必要なものをすべて送る
- 14.2.2 ラウンドトリップを制限する
- 14.2.3 並列化の機会を探す
- 14.2.4 できるだけ送らない
- 14.3 REST 対 XML-RPC 対 SOAP
- 14.3.1 XML-RPC
- 14.3.2 SOAP
- 14.1 サービスの検討
- 15章 XML-RPCサービス
- 15.1 ActionWebServiceとRails 2.0
- 15.2 抽象化の壁作り
- 15.2.1 物理モデル層としてのActiveRecord
- 15.2.2 オブジェクトモデル層
- 15.2.3 APIの定義
- 15.3 さらなるテスト
- 15.4 クライアントプラグイン
- 15.4.1 共有コード
- 15.4.2 クライアントSingleton
- 15.4.3 インテグレーションテスト
- 16章 サービスへのリファクタリング
- 16.1 注文サービス
- 16.2 MoviesServiceとの統合
- 16.2.1 注文の検討
- 16.3 MoviesServiceオブジェクトモデル
- 16.4 すべてをまとめる
- 17章 REST入門
- 17.1 RESTの基礎
- 17.1.1 リソースと動詞
- 17.1.2 ハードウェアもアプリケーションの一部
- 17.2 RESTをSOAにマッピングする
- 17.2.1 CRUDへのマッピング
- 17.2.2 異なるクライアントに1つのインタフェース
- 17.2.3 HTTP+POX
- 17.2.4 サービス契約の定義
- 17.2.5 RubyにおけるRESTクライアント
- 17.2.6 意図されていたWebの使われ方
- 17.1 RESTの基礎
- 18章 RESTful Webサービス
- 18.1 問題のスコープ
- 18.1.1 ツール
- 18.2 MoviesWebService
- 18.2.1 リソースサーバの実装
- 18.2.2 アクションサーバの実装
- 18.2.3 クライアントの実装
- 18.1 問題のスコープ
- 19章 エンドツーエンドのキャッシュ
- 19.1 データ層のキャッシュをもう一度
- 19.1.1 スナップショット
- 19.1.2 リフレッシュ関数
- 19.1.3 無効化トリガー
- 19.1.4 インデックス
- 19.2 論理モデルのキャッシュ
- 19.2.1 検討
- 19.2.2 古くなったデータによる再構築を避ける
- 19.2.3 キャッシュインデックス
- 19.3 その他のキャッシュ
- 19.3.1 クエリ実行計画のキャッシュ
- 19.3.2 データベースクエリのキャッシュ
- 19.3.3 Railsのクエリキャッシュ
- 19.3.4 フラグメントキャッシュ、アクションキャッシュ、ページキャッシュ
- 19.1 データ層のキャッシュをもう一度
- 索引