パーフェクトRuby on Rails
技術評論社
著者:すがわらまさのり、前島真一、近藤宇智朗、橋立友宏
はじめに
Part 1 Rails ~ overview
1章 Ruby on Railsの概要
1-1 Railsを使う前に
Railsを使う環境を整える
gemコマンドとrakeコマンド
Bundlerでgemパ ツケージを束ねる
1-2 Railsの思想
CoC(Convention over Connguration)
DRY(Don’t Repeat Yourse)
REST(Representational State Transfer)
自動テスト
まとめ
1-3 Railsをはじめよう!!
Railsのインストール
プロジェクトのひな形を作成をする
プロジェクトのディレクトリ構成
COLUMN Windowsでrails serverを実行する際にエラーがでる場合
1-4 scaffoldを使ってRailsでの開発を体験しよう
generate scaffoldで開発をドライブする
データベースの変更をmigradonファイルで管理する
ルーティングの一元管理とRESTの思想
COLUMN Windows 8で ExecJS::RuntimeErrorのエラーが発生する場合
scaffoldで生成されたコントローラとルーティング
COLUMN PUT/DELETEメソッドについて
COLUMN PATCHメソッドについて
2章 Ruby on RailsとMVC
2-1 MVCアーキテクチャ
2-2 モデル
モデルとモデリング
ActiveRecordでモデルを実装する
モデルとCRUD
モデルを見つける
モデルを操作する
2-3 コントローラの役割
ブラウザからアプリケーションにアクセスした時の流れ
アクションコールバック
ルーティングとリソース
例外処理
StrongParametersとは
2-4 ビューの役割
レンダリングの仕組み
テンプレートエンジンの紹介
ヘルバーの利用
エスケープ処理
APIサーバにとつてのビューについて
2-5 MVCについてのまとめ
Part 2 実践テクニック
3章 アセット
3-1 Sprockets
Sprocketsの概要
アセットファイルのアクセスパスを管理する
コンパイルとAsset Pipeline
依存性の管理
マニフェストファイル
3-2 CoffeeScript
利用方法
CoffeeScriptの構文
3-3 Sass
利用方法
Sassの構文
Sassのまとめ
3-4 Turbolinks
Turbolinksの動作について
Turbolinksの利用方法と無効にする方法
Turbolinksを利用する時の注意点
COLUMN アセットのプリコンパイルとダイジェスト
4章 Railsのロードパスとレイヤーの定義方法
4-1 MVC以外の構成要素の扱い
libディレクトリ
新しいレイヤーの配置とオートローディング
4-2 レイヤーを追加するgemの例
モデルとビューを橋渡しするactive_decorator
Sidekiq
5章 開発を効率化するgem
5-1 サンプル用のRailsプロジェクトを用意する
5-2 PryをRailsのコンソールとして利用する
Pry-railsでPryを組み込む
Pryを使つてみる
pry-railsで追加されるコマンド
ステップ実行を行う
5-3 Hirbを使ってコンソール上のモデルの出力を整形する
Hirbを利用する
5-4 Better Errorsでエラー画面をよりリッチに表現する
better_errorsとbinding_of_caller
better_errorsを利用する
5-5 Springでコマンドを高速化する
Springとは
SPringを試す
Springサーバの起動・終了とその他のコマンド
5-6 rails-erdでモデルのER図を生成する
rails-erdを利用する準備
実際にER図を出力する
Part 3 実践Webアプリケーション開発
6章 Railsアプリケーション開発
6-1 イベント告知アプリケーションを作る
実装する主な仕様
ルーティングの仕様
6-2 アプリケーションの作成と下準備
rails newでアプリケーションの作成
独自のトップページを表示してみる
Bootstrapを導入
6-3 OAuthを利用して「Twitterでログイン」機能を作る
OAuthとは
Twitterアプリケーションの登録
Twitterアカウントでログインする機能の作成
6-4 イベントの登録機能を作る
タイムゾーンを設定する
イベント用のモデルを作成する
ログイン状態を管理する処理を作る
イベント登録用のフォームを作る
i18nの設定をする
6-5 イベントの閲覧機能を作る
イベント詳細ベージの作成
イベントー覧ベージの作成
COLUMN 名前重要
6-6 イベントの編集・削除機能を作る
イベント編集機能を作る
イベント削除機能を作る
6-7 登録されたイベントへの参加機能,参加キャンセル機能を作る
参加キャンセル機能を作る
イベント参加機能の作成
COLUMN N+1をどのように察知するか
イベント参加をキャンセルする機能の作成
6-8 退会機能を作る
退会用コントローラ、ビユー、ルーティングの作成
退会処理の作成
6-9 落穂ひろい
エラーハンドリング
COLUMN エラーの通知方法
6-10 gemで機能拡張をする
Kaminariでページネーション機能を作る
ransackでイベント検索機能を作る
carrierwaveで画像を添付する
アップロードにおけるその他の注意点
7章 Railsアプリケーションのテスト
7-1 なぜテストコードを書くのか
7-2 minitest/RSpec
minitestとは
RSpecとは
minitestとRSpecの比較
7-3 テストを実行するための環境を整える
RSpecのインストール
COLUMN テスト用のDBについて
7-4 モデルのテスト
ひな形の作成
モデルのテストを書く
shouldaを利用してバリデーションのテストを書く
fixture replacement
COLUMN RSpecのexpect記法とshould記法について
7-5 コントローラのテスト
ひな型の作成
コントローラのテストを書く
7-6 ビューのテスト
ひな形の作成
ビューのテストを書く
7-7 エンドツーエンドのテスト
エンドツーエンドのテストとは
capybaraのインストール
エンドツーエンドのテストを書く
7-8 JavaScriptのテスト
JavaScriptのテストをどのように行うか
COLUMN テストコードをどこまで書くか
poltergeistのインストール
JavaScriptを利用したエンドツーエンドテストを書く
7-9 TDDの考え方
TDDの概要
TDDでRailsに機能を追加する
7-10 CI(継続的インテグレーション)
Jenkins
Travis CI
7-11 カバレッジと静的解析
テストコードのカバレッジ
静的解析
8章 Railsのインフラと運用
8-1 はじめに ── DevOpsとは何か?
DevOpsの概要
DevOpsの背景
8-2 VagrantでローカルにVMを作る
ローカルに開発環境を構築する意味
COLUMN Windowsユーザの方へ
Vagrantの紹介
Vagrant経由でVMを立ち上げる
VMの設定を変更する
VagrantとChefを連携する
Chefを動かしてみる
ChefのレシピをVagrant上のVMに適用する
8-3 Chefを用いた本格的なサーバ構成管理
プロビジョニングについてのおさらい
Chef-soloについて
Chefの基本的な概念について
アプリケーシヨンの構成を考える
クックブックのひな形を作る
必要なソフトウェアを既存レシピでセットアップする
カスタムレシビを作る
実際のサーバ上にレシピを適用するには
8-4 デプロイをする
デプロイ前の下準備
Capistranoの紹介
Capistranoのインストール
CapiStranoの設定
CapiStranoのマルチステージ
Capistranoのプラグイン機構
Capistranoのフローとフック
8-5 New Relicによるアプリケーションの監視
New Relicの紹介
New Relicで何を計測するか
サービスの健康状態を測定する
アプリケーションの異常を通知する
その他運用に使えるサービス/ライブラリの紹介
8-6 serverspecとインフラのテスト
serverspecとは何か
テスト駆動インフラとインフラCI
8-7 終わりに
Part 4 一歩先行くRails
9章 より実践的なモデルの使い方
9-1 アーキテクチャパターンから見るRails
ドメインモデルとアクティブレコード
アクティブレコードパターンとは
ActiveRecordの落とし穴とそれを回避する方法
9-2 複雑なバリデーションとコールバックを整理する
コールバックをクラスに分離する
バリデーションをクラスに分離する
どういつた場合にクラスを分離するか
別のクラスに分離する以外の方法
9-3 DBに依存しないモデルを作るActiveModel
ActiveModelが提供する機能
9-4 値オブジェクト
エンティティと値オブジエクト
その文字列は本当に単なる文字列か?
composed_of
9-5 Concern
Concern
Concernとは
ActiveSupport::Concern
Module#concerning
コントローラとルーティングにおけるConcern
9-6 サービスクラス
サービスクラスの特徴
サービスクラスの実装
サービスクラスを利用する際の注意点
9-7 終わりに
COLUMN 単一テーブル継承について
10章 Railsを拡張する
10-1 Railsを支えるgemたち
Railsの拡張の仕方の分類
10-2 Rack Middlewareを作る
Rackという概念について
Rack Middlewareを触ってみる
RailsとRack
RailsでRack Middlewareを使うには
Rack Middlewareを本格的に作る
有名なRack Middlewareの紹介
10-3 プラグインを作る – Railtieについて
Railtieとは何か
Railtie型プラグインを作ってみる
その他のRailtieの機能
Engine型プラグインを作る
Mountable Engine型プラグインについて
10-4 終わりに
オープンソースヘの貢献
gemを世界に公開すること
ソーシャルコーディングの世界
付録 仮想マシンの構築とRubyのインストール方法
A-1 Ubuntu DesktopをVirtualBox上にインストールする
仮想マシンの作成
Ubuntuのインストール
ディスプレイの解像度を調整する
COLUMN Windowsで開発を進めるためには?
RubyやRailsで必要なライブラリをインストールする
A-2 rbenvを使ってRubyをインストールする
Rubyのインストール
索引
著者紹介