書籍転載について
本コーナーは、技術評論社発行の書籍『Ruby on Rails 4アプリケーションプログラミング』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。
『Ruby on Rails 4アプリケーションプログラミング』の詳細や購入は技術評論社のサイトをご覧ください。
MVCフレームワークとして人気のあるRuby on Railsは,Rubyを活用してREST原則に基づくWebアプリケーションを手軽に開発できる点が大きな特徴です。本書では,最新のRuby on Rails 4を対象に,Ruby on Railsの基本から,MVCモデルに則ったWebアプリ開発,ルーティングやテストの方法のほか,クライアントサイド開発としてAsset PipelineやCoffeeScript,SCSS,Ajaxなどの最新技術も網羅します。また,キャッシュ機能,国際化対応,Bundleによる機能拡張や,本番環境としてHerokuなどのPaaSへ導入する方法なども解説します。
導入編
第1章 イントロダクション
1.1 Railsというフレームワーク
1.1.1 アプリケーションフレームワークとは
1.1.2 フレームワーク導入の利点
1.1.3 Rubyで利用可能なフレームワーク【2014年4月15日公開】
第2章 Ruby on Railsの基本
2.1 アプリケーションの作成【2014年4月25日公開】
2.2 コントローラの基本
2.2.1 コントローラクラスの作成
2.2.2 コントローラクラスの基本構文
2.2.3 ルーティングの基礎を理解する
2.2.4 サンプルの実行
2.2.5 補足:コントローラの命名規則【2014年4月30日公開】
2.3 ビューの基本
2.3.1 テンプレート変数の設定
2.3.2 テンプレートファイルの作成
2.3.3 補足:共通レイアウトの適用
2.3.4 補足:コメント構文【2014年5月7日公開】
2.5 Railsの設定情報
2.5.1 主な設定ファイルの配置
2.5.2 利用可能な主な設定パラメータ
2.5.3 アプリケーション固有の設定を定義する【2014年5月20日公開】
第3章 Scaffolding機能によるRails開発の基礎
3.1 Scaffolding機能によるアプリケーション開発
3.1.1 Scaffolding開発の手順
3.1.2 自動生成されたルートを確認する - resourcesメソッド
3.2 一覧画面の作成(indexアクション)
3.2.1 indexアクションメソッド
3.2.2 index.html.erbテンプレート
3.3 詳細画面の作成(showアクション)
3.3.1 showアクションメソッド
3.3.2 show.html.erbテンプレート
3.4 新規登録画面の作成(new/createアクション)
3.4.1 new.html.erbテンプレートファイル
3.4.2 new/createアクションメソッド
3.5 編集画面の作成(edit/updateアクション)
3.5.1 edit/updateアクションメソッド
3.5.2 edit.html.erbテンプレートファイル
3.6 削除機能の確認(destroyアクション)
3.7 準備: 本書で使用するデータベース
3.7.1 データベースの構造
3.7.2 データベースの準備
基本編
第4章 ビュー開発
4.1 フォーム関連のビューヘルパー
4.1.1 フォーム生成の基礎
4.1.2 汎用的なフォームを出力する - form_tagメソッド
4.1.3 モデル編集のためのフォームを生成する(1) - form_tagメソッド
4.1.4 モデル編集のためのフォームを生成する(2) - form_forメソッド
4.1.5 <input>,<textarea>要素を生成する - xxxxx _field,text_area,radio_button,check_boxメソッド
4.1.6 HTML5対応の<input>要素を生成する - xxxxx _fieldメソッド(2)
4.1.7 選択ボックス/リストボックスを生成する - selectメソッド
4.1.8 データベースの情報をもとに選択肢を生成する - collection_selectメソッド
4.1.9 選択ボックスの選択肢をグループ化する - grouped_collection_selectメソッド
4.1.10 モデルと関連付かない選択ボックスを生成する - select_tagメソッド
4.1.11 日付/時刻選択のための選択ボックスを生成する - xxxxx_selectメソッド
4.1.12 データベースの情報をもとにラジオボタン/チェックボックスを生成する - collection_radio_buttons/collection_check_boxesメソッド
4.1.13 その他のフォーム系ヘルパー
4.2 文字列/数値関連のビューヘルパー
4.2.1 改行文字を<p>,<br>タグで置き換える - simple_formatメソッド
4.2.2 文字列を指定桁で切り捨てる - truncateメソッド
4.2.3 文字列から特定の部分のみを抜粋する - excerptメソッド
4.2.4 テーブルやリストの背景色をn行おきに変更する - cycleメソッド
4.2.5 特定のキーワードをハイライト表示する - highlightメソッド
4.2.6 スクリプトブロックの中に出力コードを埋め込む - concatメソッド
4.2.7 文字列をHTMLエスケープする - h / rawメソッド
4.2.8 文字列からタグを除去する - sanitizeメソッド
4.2.9 文字列を整形する - sprintfメソッド
4.2.10 数値をさまざまな形式で加工する - number_xxxxxメソッド
4.2.11 日付データを整形する - strftimeメソッド
4.3 リンク関連のビューヘルパー
4.3.1 ハイパーリンクを生成する - link_toメソッド
4.3.2 ルート定義から動的にURLを生成する - url_forメソッド
4.3.3 条件に応じてリンクを生成する - link_to_if/link_to_unlessメソッド
4.3.4 現在のページの場合はリンクを無効にする - link_to_unless_currentメソッド
4.3.5 メールアドレスへのリンクを生成する - mail_toメソッド
4.4 外部リソース指定のためのビューヘルパー
4.4.1 イメージタグを生成する - image_tagメソッド
4.4.2 音声,動画をブラウザで再生する - audio_tag/video_tagメソッド
4.4.3 ブラウザのフィード検出機能を有効にする - auto_discovery_link_tagメソッド
4.4.4 サイトのFaviconを定義する - favicon_link_tagメソッド
4.4.5 外部リソースのパスを取得する - path_to_xxxxx メソッド
4.5 その他のビューヘルパー
4.5.1 構造化データをダンプ出力する - debugメソッド
4.5.2 出力結果を変数に格納する - captureメソッド
4.5.3 本体を持たない任意のタグを生成する - tagメソッド
4.5.4 本体を持つ任意のタグを生成する - content_tagメソッド
4.6 ビューヘルパーの自作
4.6.1 シンプルなビューヘルパー
4.6.2 HTML文字列を返すビューヘルパー
4.6.3 本体を持つビューヘルパー
4.7 アプリケーション共通のデザインを定義する - レイアウト
4.7.1 レイアウトを適用するさまざまな方法
4.7.2 ページ単位にタイトルを変更する
4.7.3 レイアウトに複数のコンテンツ領域を設置する
4.7.4 レイアウトを入れ子に配置する
4.8 テンプレートの一部をページ間で共有する - 部分テンプレート
4.8.1 部分テンプレートの基本
4.8.2 部分テンプレートにパラメータを引き渡す
4.8.3 コレクションに繰り返し部分テンプレートを適用する - collectionオプション
第5章 モデル開発
5.1 データ取得の基本 - findメソッド
5.1.1 主キー列による検索
5.1.2 任意のキー列による検索 - find_byメソッド
5.2 より複雑な条件での検索を行う - クエリメソッド
5.2.1 クエリメソッドの基礎
5.2.2 基本的な条件式を設定する - whereメソッド
5.2.3 プレイスホルダによる条件式の生成 - whereメソッド(2)
5.2.4 名前付きパラメータと名前なしパラメータ
5.2.5 否定の条件式を表す - notメソッド
5.2.6 データを並べ替える - orderメソッド
5.2.7 ソート式を上書きする - reorderメソッド
5.2.8 取得列を明示的に指定する - selectメソッド
5.2.9 重複のないレコードを取得する - distinctメソッド
5.2.10 特定範囲のレコードだけを取得する - limit/offsetメソッド
5.2.11 先頭/末尾のレコードを取得するには - first/lastメソッド
5.2.12 データを集計する - groupメソッド
5.2.13 集計結果をもとにデータを絞り込む - havingメソッド
5.2.14 条件句を破壊的に代入する - where!メソッド
5.2.15 クエリメソッドによる条件式を除去する - unscopeメソッド
5.2.16 空の結果セットを取得する - noneメソッド
5.3 データ取得のためのその他のメソッド
5.3.1 指定列の配列を取得する - pluckメソッド
5.3.2 データの存在を確認する - exists?メソッド
5.3.3 よく利用する条件句をあらかじめ準備する - 名前付きスコープ
5.3.4 デフォルトのスコープを定義する - default_scopeメソッド
5.3.5 検索結果の行数を取得する - countメソッド
5.3.6 特定条件に合致するレコードの平均や最大/最小を求める
5.3.7 生のSQL命令を直接指定する - find_by_sqlメソッド
5.4 レコードの登録/更新/削除
5.4.1 複数のレコードをまとめて更新する - update_allメソッド
5.4.2 レコードを削除する - destroy / deleteメソッド
5.4.3 複数のレコードをまとめて削除する - destroy_allメソッド
5.4.4 トランザクション処理を実装する - transactionメソッド
5.4.5 補足:トランザクション分離レベルを指定する
5.4.6 オプティミスティック同時実行制御
5.4.7 補足:その他の更新系メソッド
5.5 検証機能の実装
5.5.1 Active Modelで利用できる検証機能
5.5.2 検証機能の基本
5.5.3 その他の検証クラス
5.5.4 検証クラス共通のパラメータ
5.5.5 自作検証クラスの定義
5.5.6 データベースに関連づかないモデルを定義する - ActiveModel::Modelモジュール
5.6 アソシエーションによる複数テーブルの処理
5.6.1 リレーションシップと命名規則
5.6.2 参照元テーブルから被参照テーブルの情報にアクセスする - belongs_toアソシエーション
5.6.3 1:nの関係を表現する - has_manyアソシエーション
5.6.4 1:1の関係を表現する - has_oneアソシエーション
5.6.5 m:nの関係を表現する(1) - has_and_belongs_to_manyアソシエーション
5.6.6 m:nの関係を表現する(2) - has_many throughアソシエーション
5.6.7 アソシエーションによって追加されるメソッド
5.6.8 アソシエーションで利用できるオプション
5.6.9 関連するモデルと結合する - joinsメソッド
5.6.10 関連するモデルをまとめて取得する - includesメソッド
5.7 コールバック
5.7.1 利用可能なコールバックと実行タイミング
5.7.2 コールバック実装の基本
5.7.3 コールバックのさまざまな定義方法
5.8 マイグレーション
5.8.1 マイグレーションのしくみ
5.8.2 マイグレーションファイルの構造
5.8.3 マイグレーションファイルの作成
5.8.4 マイグレーションファイルで利用できる主なメソッド
5.8.5 マイグレーションファイルの実行
5.8.6 リバーシブルなマイグレーションファイル
5.8.7 スキーマファイルによるデータベースの再構築
5.8.8 データの初期化
第6章 コントローラ開発
6.1 リクエスト情報
6.1.1 リクエスト情報を取得する - paramsメソッド
6.1.2 マスアサインメント脆弱性を回避する - StrongParameters
6.1.3 リクエストヘッダを取得する - headersメソッド
6.1.4 リクエストヘッダやサーバ環境変数を取得するための専用メソッド
6.1.5 ファイルをアップロードする(1) - ファイルシステムへの保存
6.1.6 ファイルをアップロードする(2) - データベースへの保存
6.2 レスポンスの操作
6.2.1 テンプレートファイルを呼び出す - renderメソッド(1)
6.2.2 レスポンスをインラインで設定する - renderメソッド(2)
6.2.3 空のコンテンツを出力する - render&headメソッド
6.2.4 処理をリダイレクトする - redirect_toメソッド
6.2.5 ファイルの内容を出力する - send_fileメソッド
6.2.6 バイナリデータを出力する - send_dataメソッド
6.2.7 補足:ログを出力する - loggerオブジェクト
6.3 HTML以外のレスポンス処理
6.3.1 モデルの内容をXML/JSON形式で出力する
6.3.2 テンプレート経由でJSON/XMLデータを生成する - JBuilder/Builder
6.3.3 補足:Rubyスクリプトの結果を出力する - Rubyテンプレート
6.3.4 マルチフォーマット出力に対応する - respond_toメソッド
6.4 状態管理
6.4.1 クッキーを取得/設定する - cookiesメソッド
6.4.2 補足:永続化クッキー,暗号化クッキー
6.4.3 セッションを利用する - sessionメソッド
6.4.4 フラッシュを利用する - flashメソッド
6.5 フィルタ
6.5.1 アクションの事前/事後に処理を実行する - before/afterフィルタ
6.5.2 アクションの前後で処理を実行する - aroundフィルタ
6.5.3 フィルタの適用範囲をカスタマイズする
6.5.4 例:フィルタによる基本認証の実装
6.5.5 例:フィルタによるフォーム認証の実装
6.6 アプリケーション共通の挙動を定義する - Applicationコントローラ
6.6.1 共通フィルタの定義 - ログイン機能の実装
6.6.2 共通的な例外処理をまとめる - rescue_fromメソッド
6.6.3 クロスサイトリクエストフォージェリ対策を行う - protect_from_forgeryメソッド
6.6.4 独自のフラッシュメッセージを追加する - add_flash_typesメソッド
6.6.5 補足:共通ロジックをモジュールにまとめる - concernsフォルダ
応用編
第7章 ルーティング
7.1 RESTfulインターフェイスとは
7.1.1 RESTfulインターフェイスを定義する - resourcesメソッド
7.1.2 単一のリソースを定義する - resourceメソッド
7.1.3 補足:ルート定義を確認する
7.2 RESTfulインターフェイスのカスタマイズ
7.2.1 ルートパラメータの制約条件 - constraintsオプション
7.2.2 より複雑な制約条件の設定 - 制約クラスの定義
7.2.3 formatパラメータを除去する - formatオプション
7.2.4 コントローラクラス/Urlヘルパーの名前を修正する - controllers/asオプション
7.2.5 モジュール配下のコントローラをマッピングする - namespace/scopeブロック
7.2.6 RESTfulインターフェイスに自前のアクションを追加する - collection/memberブロック
7.2.7 RESTfulインターフェイスのアクションを無効化する - only/exceptオプション
7.2.8 階層構造を持ったリソースを表現する - resourcesメソッドのネスト
7.2.9 リソースの「浅い」ネストを表現する - shallowオプション
7.2.10 ルート定義を再利用可能にする - concernメソッド&concernsオプション
7.3 非RESTfulなルートの定義
7.3.1 非RESTfulルートの基本 - matchメソッド
7.3.2 さまざまな非RESTful ルートの表現
7.3.3 ルートへのマッピングを定義する - rootメソッド
第8章 テスト
8.1 テストとは
8.2 テストの準備
8.2.1 テストデータベースの構築
8.2.2 テストデータを準備する
8.3 Unitテスト
8.3.1 Unitテストの基本
8.3.2 Unitテストの具体例
8.3.3 テストの準備と後始末 - setup/teardownメソッド
8.4 Functionalテスト
8.4.1 Functionalテストの基本
8.4.2 Functionalテストで利用できるAssertionメソッド
8.5 Integrationテスト
第9章 クライアントサイド開発
9.1 JavaScript/スタイルシートのインポート
9.1.1 マニフェストの基本
9.2 Asset Pipeline
9.2.1 Asset Pipelineのしくみ
9.2.2 実行環境による挙動の違い
9.2.3 Asset Pipelineの挙動を制御する
9.3 CoffeeScript
9.3.1 CoffeeScriptの基本
9.3.2 CoffeeScriptの基本構文
9.3.3 変数とリテラル表現
9.3.4 演算子
9.3.5 制御構文【2014年5月27日公開】
9.3.6 関数
9.3.7 オブジェクト指向構文
9.3.8 補足:即時関数【2014年6月3日公開】
9.4 Sass(SCSS)
9.4.1 SCSSの基本
9.4.2 スタイル定義のネスト
9.4.3 変数
9.4.4 演算子
9.4.5 関数
9.4.6 ディレクティブ
9.4.7 コメント【2014年6月10日公開】
9.5 Ajax開発
9.5.1 Ajaxの基礎知識
9.5.2 Ajax対応のハイパーリンクを生成する - link_toメソッド
9.5.3 補足:更新コンテンツの生成は部分テンプレートで
9.5.4 Ajax対応のフォームを生成する - form_tag/form_forメソッド
9.5.5 Ajax通信でJSONデータを利用する
9.5.6 補足:Ajax呼び出しの際に進捗メッセージを表示する
9.5.7 Slideshare APIを利用する
9.6 Turbolinks
9.6.1 Turbolinksのしくみ
9.6.2 Turbolinksの落とし穴
9.6.3 Turbolinksを無効にする
9.6.4 リンク単位でTurbolinksを無効にする
第10章 Railsの高度な機能
10.1 電子メールを送信する - Action Mailer
10.1.1 Action Mailerを利用する準備
10.1.2 メール送信の基本
10.1.3 複数フォーマットでのメール配信
10.1.4 メール送信前に任意の処理を実行する - インターセプタ
10.1.5 メーラーのUnitテスト
10.2 キャッシュ機能の実装
10.2.1 フラグメントキャッシュの基本
10.2.2 フラグメントキャッシュを複数ページで共有する
10.2.3 モデルをもとにキャッシュキーを決める
10.2.4 指定の条件に応じてキャッシュを有効にする
10.2.5 キャッシュの格納先を変更する
10.3 アプリケーションの国際化対応 - I18n API
10.3.1 国際化対応アプリケーションの全体像
10.3.2 国際化対応の基本的な手順
10.3.3 ロケールを動的に設定する方法 - ApplicationController
10.3.4 辞書ファイルのさまざまな配置と記法
10.3.5 Rails標準の翻訳情報を追加する
10.3.6 ビューヘルパーtの各種オプション
10.4 Rails の機能拡張
10.4.1 Rails 4で利用できるライブラリ
10.4.2 ページング機能を実装する - will_paginate
10.5 本番環境への移行
10.5.1 Apache+Passenger環境への配置
10.5.2 Heroku環境への配置【2014年6月10日公開】