エンタープライズ Rails

―企業ユーザのためのWebアプリケーション設計術

[cover photo]
TOPICS
Programming , Web , Ruby
発行年月日
PRINT LENGTH
340
ISBN
978-4-87311-416-3
原書
Enterprise Rails
FORMAT
PDF
Ebook
3,520円
Ebookを購入する

Ruby on Railsによるエンタープライズアプリケーション開発のための書籍です。本書ではRuby on Railsが省みることのなかった価値観のひとつであるデータ中心のアプローチに取り組み、これをRailsへと統合する方法を示しています。Railsが得意とするWebアプリケーションに、エンタープライズ分野で培われてきた安定したデータ基盤の構築ノウハウを取り込んでいます。また、そこから一歩進んで、Webサービスによる分散システムの構築や統合というテーマも扱っています。
エンタープライズ開発のエッセンスが詰め込まれた本書は、開発現場のアーキテクトおよびプログラマ必携の一冊です。

目次

監訳者まえがき
はじめに

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 運用とレポート

5章 堅牢なデータモデルの構築
    5.1 映画のチケット
        5.1.1 簡単なものから始める
        5.1.2 制約
        5.1.3 神話の打破
        5.1.4 参照整合性
        5.1.5 インデックスの導入

6章 第3正規形へのリファクタリング
    6.1 第3正規形
        6.1.1 タイミングが重要
    6.2 リファクタリング:継承とミックスイン
    6.3 練習問題
    6.4 リファクタリングのステップ

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 複数カラムのリファクタリング

9章 トリガーを使って複雑な関係を保証する
    9.1 トリガーによる制約チェック
        9.1.1 PL/pgSQL関数の解剖

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 リファクタリング

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

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の使われ方


18章 RESTful Webサービス
    18.1 問題のスコープ
        18.1.1 ツール
    18.2 MoviesWebService
        18.2.1  リソースサーバの実装
        18.2.2 アクションサーバの実装
        18.2.3 クライアントの実装

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 フラグメントキャッシュ、アクションキャッシュ、ページキャッシュ

索引