Ruby on Rails 5アプリケーションプログラミング

[表紙]Ruby on Rails 5アプリケーションプログラミング

紙版発売
電子版発売

B5変形判/608ページ

定価3,960円(本体3,600円+税10%)

ISBN 978-4-7741-8883-6

本書の新版が発行されています。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

Ruby on Railsの定番解説書が,大幅改訂して最新バージョン5に対応! MVCに則ったWebアプリケーションフレームワークの最新版「Ruby on Rails 5」を対象に,Scaffolding機能から,ビュー/モデル/コントローラ開発,ルーティング,テスト,クライアントサイド開発まで,Railsの主要機能を徹底解説しています。クライアント開発で必要となるCoffeeScriptやSCSS,バージョン4以降の新機能であるActive Jobにも対応しているので,最新技術を取り入れたWebアプリケーション開発にも柔軟に対応できます!

こんな方におすすめ

  • Ruby on Railsを利用したWebアプリケーション開発に興味のある人
  • 最新技術を利用したWebアプリケーションを設計・開発したい人

目次

導入編
第1章 イントロダクション

1.1 Railsというフレームワーク

  • 1.1.1 アプリケーションフレームワークとは
  • 1.1.2 フレームワーク導入の利点
  • 1.1.3 Rubyで利用可能なフレームワーク

1.2 Railsを利用するための環境設定

  • 1.2.1 Railsプログラミングに必要なソフトウェア
  • 1.2.2 Windowsにおける環境設定の手順
  • 1.2.3 Linuxにおける環境設定の手順
  • 1.2.4 サンプルの配置方法(Windows/Linux共通)

第2章 Ruby on Railsの基本

2.1 アプリの作成

2.2 コントローラーの基本

  • 2.2.1 コントローラークラスの作成
  • 2.2.2 コントローラークラスの基本構文
  • 2.2.3 ルーティングの基礎を理解する
  • 2.2.4 サンプルの実行
  • 2.2.5 補足:コントローラーの命名規則

2.3 ビューの基本

  • 2.3.1 テンプレート変数の設定
  • 2.3.2 テンプレートファイルの作成
  • 2.3.3 サンプルの実行
  • 2.3.4 補足:共通レイアウトの適用
  • 2.3.5 補足:コメント構文

2.4 モデルの基本

  • 2.4.1 O/Rマッパーとは?
  • 2.4.2 データベース接続の設定
  • 2.4.3 モデルクラスの作成
  • 2.4.4 マイグレーションファイルによるテーブルの作成
  • 2.4.5 フィクスチャによるテストデータの準備
  • 2.4.6 補足:データベースクライアントの起動
  • 2.4.7 データ取得の基本
  • 2.4.8 補足:アプリの実行環境を指定する

2.5 Railsの設定情報

  • 2.5.1 主な設定ファイルの配置
  • 2.5.2 利用可能な主な設定パラメーター
  • 2.5.3 アプリ固有の設定を定義する

第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 外部リソースのパスを取得する ― xxxxx_pathメソッド

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 部分テンプレートにレイアウトを適用する ― パーシャルレイアウト
  • 4.8.4 コレクションに繰り返し部分テンプレートを適用する ― 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 条件式を論理和で結合する ― orメソッド
  • 5.2.7 データを並べ替える ― orderメソッド
  • 5.2.8 ソート式を上書きする ― reorderメソッド
  • 5.2.9 取得列を明示的に指定する ― selectメソッド
  • 5.2.10 重複のないレコードを取得する ― distinctメソッド
  • 5.2.11 特定範囲のレコードだけを取得する ― limit/offsetメソッド
  • 5.2.12 先頭/末尾のレコードを取得する ― first/lastメソッド
  • 5.2.13 データを集計する ― groupメソッド
  • 5.2.14 集計結果をもとにデータを絞り込む ― havingメソッド
  • 5.2.15 条件句を破壊的に代入する ― where!メソッド
  • 5.2.16 クエリメソッドによる条件式を除去する ― unscopeメソッド
  • 5.2.17 空の結果セットを取得する ― 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 列挙型のフィールドを定義する ― Active Record enums
  • 5.4.8 補足:その他の更新系メソッド

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 関連するモデルと結合する(左外部結合) ― left_outer_joinsメソッド
  • 5.6.11 関連するモデルをまとめて取得する ― 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 空のコンテンツを出力する ― headメソッド
  • 6.2.4 処理をリダイレクトする ― redirect_toメソッド
  • 6.2.5 直前のページにリダイレクトする ― redirect_backメソッド
  • 6.2.6 ファイルの内容を出力する ― send_fileメソッド
  • 6.2.7 バイナリデータを出力する ― send_dataメソッド
  • 6.2.8 補足:ログを出力する ― loggerオブジェクト

