Head First Rails
――頭とからだで覚えるRailsの基本

[cover photo]
  • 2010年01月 発行
  • 464ページ
  • ISBN978-4-87311-438-5
  • フォーマット Print PDF
  • 原書: Head First Rails, First Edition

オライリー・ジャパンで書籍を購入:
定価4,104円

Ebook Storeで電子版を購入:
価格3,283円

本書は、これからRailsを学ぶ人、さらに深くRailsとWebアプリケーションプログラミングを理解したい人のための本です。イラストや写真を使って、楽しくRailsの仕組みを解説します。他にもショートストーリーやパズルなど、読者の集中力を切らせないさまざまな工夫を凝らしており、無理なく学習することができます。楽しくて、読み進めることが苦痛にならない本書を読了する頃には、Webアプリケーションを自力で作れるようになるはずです。

関連書籍

Head Firstソフトウェア開発
Head Rush Ajax
実践 Rails
初めてのRuby

序章
    本書の対象読者
    あなたは今、こう考えているはずです
    メタ認知――「考えること」について考える
    脳に言うことを聞かせる方法
    注意事項
    レビューチーム
    謝辞


1章 さあ始めよう
    このアプリケーションには機能がたくさん
    このアプリに必要なものは何?
    Railsはチケット販売システムのようなデータベースアプリ開発に最適
    railsコマンドで、アプリケーションを新規作成
    デフォルトのアプリにコードを追加
    Scaffoldはコードを「生成」する
    データベースには、テーブルが作成されていない!
    migrationを実行してテーブルを作成
    やった!親友はクビにならずに済みました!
    アプリケーション変更のために、アーキテクチャの内部を探る
    アプリケーションの 3つのパート  model、view、controller
    Railsの真実
    3種類のコードは、それぞれ「別の」フォルダに格納される
    編集すべきは、 VIEWのファイル
    アプリケーションが保持すべき情報が増えた
    migrationはRubyスクリプト
    Railsは migrationを生成する
    migrationに「利口な」名前を与えると、 Railsがコードを書いてくれる
    migrationは、 rakeで実行する
    データベースの変更だけでは不十分

2章 scaffoldを超えて
    scaffoldで作成される機能が多すぎる
    まずは、 MeBayのモデルを生成して……
    ……次に、 rakeを使ってテーブルを作成する
    コントローラーはどうすればいい?
    ビューはページテンプレートを使って作成する
    ページテンプレートは HTMLを含む
    Railsに Webページの場所を伝えるのは routes
    ビューに、表示すべきデータがありません
    ページに表示すべきデータは?
    ビューに広告情報を送るのは、コントローラー
    Railsはレコードをオブジェクトに変える
    データはメモリにあり、 Webページはそれを参照できる
    問題発生――ユーザーは見たいページを探すことができない
    routesは、優先度に従って実行される
    ビューにデータを渡すには、コントローラーにもコードが必要
    indexページには、「すべてのレコード」のデータが要る
    Ad.allは、テーブルの全情報を一度に読み込む
    データは、配列と呼ばれるオブジェクトを返す
    配列は、番号付きの連続したオブジェクト
    eachメソッドですべての広告を読み込む
    配列のそれぞれの要素ごとに HTMLが必要
    Railsはページテンプレートを Rubyコードに変換する
    繰り返し処理は、スクリプトレットを使ってページテンプレートに追加できる
    eachで展開されたオブジェクトごとに、ページはリンクを 1つ生成する
    生成された HTMLはどんな感じ?
    ページテンプレートが 2つ……、それぞれのコードを変えるべき?
    MeBayから送られてきた静的コンテンツはどうすればいい?

3章 登録、更新、そして削除
    新しい広告を、サイトから直接投稿したい
    データベースのデータを公開するアプリの開発方法なら、すでにわかっている
    データの保存はデータの読込みと逆の流れになる
    データ送信のためのフォームと、データ保存のためのメソッドが必要
    フォームとオブジェクトの関係は?
    Railsはモデルオブジェクトと関連付けられたフォームを作成できる
    @adフォームオブジェクトを作成していなかった
    フォームオブジェクトは、フォームが表示される前に作成しなければならない
    フォーム用の adオブジェクトは、コントローラーのnewアクションで作成される
    各ページテンプレートは、対応するコントローラーのメソッドを持つようになった
    フォームはオブジェクトを送信しない。送信するのは「データ」だ
    Railsがデータを保存する前に、データをオブジェクトに変換しておかなくてはいけない
    コントローラーの createメソッドを段階的に見てみましょう
    コントローラーはレコードを保存する必要がある
    新しいページを作成せず、既存のページを使おう
    コントローラーのアクションは、どのようにして別のアクションページを表示すればよいのか?
    リダイレクトによって、コントローラーは表示するビューを指定できる
    広告が投稿された後に変更するには?
    更新は、新規作成とほどんど同じ…違いはわずか
    広告データを新しく作成するのではなく、既存データを検索する。新規登録するのではなく、更新する
    機能へのアクセスを制限する
    ……課題がもうひとつ −不要になった広告を削除する必要もある
    コードを自分で作成することで、 scaffoldよりも多くのことを実現できる