6.3 HTML以外のレスポンス処理

  • 6.3.1 モデルの内容をXML/JSON形式で出力する
  • 6.3.2 テンプレート経由でJSON/XMLデータを生成する ― JBuilder/Builder
  • 6.3.3 マルチフォーマット出力に対応する ― 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 デバイス単位でビューを振り分ける ― Action Pack Variants
  • 6.6.5 独自のフラッシュメッセージを追加する ― add_flash_typesメソッド
  • 6.6.6 補足:共通ロジックをモジュールにまとめる ― 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.1.1 Railsアプリのテスト
  • 8.1.2 テストの準備

8.2 Unitテスト

  • 8.2.1 Unitテストの基本
  • 8.2.2 Unit テストの具体例
  • 8.2.3 テストの準備と後始末 ― setup/teardownメソッド

8.3 Functionalテスト

  • 8.3.1 Functionalテストの準備
  • 8.3.2 Functionalテストの基本
  • 8.3.3 Functionalテストで利用できるAssertionメソッド

8.4 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 制御構文
  • 9.3.6 関数
  • 9.3.7 オブジェクト指向構文
  • 9.3.8 補足:即時関数

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 コメント

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を無効にする

第10章 Railsの高度な機能

10.1 電子メールを送信する ― Action Mailer

  • 10.1.1 Action Mailerを利用する準備
  • 10.1.2 メール送信の基本
  • 10.1.3 複数フォーマットでのメール配信
  • 10.1.4 メールをプレビューする
  • 10.1.5 メール送信前に任意の処理を実行する ― インターセプター
  • 10.1.6 メーラーのUnitテスト

10.2 時間のかかる処理を非同期実行する ― Active Job

  • 10.2.1 Active Jobを利用する準備
  • 10.2.2 ジョブ実行の基本
  • 10.2.3 ジョブ実行のカスタマイズ
  • 10.2.4 ジョブの登録/実行の前後で処理を実行する ― コールバック
  • 10.2.5 ジョブのUnitテスト

10.3 キャッシュ機能の実装

  • 10.3.1 キャッシュを利用する場合の準備
  • 10.3.2 フラグメントキャッシュの基本
  • 10.3.3 フラグメントキャッシュを複数ページで共有する
  • 10.3.4 モデルをもとにキャッシュキーを決める
  • 10.3.5 指定の条件に応じてキャッシュを有効にする
  • 10.3.6 キャッシュの格納先を変更する

10.4 アプリの国際化対応 ― I18n API

  • 10.4.1 国際化対応アプリの全体像
  • 10.4.2 国際化対応の基本的な手順
  • 10.4.3 ロケールを動的に設定する方法 ― ApplicationController
  • 10.4.4 辞書ファイルのさまざまな配置と記法
  • 10.4.5 Rails標準の翻訳情報を追加する
  • 10.4.6 ビューヘルパーtの各種オプション

10.5 Railsの機能拡張

  • 10.5.1 Rails 5で利用できるライブラリ
  • 10.5.2 ページング機能を実装する ― will_paginate

10.6 本番環境への移行

  • 10.6.1 Nginx+Puma環境への配置
  • 10.6.2 Heroku環境への配置