4章 データベースファインダ
    Rubyvilleフィットネスクラブで健康を維持しよう
    アプリケーションは、求められているものにかなり近い。だけど…
    scaffoldでアプリを作成し、修正しましょう
    検索機能を設計する
    始めにフォームを作成する
    検索機能のインターフェースを追加する
    特定のクライアントのレコードを見つける方法は?
    「client_name =検索文字列」に一致するレコードのみが必要
    すべての属性向けのファインダがある
    クライアント名またはトレーナー名のどちらかと一致するレコードを検索したい
    ファインダは、データベースクエリを発行する
    SQLクエリの中の条件部分を変更できる必要がある
    :conditionsでSQLを作ろう

5章 データの検証
    気をつけろ! ここには「よからぬ」データがある
    バリデーションのコードはモデルに記述する
    Railsでは、シンプルな妥当性確認にバリデータを使う
    バリデータのしくみ
    値が数値かどうかを確認しよう
    フォームにデータを入力しないユーザーがいる
    必須フィールドはどうやってチェックすればいい?
    バリデータはシンプルで効果的
    MeBayでおかしな現象が起きている
    バリデータは機能している。でもエラーが表示されない
    自分で作成した機能ではエラー処理のコードも自分で書かなくてはならない
    コントローラーがエラーの発生を知る必要がある
    ユーザーは明確なコミュニケーションを求めている
    MeBayのシステムは、とても快適に稼働しています

6章 「つながり」を作る
    ココナッツ航空から予約システムの依頼
    フライトと座席予約をつなぎ合わせなくてはなりません
    scaffoldで作られたものを見てみよう
    フライトのページに予約フォームと座席一覧が必要
    ページのコンテンツを別のファイルに分けるには?
    ERBはページを組み立てる
    予約フォームのパーシャルを作るには?
    パーシャルをテンプレートに含める
    パーシャルには座席が必要です!
    パーシャルにはローカル変数を渡すことができる
    座席一覧のパーシャルも必要
    ユーザーは間違ったフライトを予約してしまう
    関連はモデルを結び付ける
    関連を定義するには?
    荷物がたくさんあるときの問題
    自分でバリデータを書かなくてはいけません
    必要なのは、逆の関連
    システムは、ココナッツ航空で稼働を始めました。テイクオフ!

7章 Ajax
    ココナッツ航空に新たな依頼
    もっとも頻繁に変更されるのはページのどの部分?
    ブラウザは常にページ全体を更新するのでは?
    リクエストの発行に使える、ブラウザ以外のものとは?
    まず、 Ajaxライブラリを読み込む必要がある…
    ブラウザは更新のリクエストを求めている
    トブラウザには、絶えずリクエストを送信させ続けなくてはいけないの?
    ボタンのイベントを受け取るように、タイマーを受け取る
    Ajaxの真実
    突然ですが、独身パーティーで問題が発生しました
    フォームから Ajaxリクエストを作成しなければならない
    フォームを JavaScriptでコントロールする
    createメソッドを書き換える
    このコードによって、何が変わるのでしょうか?
    フライトの予約で問題が……
    わかっているのは、ページのある部分を一度にひとつだけ更新する方法だけ
    コントローラーで、 HTMLの代わりに JavaScriptを返すようにする
    で、 Railsは何を生成するの?
    どこにレスポンスを挿入するかを指示しなければ、レスポンスは実行される

8章 XMLといろいろな表現方法
    世界の山々を登ろう
    ユーザーはインターフェイスを気に入っていないのです!
    データを地図の上に
    新しいアクションを作成する
    新しいアクションは上手く動作しているようだけど……
    新しいページには……、地図が必要です!
    どんなコードが必要?
    コードが localhostでしか動作しない
    次に必要なのは地図データ
    生成する必要のあるものは何?
    モデルから XMLを生成
    モデルオブジェクトは XMLを生成できる
    コントローラーのコードはどうなる?
    登山者はウェブサイトも欲しい
    XMLだけではなく、 HTMLも生成しなければ
    XMLと HTMLはどちらも表現形式
    どのフォーマットを使うかを判断する基準は?
    地図ページのしくみ
    本番環境での稼働の準備ができた
    RSSフィードは単なる XML
    アクション「 news」を作成する
    XMLの構造を変更しなければならない
    新たなタイプのテンプレート、 XMLビルダーを使う
    ページにフィードを追加しましょう
    この世の頂点にいるような気分!

9章 RESTとAjax
    インシデント、多すぎ!
    地図にはもっと詳しい情報を載せられる
    Ajaxで、地図の機能を拡張できる
    インデックスページはどうなる?
    showアクションが生成すべきものは?
    新機能は成功!
    ここでも Ajaxでリクエストを発行すればよい
    地図パーシャルには newアクションも指定できるようになっている
    インシデントが登録されたことを「証明」するには?
    ポップアップの <div>にあるコンテンツを更新する
    雪崩だ!
    今はどうなっているの?
    ポップアップウィンドウには Editリンクを追加できる
    editアクションの修正から着手しよう
    showページには新しいリンクが要る
    link_toの使い方は?
    レスキューへの Ajaxリンク
    ルートが違っていた!
    HTTPメソッドが、ルートの選択に影響していた
    HTTPメソッドって何?
    Head First Climbersを、もっとよいアプリに!

10章 現実世界のアプリケーション
    Rubyをいろいろ「試してみよう」!
    ウェブアプリにもテストが必要
    どんなテストが利用できるの?
    本番環境へ
    データベースを変更するには?
    RESTって何?
    道を踏み外してしまったウェブアプリ
    最先端を行く
    もっと多くの情報を得る
    読み物をいくつか……
    関連トピックの Head Firstシリーズ
    Railsvilleよ、さようなら……

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]