• 検索結果がありません。

RailsによるアジャイルWebアプリケーション開発 第4版

N/A
N/A
Protected

Academic year: 2021

シェア "RailsによるアジャイルWebアプリケーション開発 第4版"

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)
(2)

Original English language title:

Agile Web Development with Rails, Fourth Edition

by Sam Ruby, Dave Thomas, David Heinemmeier Hansson, et al.

Copyright ©2011 The Pragmatic Programmers LLC. Translation Copyright ©2011 Ohmsha, Ltd.

All rights reserved.

No part of this book may be reproduced, stored in a retrieval system, or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of the publisher.

本書を発行するにあたって、内容に誤りのないようできる限りの注意を払いましたが、本書の内容を適用した結果生じた こと、また、適用できなかった結果について、著者、出版社とも一切の責任を負いませんのでご了承ください。 本書に掲載されている会社名・製品名は一般に各社の登録商標または商標です。 本書は、「著作権法」によって、著作権等の権利が保護されている著作物です。本書の複製権・翻訳権・上映権・譲渡権・ 公衆送信権(送信可能化権を含む)は著作権者が保有しています。本書の全部または一部につき、無断で転載、複写複製、電 子的装置への入力等をされると、著作権等の侵害となる場合がありますので、ご注意ください。 本書の無断複写は、著作権法上の制限事項を除き、禁じられています。本書の複写複製を希望される場合は、そのつど事 前に下記へ連絡して許諾を得てください。

• オーム社開発部「RailsによるアジャイルWebアプリケーション開発 第4版」係宛、E-mail(kaihatu@ohmsha.co.jp) または書状、FAX(03-3293-2825)にて

(3)

監訳者序文

本書の日本語版の第3版が出版されたのは2年ほど前のことですが、その監訳者序文には次のよ うに書かれています。 「……日本語版では、現時点の最新バージョンであるRails 2.3を訳注などでフォローしています。 しかしひょっとしたら、あなたが本書を手にするころにはもうRails 3がリリースされていて、この 本の多くの情報は過去のものになっているかもしれません。」 この心配は現実のものとなり、出版から1年も経たないうちにRails 3.0が正式にリリースされ、 第3版の記述は古いものになってしまいました。もちろん、第3版の監訳者序文にも書いたように、 本書の魅力はRailsの基本的な考え方をわかりやすく伝えていることにありますので、意味がなく なってしまったわけではありませんが、これからRails 3でRailsによる開発を始めようとしている 人にとっては戸惑いを与えてしまったかもしれません。 本書では、現時点の最新版であるRails 3.1に対応しています。実は、翻訳作業を始めた時点では、 原書もまだRails 3.0を対応バージョンとしていました。ところが、作業中にRails 3.1が正式にリ リースされ、それを受けて原書の電子版が急遽Rails 3.1に対応することになりました。現時点でも 原書の印刷製本版はまだRails 3.1に対応していませんし、Rails 3.1自体がまだ枯れていないので はないかという心配もありましたが、なるべく最新の情報をお伝えしたほうがよいと判断しました。

また、Rails 3.1対応に合わせて、Ruby 1.9にも対応しています。Ruby 1.8の開発はすでにメン テナンスモードに入っており、バグ修正しか行われません。また、Ruby 2.0の開発も始まっており、 Ruby 1.9は安定期に入っています。Depotアプリケーションを作成するチュートリアルもRuby 1.9 を前提としていますので、この機会にぜひRuby 1.9を使ってみてください。 最後に、本書のレビューに多大なるご協力をいただいた、artonさん、大場光一郎さん、大場寧子 さん、角谷信太郎さん、喜多川豪さん、高井直人さん、高橋征義さん、竹内信人さん、橋本将さん、 松田明さん、諸橋恭介さん、やまだあきらさんにこの場を借りて感謝します。 2011年11月 前 田 修 吾 iii

(4)
(5)

4

版に寄せて

Daveが第3版を共同執筆しないかと言ってきたとき、私はひどく興奮しました。何しろ私が Railsについて学んだその本が、第1版の初刷だったからです。Daveと私には共通点も多くありま す。彼はEmacsとMac OS X好きで、私はどちらかといえばVimとUbuntu派ですが、私たちは どちらもコマンドラインやコードを打ち込むのが大好きです。まず具体的な例から始め、面倒な理 論に突っ込むのはそのあとです。 第3版が出版されてから(もっと言えば、初版、第2版、第3版が出たあとで)多くの変更が行 われました。現在Railsには大幅な修正が行われており、その多くは内部的な変更です。以前の例 で使用していた多くの機能がまず非推奨になり、その後に削除されました。新しい機能が追加され、 また多くの経験の集積によってRailsを使ううえでのベストプラクティスも明らかになってきまし た。現在ではRailsはRuby 1.9上でも動作します。本書に登場する例はRuby 1.8.7とRuby 1.9.2 でテストしました。 またRailsは、人気のフレームワークという存在から大きく成長し、アクティブで活気のあるエコ システムとなりました。人気のある多くのプラグインを備え、密接な統合が可能なサードパーティ ツールもあります。こうして主流のフレームワークとなったRailsは、ますます多様な開発者の注 目を集めています。 こうした流れを受けて、本書も構成を見直すことになりました。Railsを始める人の多くはRuby を学んだことがありません。そこで、Ruby入門の部分を付録から第I部の章へと格上げしました。 続く第II部では、実際のアプリケーションの開発をステップバイステップで進めていきますが、そ の内容も現在のベストプラクティスに重点を置いて更新し、無駄を省きました。 しかし、いちばん大きく変わったのは第III部です。Railsのエコシステムは、規模の点でも変化 のスピードの点でも全体を解説することが現実的ではなくなりました。そこで第III部は、全体像の 概要を解説することに重点を置きました。ここを読めば、Railsフレームワーク自体の範囲を越える 一般的なニーズに対応するためのプラグインや関連ツールについて、何を調べてどこを探せばよい のかがわかるはずです。 つまり本書も、再び変化に対応する必要があったのです。 March 2011 Sam Ruby v

(6)
(7)

本書の

Rails 3.1

対応について

本書はRails 3.1向けに書かれたものです。 Rails 3.1はマイナーリリースであり、メジャーな内部変更は少ないとも言われます。Rails 2.3.x からRails 3.0への変更に比べると、確かにそうです。しかし、ユーザから見える部分の変更も多々 含まれており、それは本書に影響します。そこでPragmatic Bookshelfのチームでは、それらの変 更を取り込んで本書をアップデートすることにしました。 大きな変更点は次のとおりです。 r 利用するRubyのバージョンに応じて生成されるコードが変わるようになりました。Ruby 1.9.2で導入された新しく明瞭なHashリテラルの構文が利用されます。テストの出力も異な る形でフォーマットされるようになります。 r Asset(素材)の管理がRailsのコアに組み込まれました。これにより多数のファイルを置く 場所が変わり、デプロイの際の手順も増えます。 r SCSSがデフォルトで有効になります。これによりスタイルシートの構文と構成方法が変わ ります。

r PrototypeおよびScript.aculo.usに代わってjQueryが利用されます。これにより第11章 「タスクF:Ajaxの追加」p.125のJavaScriptコードが変わります。 r CoffeeScriptがデフォルトで利用可能になります。これによりクライアントサイドスクリプ トの構文が変わります。 r マイグレーションのメソッドがクラスメソッドではなくなり、ほとんどの場合には、何もし なければ逆方向への適用が可能なものになります。 r レスポンスのデフォルトのシリアライズ方法がXMLではなくJSONになります。jという お手軽なビューのヘルパーが導入され、JSON(一般にはJavaScript)のレスポンスが簡単に 生成できるようになります。 r has_secure_passwordメソッドがモデルに追加され、ユーザパスワードのハッシュ化に使う 一般的な仕組みはこのメソッドでカプセル化、標準化されます。 r Rack::Cacheがプロダクション環境ではデフォルトで有効になります。

r mysqlgemがmysql2 gemに置き換わります。

さらなる詳細はリリースノート*1を参照してください。 本書に出てくる例を実行するには、第1章「Railsのインストール」p.3で説明するように、正し いバージョンのRailsがインストールされている必要があります。 p.xiv「本書の読み方」で説明するように、例をダウンロードして実行する場合は、rails31ディ レクトリにあるファイルを利用してください。 実行しているRailsのバージョンはrails -vコマンドで確認できます。 本 書 に 影 響 す る そ の 他 の Rails の 変 更 点 は http://www.pragprog.com/wikis/wiki/ ChangesToRailsにまとめてあります。 *1http://guides.rubyonrails.org/3_1_release_notes.html vii

(8)
(9)

謝辞

「書籍の改訂版なんて簡単に作れるだろう」と思われるかもしれません。「結局のところ、テキス トはすべて揃っているし、ここのコードを少し調整して、あそこの言い回しをちょっと変えれば出 来上がり」、そう思われているかもしれません……。 うまく言えないのですが、『RailsによるアジャイルWebアプリケーション開発』の各版を完成さ せるのは、初版と同じくらいに大変でした。Railsは絶え間なく進化しているので、そのたびに本書 も書き換えます。Depotアプリケーションの一部は何回か書き直し、その解説はすべて書き直しま した。RESTが重視されるようになったり、非推奨になったかつての最新技術を避けたりしたこと で、本書の構成も繰り返し変更されてきました。 そのため、RubyコミュニティとRailsコミュニティから多大な協力がなければ、本書を世に送り 出すことはできなかったでしょう。まずは、本書の草稿を正式にレビューしていただいた皆さんに は大変お世話になりました。

Jeremy Anderson, Ken Coar, Jeff Cohen, Joel Clermont, Geoff Drake, Pavan Gorakavi, Michael Jurewitz, Mikel Lindsaar, Paul Rayner, Martijn Reuvers, Doug Rhoten, Gary Sherman, Davanum Srinivas, Stefan Turalski, and José Valim

本書の各版はまずベータ版という形でリリースされました。つまり、初期バージョンをPDF形 式で公開し、その読者にオンラインによるコメントを求めました。意見やバグ報告は今回の版だけ で800件以上に達し、それらの大半を取り入れたことで、ベータ版のままとは比べものにならない ほど有用な本になりました。ベータ版のプログラムのサポートや有益なフィードバックをしてくだ さったすべての方に感謝します。なかでも一方ならぬご協力をいただいた皆さん、ありがとうござ いました。

Manuel E. Vidaurre Arenas, Seth Arnold, Will Bowlin, Andy Brice, Jason Catena, Victor Marius Costan, David Hadley, Jason Holloway, David Kapp, Trung LE, Kristian Riiber Mandrup, mltsy, Steve Nicholson, Jim Puls, Johnathan Ritzi, Leonel S, Kim Shrier, Don Smith, Joe Straitiff, and Martin Zoller

Railsコアチームの面々には、質問に答えていただいたりコード断片のチェックとバグを修正して いただいたりと、大変お世話になりました。皆さん、本当にありがとう。

Scott Barron (htonl), Jamis Buck (minam), Thomas Fuchs (madrobby), Jeremy Kemper (bitsweat), Yehuda Katz (wycats), Michael Koziarski (nzkoz), Marcel Molina Jr, (noradio), Rick Olson (technoweenie), Nicholas Seckar (Ulysses), Sam Stephenson (sam), Tobias Lütke (xal), José Valim (josevalim), and Florian Weber (csshsh)

March 2011

Sam Ruby rubys@intertwingly.net

(10)
(11)

はじめに

Ruby on Railsは、Webアプリケーションの開発、デプロイ、保守を容易にするフレームワーク です。Railsが最初にリリースされたときには、よくわからないオモチャと思われていました。し かし、それから数カ月後には世界的な現象になりました。もっと重要なことは、Railsがいわゆる Web 2.0アプリケーションの実装に最適なフレームワークと見なされるようになったことです。 なぜそうなったのでしょうか。

とにかく

Rails

は使いやすい

そもそも実に多くの開発者が、Webアプリケーションを作成するのに利用しているテクノロジに 不満を抱えていました。JavaにしろPHPにしろ.NETにしろ、バカバカしくてつらいだけの仕事 だという思いが広がっていたのです。そこへ突如として、もっと簡単なRailsがレール(Rails)に 乗ってやってきました。 しかし簡単なだけでは成功を収めることはできません。現実のWebサイトを作成しているプロ の開発者たちは、自分たちの作ったアプリケーションが時代遅れになるかも、なんていう心配をし たがらないものです。彼らが望むのは、現代的でプロフェッショナルなテクノロジを使って設計/ 実装しているという実感です。そういう開発者たちがRailsを使い込み、Railsが単にサイトをでっ ちあげるだけのツールではないと見抜いたのです。 例えば、あらゆるRailsアプリケーションはMVC(Model-View-Controller)アーキテクチャに基 づいて実装されます。Javaでよく使われるフレームワークのTapestryやStrutsなどもMVCに基 づいていますが、Railsではさらに徹底しています。動作するアプリケーションから始められて、 コードのピース(部品)ごとにプログラムを書く場所が決まっていて、しかもそれらすべてのピー ス同士を対話させる方法も標準で用意されています。 プロのプログラマはテストを作成しますが、Railsにはテストのためのフレームワークも用意さ れています。すべてのRailsアプリケーションに、テストのサポートが組み込まれているのです。 コードに新しい機能を追加すると、Railsは自動的にテストスタブを作成します。このフレームワー クによって、アプリケーションのテストは簡単になります。結果として、Railsアプリケーションは よくテストされる傾向があります。 Railsアプリケーションの記述には、現代的なオブジェクト指向スクリプト言語であるRubyを使 います。Rubyは簡潔です。といっても、コードが簡潔すぎて内容を理解できないという意味ではあ りません。アイデアを自然な形ですっきりとRubyのコードで表現できます。そのため、プログラ ムを書くのも読むのも実に簡単で、数カ月前に書いたプログラムでさえ楽に読めるのです。 RailsではRubyの機能を最大限に利用し、さらに斬新な方法で拡張してプログラマの負担を軽減 します。これにより、プログラムを短く、読みやすくできます。しかも、普通なら外部設定ファイ ルにやらせるようなタスクをコードの中で実行できます。ですから、何が起きているのかを把握す るのも実に簡単です。次に示すのは、あるプロジェクトのモデルクラスを定義したコードです。い まはまだ細部にこだわる必要はありません。まずは、わずか数行のコードにどれほど多くの情報が 込められているか考えてみてください。 xi

(12)

xii はじめに

class Project < ActiveRecord::Base belongs_to :portfolio

has_one :project_manager has_many :milestones

has_many :deliverables, through: milestones validates :name, :description, presence: true

validates :non_disclosure_agreement, acceptance: true

validates :short_name, uniqueness: true end

Railsを支える2つの哲学がコードを簡潔で読みやすいものにしています。DRYとConvention over Configuration(設定より規約)です。DRYはDon’t Repeat Yourself(繰り返しを避けよ)の略 です。これは、システムのあらゆるピースは、1か所にのみ記述されなければならないということ です。RailsではRubyのパワーを利用してこれを実践しています。Railsアプリケーションでは重 複はごくわずかしかありません。記述すべき箇所は1か所だけでいいのです。その箇所は、たいて いMVCアーキテクチャの規約が提案してくれます。あとはそこから先に進むだけです。簡単なス キーマの変更に、最低でも5∼6か所のコード変更が必要だったほかのWebフレームワークのプロ グラマにとっては、まさに天啓でした。

Convention over Configuration(設定より規約)も重要な概念です。これはつまり、あなたが自分 のアプリケーションを組み立てていくとき、たいていの場面ではRailsが適切なデフォルトの動作 を用意してくれているという意味です。規約に従っていくだけで、Railsアプリケーションを書くこ とができるのです。典型的なJavaのWebアプリケーションでXMLの設定をするコードより少な いコードで済んでしまいます。規約をいじる必要がある場合もRailsで簡単にオーバーライドでき ます。

ほかにもRailsを使っていて気づくことがあります。RailsはWebの新しいデファクトスタン ダードに追いつこうとしているのではありません。むしろ、それを定義しようとしているのです。 開発者は、RailsのコードにAjaxやRESTfulなインタフェースといった機能を簡単に統合できます。 それらのサポートはあらかじめRailsに組み込まれているのですから(AjaxやRESTインタフェー スについてよく知らなくても心配はいりません。これらについては、本書の中で説明します)。 開発者は、アプリケーションのデプロイにも気をつかうものです。Railsを使っていれば、次々と リリースされるアプリケーションを何台ものサーバにコマンドひとつでデプロイできます(あるリ リースに不備があった場合のアプリケーションのロールバックも、デプロイのときと同じくらい簡 単です)。 Railsは、実際に使われている商用のアプリケーションをもとに、そこから汎用性のある部分を取 り出すという方法で開発されました。まず特定のアプリケーションにおける中心テーマを見つけ、 そこから汎用性のあるコードの基盤を取り出してまとめていくのは、フレームワークを作るときの 最良の方法でしょう。あなたがRailsアプリケーションの開発をスタートするときには、すでにア プリケーションの半分は出来上がっているのです。 Railsの特長はこれだけではありません。言葉ではうまく説明できない良さがあります。感じても らうしかありません。実際にRailsアプリケーションを書いてみるまでは(せいぜい45分かそこら です)、とにかくこの本を信じてください。それでこの本の役割は半分終わったみたいなものです。

(13)

Rails Is Agile xiii

Rails Is Agile

本書のタイトルは『RailsによるアジャイルWebアプリケーション開発』(Agile Web Development with Rails)です。しかし、驚くかもしれませんが、Railsのアジャイルなコーディング手法をあれ これ取り立てて説明しているわけではありません。 その理由はシンプルかつ巧妙です。アジリティ(アジャイルであること)は、Railsの骨組みの一 部なのです。 ここで、優先度についての4つの宣言からなるアジャイル宣言*2に込められた価値について考え てみましょう。 r プロセスやツールよりも、人と人の対話を重視する r 分厚いドキュメントよりも、ちゃんと動くソフトウェアを作ることに専念する r 契約交渉よりも、顧客の協力を得ることに力を入れる r 計画を厳守することよりも、変化に対応することを優先する Railsでは、人と対話とがすべてです。重量級のツールセットはありません。複雑な設定もなけれ ば、難解なプロセスで迷うこともありません。あるのは、小さな開発者のグループと、彼らのお気 に入りのエディタ、そしてRubyコードの山だけです。このため、すべてがガラス張りです。開発 者が行った作業は、顧客の目に見える形で直ちに反映されます。これは本質的に対話的なプロセス です。 Railsではドキュメントを否定しているわけではありません。コードベース全体についてのHTML ドキュメントはとても簡単に作成できます。しかし、Railsの開発プロセスはドキュメント駆動では ありません。Railsプロジェクトの中心に陣取っているのは、500ページの仕様書ではなく、共同で ニーズを洗い出すユーザと開発者のグループ、そして、そのニーズに応えるための方法です。解決 策は、開発者とユーザの両者が問題の本質を理解していくにつれて変わっていきます。Railsでは、 開発サイクルの初期段階でちゃんと動作するソフトウェアを生み出すことができます。そのソフト ウェアはまだ荒削りなものかもしれませんが、それを見たユーザの頭の中には、開発者が生み出そ うとしているものの姿がおぼろげながら浮かんできます。 このように、Railsは顧客との協調を促進してくれます。Railsプロジェクトが変化に迅速に対応 できることを目の当たりにした顧客は、頼んだものができるだけでなく、本当に必要とされるもの が生まれようとしていることに気づき、開発チームを信頼してくれるようになります。そして、意 見の衝突だったものが「∼ならどうだろう」という意見の交換に変わるのです。 すべては、変化に対応するという考え方に結びついています。RailsではDRY原則が徹底的に (ほとんど強迫観念のように)守られていて、ほかのフレームワークよりもはるかに少ないコードを 書き換えるだけでRailsアプリケーションを変更できます。また、Railsアプリケーションはアイデ アを正確かつ簡潔に表現できるRubyで書かれているため、本当に必要な部分だけを簡単に書き換 えることができます。Railsではユニットテストと機能テストも非常に重視されています。テスト フィクスチャとテストスタブがサポートされており、これらがセーフティネットになって、変更を 加える開発者の作業を支援してくれます。テストを適切に行えるため、変更に神経をすり減らさな くて済みます。

(14)

xiv はじめに 本書では、Railsの開発プロセスを絶えずアジャイル宣言の原則に結びつけようとはしません。 むしろ、フレームワーク自体にアジャイル宣言の原則を語らせるように筆を進めることにします。 チュートリアルの章を読むときは、自分自身がWebアプリケーションを開発している状況―――あな たの隣に顧客がいて、問題の優先順位と解決方法を話し合いで決めているようす―――を想像してく ださい。第III部でRailsの仕組みをもっと詳しく学ぶときには、社交儀礼にとらわれず迅速に顧客 のニーズを満たすのにRailsの基本構造がどう役立つかを理解してください。 アジリティとRailsについて、最後に一言。プロフェッショナルらしからぬ言い方かもしれませ んが、コーディングってこんなに楽しいんだと感じてください。

本書の対象読者

本書は、Webベースのアプリケーションの構築とデプロイを手がけるプログラマを対象としてい ます。これには、Railsが初めて(あるいはRuby自体が初めて)という人だけでなく、基礎はすで に学んでいてもっとRailsを深く理解したいという人も含まれます。

HTML、CSS(Cascading Style Sheet)、JavaScriptについてはある程度知っていることを前提と します。つまり、Webページのソースを読める程度の知識が必要です。とはいえ、これら3つを熟 知している必要はありません。本書で示すコードをコピーアンドペーストできれば十分です(本書 のコードはすべてダウンロードできます)。

本書の読み方

本書の第I部は準備編です。ここが済むと、Ruby言語の基礎とRailsの概要がひととおりわかり ます。また、RubyとRailsの両方をインストールし、簡単なサンプルを使って動かしてみます。 第II部では、簡単なオンラインストアの構築を題材として、Railsの背景にある概念について学 んでいきます。ただし、「この章はモデルの説明、あの章はビューの説明、……」といったように、 Railsの各コンポーネントをひとつずつ取り上げていくわけではありません。各コンポーネントは連 携して動作するようになっています。第II部のそれぞれの章では、互いに関連する具体的なタスク に取り組みながら、いくつかのコンポーネントを組み合わせて使うことになります。 多くの読者は、本を読み進めながらアプリケーションを作成することを楽しんでいるようですが、 本書にはソースコードも用意してあります。大量のコードをわざわざ入力したくないという読者は ダウンロードしてください(ソースコードは、tarアーカイブまたはzipファイル形式で圧縮されて います)*3。ダウンロードしたものには、Rails 3.0用のコードとRails 3.1用のコードが含まれてい ます。必要になるであろうものはrails31ディレクトリにあります。詳しくはREADME-FIRSTを見 てください。

第III部「Rails詳説」p.241では、Railsのエコシステムの全体像を見ていきます。まずは、第II部 までで登場したRailsの機能についてもう少し詳しく取り上げます。そのあとで、Railsフレーム ワークが利用する主な依存コンポーネントについて説明します。これは、フレームワークの機能全 体に直接関係します。最後に、Railsフレームワークの機能を拡張する主なプラグインを紹介しま す。こうしたプラグインによって、Railsは単なるフレームワークではなくオープンなエコシステム

*3ダウンロードページのURLは、http://pragprog.com/titles/rails4/source_codeです。[訳注]オーム社のWebサイトhttp: //www.ohmsha.co.jp/data/link/978-4-274-06866-9/

(15)

本書の読み方 xv となっています。

次に、本書で使用している表記規則について説明します。

r Rubyに関するヒント

Railsアプリケーションを書くにはRubyの知識が必要ですが、本書でRubyとRailsの両方を同時に学習し

ようとしている読者も多いでしょう。そこで第4章「Ruby入門」p.37にRubyの簡単な解説を用意しまし た。Ruby固有の構文については、初出時にこの章への相互参照を示しています。例えば、唐突に:nameが 出てきたとして、これはRubyのシンボルなのですが、余白に目をやるとシンボルについての説明はp.38に :name ,→p.38 あるとわかります。 r コード例 この本で紹介するほとんどのコード例は、実際に動作する完全なアプリケーションから抜粋したもので、ダウ ンロードして取得できます。ダウンロードできるコードの抜粋には、次のようにパスを記載しています。 Icode/rails31/work/demo1/app/controllers/say_controller.rb class SayController < ApplicationController

I def hello I end def goodbye end end この本の電子書籍版をハイパーリンク対応のビューアで読んでいる読者は、コード上部に表示されるパスを クリックしてみてください。ブラウザのウィンドウにコードが表示されるはずです。ブラウザのなかには、 テンプレートを誤ってHTMLとして解釈するもの(Safariなど)もあります。そのようなときは、ページの ソースを表示して実際のソースコードを見てください。 また、既存のファイルを変更する場合にどの行を変更したらよいかわかりにくいようなケースでは、行の左 側に小さな三角形のマークが付けてあるので、それを目印に変更を行ってください。上のコードには、その ような箇所が2つあります。 r David曰く. . . この本を読み進めると、「David曰く. . .」というコラムを頻繁に目にするはずです。このコラムでは、Rails

の生みの親であるDavid Heinemeier Hanssonが、Railsの秘密(原理、コツ、推奨事項など)を解き明かし

ています。Railsのプロを目指している読者にとっては必見の情報です。 r Joeの疑問. . . Joeは架空の開発者です。ひょっこり姿を現しては、本文中で説明している事柄について質問を投げかけて きます。答はそのつど示しています。 本書は、Railsのリファレンスマニュアルではありません。筆者の経験からすると、リファレンス マニュアルを使って学習する人は多くありません。本書でモジュールやメソッドを紹介する場合は、 それらをどのように使いどのように組み合わせるかという観点から、例を示したりわかりやすく説 明したりしています。 また本書は、APIの膨大なリストを延々と記載しているわけでもありません。それには理由があ ります。Railsをインストールしさえすれば、ドキュメントは手に入るからです。そして、紙に印刷 された情報とは異なり、その情報は最新のものであるはずです。RubyGemsを使用してRailsをイ ンストールするのであれば(この方法を推奨)、Gemドキュメントサーバを起動(gem serverコマ ンドを実行)して、ブラウザにhttp://localhost:8808と指定するだけで、すべてのRails APIに アクセスできます。そのほかのドキュメントやガイドも、p.243で説明する方法で生成できます。

(16)

xvi はじめに さらにRailsでは、エラーを明確に特定できるレスポンスを生成してくれます。またトレース情報 により、エラーの発生した場所だけでなく、そこまで追跡する方法も示してくれます。図10.3p.115 に例があります。詳しく知りたい場合は、ログ記録の文を追加する方法を10.2節「イテレーション E2:エラー処理」p.116で確認してください。 行き詰まってしまった場合でも、多くのオンラインリソースが利用できます。前述したコード 集に加え、フォーラム*4で質問したり体験を共有したり、正誤ページ*5で誤りやバグを報告したり、 wiki*6で本書の自由課題について話し合ったりすることができます。 これらはいずれも共有リソースです。フォーラムやwikiでは、気軽に質問や問題を投稿してくだ さい。また、ほかの人が投稿した質問に対する提案や回答も歓迎します。 それでは始めましょう。まずは、RubyとRailsをインストールし、簡単なデモを使って動かして みましょう。

"Agile Web Development with Rails"って、近所の 本屋さんで見つけたんだけど、あれはすごく良い本 みたいだったわよ」 ―――Daveの母 *4http://forums.pragprog.com/forums/148 *5http://www.pragprog.com/titles/rails4/errata *6http://pragprog.com/wikis/wiki/RailsPlayTime

(17)

目次

監訳者序文 iii 第4版に寄せて v 本書のRails 3.1対応について vii 謝辞 ix はじめに xi とにかくRailsは使いやすい . . . xi

Rails Is Agile . . . xiii

本書の対象読者. . . xiv 本書の読み方. . . xiv 目次 xvii

I

はじめての

Rails

1

第1章 Railsのインストール 3 1.1 Windows上へのインストール. . . 4 1.2 Mac OS X上へのインストール. . . 5 1.3 Linux上へのインストール. . . 6 1.4 Railsのバージョンの選択. . . 7 1.5 開発環境の設定. . . 8 1.6 Railsとデータベース. . . 12 この章のまとめ. . . 12 第2章 Hello, Rails! 15 2.1 新しいアプリケーションの作成. . . 15 2.2 Hello, Rails!. . . 18 2.3 リンクによる複数ページの連携. . . 24 この章のまとめ. . . 27 自由課題. . . 28 第3章 Railsアプリケーションのアーキテクチャ 29 3.1 モデル、ビュー、コントローラ. . . 29 3.2 Railsのモデル. . . 32 3.3 Action Pack:ビューとコントローラ . . . 34 xvii

(18)

xviii 目次 第4章 Ruby入門 37 4.1 Rubyはオブジェクト指向言語. . . 37 4.2 データ型. . . 39 4.3 ロジック. . . 43 4.4 組織構造. . . 45 4.5 オブジェクトのマーシャリング. . . 48 4.6 総仕上げ. . . 49 4.7 Rubyのイディオム . . . 50

II

部 アプリケーションを構築する

53

第5章 Depotアプリケーション 55 5.1 インクリメンタル開発. . . 55 5.2 Depotの基本仕様. . . 56 5.3 コーディングの開始. . . 60 第6章 タスクA:アプリケーションの作成 61 6.1 イテレーションA1:商品管理アプリケーションの作成. . . 61 6.2 イテレーションA2:もっと美しく. . . 68 この章のまとめ. . . 73 自由課題. . . 73 第7章 タスクB:検証とユニットテスト 75 7.1 イテレーションB1:検証! . . . 75 7.2 イテレーションB2:モデルのユニットテスト. . . 79 この章のまとめ. . . 86 自由課題. . . 86 第8章 タスクC:カタログの表示 89 8.1 イテレーションC1:カタログリストの作成 . . . 90 8.2 イテレーションC2:ページにレイアウトを追加 . . . 94 8.3 イテレーションC3:ヘルパーを使った価格のフォーマット. . . 97 8.4 イテレーションC4:コントローラの機能テスト . . . 98 この章のまとめ. . . 100 自由課題. . . 100 第9章 タスクD:カートの作成 101 9.1 イテレーションD1:カートの取得. . . 101 9.2 イテレーションD2:商品とカートの関連付け. . . 102 9.3 イテレーションD3:ボタンの追加. . . 104 この章のまとめ. . . 109

(19)

xix 自由課題. . . 109 第10章 タスクE:もっとスマートなカート 111 10.1 イテレーションE1:もっとスマートなカートの作成. . . 111 10.2 イテレーションE2:エラー処理 . . . 116 10.3 イテレーションE3:カートの仕上げ . . . 119 この章のまとめ. . . 122 自由課題. . . 123 第11章 タスクF:Ajaxの追加 125 11.1 イテレーションF1:カートの移動. . . 126 11.2 イテレーションF2:Ajaxベースのカートの作成. . . 132 11.3 イテレーションF3:変更内容の強調表示. . . 135 11.4 イテレーションF4:空のカートを隠す. . . 137 11.5 イテレーションF5:画像をクリック可能にする . . . 140 11.6 Ajaxへの変更をテストする. . . 142 この章のまとめ. . . 144 自由課題. . . 145 第12章 タスクG:チェックアウト! 147 12.1 イテレーションG1:注文情報の取得. . . 147 12.2 イテレーションG2:Atomフィード. . . 159 12.3 イテレーションG3:ページネーション. . . 162 この章のまとめ. . . 165 自由課題. . . 165 第13章 タスクH:メールの送信 167 13.1 イテレーションH1:確認メールの送信. . . 167 13.2 イテレーションH2:アプリケーションの統合テスト. . . 174 この章のまとめ. . . 178 自由課題. . . 178 第14章 タスクI:ログイン 179 14.1 イテレーションI1:ユーザの追加. . . 179 14.2 イテレーションI2:ユーザ認証 . . . 184 14.3 イテレーションI3:アクセス制限. . . 188 14.4 イテレーションI4:サイドバー、管理機能の追加. . . 191 この章のまとめ. . . 194 自由課題. . . 194 第15章 タスクJ:国際化 197 15.1 イテレーションJ1:ロケールの選択. . . 197

(20)

xx 目次 15.2 イテレーションJ2:表示内容の翻訳. . . 201 15.3 イテレーションJ3:チェックアウトの翻訳. . . 207 15.4 イテレーションJ4:ロケール切り替え機能の追加. . . 213 この章のまとめ. . . 214 自由課題. . . 214 第16章 タスクK:デプロイと本番環境 217 16.1 イテレーションK1:Phusion PassengerとMySQLを使ったデプロイ . . . 218

16.2 イテレーションK2:Capistranoによるリモートでのデプロイ. . . 224 16.3 イテレーションK3:デプロイされたアプリケーションのチェック . . . 229 この章のまとめ. . . 231 自由課題. . . 232 第17章 Depotのふりかえり 233 17.1 Railsの基本概念. . . 233 17.2 成果物のドキュメント化. . . 235

III

Rails

詳説

239

第18章 Railsの構造 241 18.1 ディレクトリ構造 . . . 242 18.2 命名規約. . . 249 この章のまとめ. . . 252 第19章 Active Record 253 19.1 データの定義 . . . 253 19.2 レコードの特定と走査. . . 258 19.3 作成、読み込み、更新、削除(CRUD). . . 261 19.4 モニタリングプロセスに組み入れる. . . 276 19.5 トランザクション . . . 281 この章のまとめ. . . 285

第20章 Action DispatchとAction Controller 287 20.1 コントローラへのリクエストのディスパッチ. . . 288 20.2 リクエストの処理 . . . 297 20.3 複数のリクエストを範囲とするオブジェクトと操作 . . . 306 この章のまとめ. . . 314 第21章 Action View 315 21.1 テンプレートの使用. . . 315 21.2 フォームの生成. . . 317 21.3 フォームの処理. . . 320

(21)

xxi 21.4 Railsアプリケーションへのファイルのアップロード. . . 321 21.5 ヘルパーの使用. . . 324 21.6 レイアウトと部分テンプレートによる保守性の向上 . . . 331 この章のまとめ. . . 338 第22章 キャッシュ 339 22.1 クライアントキャッシュとの協調. . . 339 22.2 ページキャッシュ . . . 343 22.3 ページの失効 . . . 345 22.4 フラグメントキャッシュ. . . 349 この章のまとめ. . . 353 第23章 マイグレーション 355 23.1 マイグレーションの作成と実行. . . 355 23.2 マイグレーションの詳細. . . 358 23.3 テーブルの管理. . . 362 23.4 高度なマイグレーション. . . 366 23.5 マイグレーションがうまくいかない場合. . . 368 23.6 マイグレーションによらないスキーマ操作 . . . 369 この章のまとめ. . . 370 第24章 ブラウザを使わないアプリケーション 371 24.1 スタンドアロンアプリケーションでのActive Recordの使用. . . 371 24.2 Active Supportを使用するライブラリ関数 . . . 372 24.3 リモートアプリケーションでのActive Resourceの利用. . . 377 この章のまとめ. . . 382 第25章 Railsの依存コンポーネント 383 25.1 BuilderによるXMLの生成 . . . 383 25.2 eRubyによるHTMLの生成. . . 384 25.3 Bundlerによる依存関係の管理. . . 386 25.4 RackによるWebサーバとのインタフェース. . . 388 25.5 Rakeによるタスクの自動化. . . 392 25.6 Railsの依存コンポーネントの概要. . . 393 この章のまとめ. . . 396 第26章 Railsのプラグイン 397 26.1 Active Merchantによるクレジットカード処理 . . . 397 26.2 Hamlによるマークアップの整形. . . 399 26.3 RailsPlugins.orgでのプラグインの入手. . . 400 この章のまとめ. . . 402

(22)

xxii 目次

第27章 これからどうする 403

参考文献 405

(23)

第I部

はじめてのRails

(24)
(25)

1

Rails

のインストール

この章で説明するのは……

rRuby、RubyGems、SQLite 3、Railsのインストー ル r開発環境とツールのインストール 本書の第I部では、Ruby言語とRailsフレームワークの基礎について説明していきます。とはい え、まずはRubyとRailsをインストールして正しく動作することを確認しなくては、話が始まりま せん。 Railsを実行するには、次の準備が必要です。

r Rubyインタプリタ。RailsはRubyで作成されていて、アプリケーションの記述にもRuby を使います。Rails 3.1では、Rubyのバージョン1.9.2または1.8.7が必要です。バージョン 1.8.6および1.9.1では動作しません。

本書の内容に影響するRubyのバージョンの違いについては、p.4のコラムを参照してくだ さい。

r Rubyのパッケージ管理システムRubyGems。本書では、RubyGemsのバージョン1.8.6を 使用しています。

r Ruby on Rails。本書は、Railsバージョン3.1(正確にはRails 3.1.0)を使用して執筆してい ます。

r JavaScriptインタプリタ。Microsoft WindowsとMac OS XにはJavaScriptインタプリタが 組み込まれており、Railsはそれを利用します。ほかのOSではJavaScriptインタプリタの インストールが必要な場合があります。 r OSに応じた数種のライブラリ。 r データベース。本書では、SQLite 3とMySQL 5.1を使用します。 開発マシンに必要なものは、これだけです(ほかにもエディタが必要になりますが、これについ ては別の項で説明します)。ただし、作成したアプリケーションのデプロイを予定しているならば、 少なくとも本番用のWebサーバをインストールしなければなりません。Railsを効率良く実行する ためのサポートコードのインストールも必要です。アプリケーションのデプロイと、本番用のWeb サーバのインストールについては、第16章「タスクK:デプロイと本番環境」p.217を丸々費やして 詳細に説明します。 準備が整ったところで、インストール手順について説明しましょう。この手順はOSごとに異な ります。 3

(26)

4 第1章 Railsのインストール

}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}



Ruby

のバージョンについて

本書はRuby 1.9.2をベースにしています。

Rails 3.1はRuby 1.8.7でもRuby 1.9.2でも動きますが、Railsのコアチームは、新規に作成するRails

アプリケーションについてはRuby 1.9.2の利用を推奨しています。Ruby 1.9.2では構文とパフォーマン

スが改善されています。それに、Ruby 1.8.7はRails 4.0ではサポートされない予定です。

それでもRuby 1.8.7を使う場合には、生成されるscaffoldで用いられるハッシュ構文が「旧式」にな

ります。これが「新式」のハッシュ構文です。

redirect_to @cart, notice: 'Cart was successfully created.'

Ruby 1.8.7を使うと、Rails 3.1は次のような文を生成します。

redirect_to @cart, :notice => 'Cart was successfully created.'

コロン(:)の位置と、等号と大なり記号を組み合わせた矢印が、新式のハッシュ構文との違いです。 このほか、テストの出力形式が変わることにも注意が必要です。 本書でRuby 1.8.7を使ってRails 3.1を学ぶときは、この二点に留意してください。 }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

1.1 Windows

上へのインストール

WindowsへのRailsのインストールには、RailsInstaller*1パッケージを使うのが最も簡単です。 RailsInstallerのバージョンが2.0であり、Ruby 1.9.2とRails 3.1を含んでいるかどうかだけ確認 してください。

基本のインストールは簡単です。ダウンロードしたインストーラを実行し、[Next]をクリックし ます。次に[I accept the License]を選択します(もちろん、その前にライセンスの中身をよく読 んでください)。それから[Next][Install][Finish]をクリックします。

画面を閉じ、新たにコマンドプロンプトを開きます。それには、Windowsの[スタート]メニュー から[ファイル名を指定して実行]をクリックし、cmdと入力して[OK]をクリックします。 何か困ったことになったら、RubyInstallerのサイトにあるトラブルシューティングのページ*2を 調べてみてください。 これでWindowsユーザの準備はすべて完了です。1.4節 「Railsのバージョンの選択」p.7で会い ましょう。 *1http://railsinstaller.org/ *2https://github.com/oneclick/rubyinstaller/wiki/Troubleshooting

(27)

1.2 Mac OS X上へのインストール 5

1.2 Mac OS X

上へのインストール

Snow LeopardにもLionにもRuby 1.9.2はプリインストールされていないので、ダウンロード とビルドが必要です。これにはRVMを使うのが最も簡単だと思います。RVMのインストール方法 はRVMのサイト*3に記載されています。ここでも概要を説明します。

まず、Xcodeのバージョン3以降がインストールされていることを確認してください。Mac OS X 10.7(Lion)であればMac App StoreからXcode 4.1*4がフリーでダウンロードでき、自動的に インストールされます。Mac OS X 10.6(Snow Leopard)の場合は、Macに付属しているSnow Leopard DVDからXcodeをインストールします。XcodeはDVDの「Optional Installs」ディレク トリにあります。次のコマンドを実行してインストールされたXcodeのバージョンを確認してくだ さい。 $ xcodebuild -version Xcodeのバージョンが3なら、バージョン管理システムであるGitを別個にインストールする必 要があります。OSとハードウェアに適合するバージョンをダウンロードし*5、インストールしてく ださい。次のコマンドでGitのバージョンを確認します。 $ git --version 次はRVMのインストールです。

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

上記のコマンドの出力に従ってインストールを行います。特に、RVM関数を設定する指示を

.bash_profileに追記する必要があります。

$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && \

. "$HOME/.rvm/scripts/rvm"' >> ~/.bash_profile コマンド画面やターミナルをいったん閉じて、新たに開きます。これで.bash_profileが読み直 されます。新しく開いた画面でRubyインタプリタをインストールします。 $ rvm install 1.9.2 ダウンロードと設定、必要な実行ファイルのコンパイルにはしばらく時間がかかります。完了し たら、その環境を使って、Railsをインストールします。 $ rvm use 1.9.2

$ gem install rails

ここまでの手順は、どれも基本的に1回だけ実行すればよいのですが、rvm useだけはシェルを 開くたびに繰り返す必要があります。useキーワードは省略可能なので、rvm 1.9.2としてもかま いません。次のコマンドを使うことで、新たに開くターミナルのセッションにデフォルトのRuby インタプリタを設定することもできます。 *3https://rvm.beginrescueend.com/rvm/install/ *4http://itunes.apple.com/us/app/xcode/id448457090?mt=12 *5http://code.google.com/p/git-osx-installer/downloads/list?can=3

(28)

6 第1章 Railsのインストール

$ rvm --default 1.9.2

次のコマンドでインストールが無事に成功したかどうか確認できます。

$ rails -v

何か困ったことになったら、RVMのサイトにある「Troubleshooting Your Install」*6をあたってみ てください。

これでOS Xユーザの準備はすべて完了です。1.4節「Railsのバージョンの選択」p.7でWindows ユーザと合流しましょう。

1.3 Linux

上へのインストール

利用しているプラットフォームでネイティブなパッケージ管理システムを使います。例えば、 apt-get、dpkg、portage、rpm、rug、synaptic、up2date、yumなどです。

最初の手順は必要な依存関係のインストールです。ここで説明するのはUbuntu 11.04(Natty Narwhal)の場合ですが、ほかのOSを使っている場合は、コマンド名とパッケージ名を適宜読み替 えてください*7。

$ sudo apt-get install apache2 curl git libmysqlclient-dev mysql-server nodejs

MySQLサーバのインストールではrootのパスワードの設定を求められます。空白のままにして おくと、あとで何回もプロンプトが出てきます。ここで設定したパスワードは16.1節 「イテレー ションK1:Phusion PassengerとMySQLを使ったデプロイ」p.218でデータベースを生成するとき に必要になります。

Ubuntu 11.04にはRuby 1.9.2のパッケージがないため、ダウンロードとビルドが必要です。こ れにはRVMを使うのが最も簡単だと思います。RVMのインストール方法はRVMのサイト*8に記 載されています。ここでも概要を説明します。

まずはRVMをインストールします。

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

上記のコマンドの出力に従ってインストールを行います。特に、RVM関数を設定する指示を

.bash_profileに追記する必要があります。

$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && \

. "$HOME/.rvm/scripts/rvm"' >> ~/.bash_profile

コマンド画面やターミナルをいったん閉じて、新たに開きます。これで.bash_profileが読み直 されます。

次のコマンドを実行すると、利用しているOSによって異なる追加手順が提示されます。

*6https://rvm.beginrescueend.com/rvm/install

*7[訳注]Rails 3.1では、サーバサイドにJavaScript実行環境が必要になるので、Node.jsやSpiderMonkeyなどをインストールしてお

いてください。WindowsやMac OS Xでは最初からJavaScript実行環境が入っているので、インストールの必要はありません。

(29)

1.4 Railsのバージョンの選択 7 $ rvm notes Ruby(MRI)向けのOS依存関係のインストール方法の指示を探します。その手順を済ませたら、 Rubyインタプリタをインストールしましょう。 $ rvm install 1.9.2 ダウンロードと設定、必要な実行ファイルのコンパイルにはしばらく時間がかかります。完了し たら、その環境を使って、Railsをインストールします。 $ rvm use 1.9.2

$ gem install rails

ここまでの手順は、どれも基本的に1回だけ実行すればよいのですが、rvm useだけはシェルを 開くたびに繰り返す必要があります。useキーワードは省略可能なので、rvm 1.9.2としてもかま いません。次のコマンドを使うことで、新たに開くターミナルのセッションにデフォルトのRuby インタプリタを設定することもできます。 $ rvm --default 1.9.2 次のコマンドでインストールが無事に成功したかどうか確認できます。 $ rails -v

何か困ったことになったら、RVMのサイトにある「Troubleshooting Your Install」*9をあたってみ てください。

以上で、Windows、Mac OS X、Linuxのそれぞれについての解説が終わりました。ここからの説 明は3つのOSすべてに共通です。

1.4 Rails

のバージョンの選択

前述の手順でインストールできるのは最新版のRailsです。しかし、最新のバージョンでは実行 したくない場合もあります。例えば、手元で実行するRailsのバージョンを本書の例で使っている バージョンと完全に一致させ、実行結果をまったく同じにしたい人もいるでしょう。開発に使って いるマシンとデプロイするマシンが別で、デプロイするマシンのRailsのバージョンを勝手に変え られないこともあります。 いずれにせよ、そうした場合には気をつけるべき点がいくつかあります。まず、次のgemコマン ドを実行して、インストール済みRailsの全バージョンを確認します。

$ gem list --local rails

rails --versionコマンドでデフォルトで実行されるRailsのバージョンを確認することもでき

ます。返される値は3.1.0以降のはずです。

別のバージョンのRailsのインストールもgemコマンドで実行できます。OSの種類によっては、 このコマンドの前にsudoを付ける必要があります。

(30)

8 第1章 Railsのインストール

$ gem install rails --version 3.1.0

複数のバージョンのRailsがインストールできても、どれかを選ぶ方法がなければ意味がありませ ん。もちろんその方法も用意されています。どのrailsコマンドでも、次のように完全なバージョ ン番号をアンダースコアで囲んでコマンドの第1パラメータの前に指定することにより、使用する Railsのバージョンを制御できます。 $ rails _3.1.0_ --version この方法が特に重宝するのは、新しいアプリケーションを作成するときです。というのは、特定の バージョンのRailsでアプリケーションを作成すると、たとえシステムに新しいバージョンのRails がインストールされても、そのアプリケーションはあなたがアップグレードすると決めるまでは最 初に作成した時点のバージョンのRailsを使い続けるからです。アップグレードするには、アプリ ケーションのrootディレクトリにあるGemfileでバージョン番号を更新し、bundle installを実 行します。このコマンドについては、25.3節 「Bundlerによる依存関係の管理」p.386で詳しく説明 します。

1.5

開発環境の設定

Railsプログラムを書く日常的な作業に難しいことは何もありません。作業の方法は人それぞれで しょうが、ここでは筆者たちのやり方を紹介します。

コマンドライン

筆者は、多くの作業にコマンドラインを使います。Railsアプリケーションの生成や管理に役立つ GUIツールの数は日増しに増えていますが、依然としてコマンドラインが最も強力なツールだと考 えています。使っているOSのコマンドラインに慣れるまでには少し時間がかかるでしょうが、そ の時間が無駄になることはありません。まずは入力中のコマンドの修正方法、すでに入力したコマ ンドの検索および編集方法、入力途中のファイル名やコマンドの補完方法について調べてみるとよ いでしょう。 いわゆるタブ補完は、BashやzshなどのUnixシェルに標準搭載されている機能です。ファイル 名の最初の数文字を入力してから[Tab]キーを押せば、入力した文字に一致するファイル名をシェ ルが探して補完してくれます。

バージョン管理

筆者たちは、すべての作業をバージョン管理システムに保持しています(現在はGitを使ってい ます)。新しいRailsプロジェクトを作成したときや、検証済みの変更をコミットするときには、必 ずGitにチェックインします。リポジトリへのコミットは1時間に何回も行います。 チーム単位でRailsプロジェクトの作業を行う場合は、継続的インテグレーション(CI:Continuous Integration)システムの導入を検討してください。チームの誰かが変更をコミットすると、CIシス テムによりアプリケーションの最新のコピーがチェックアウトされ、すべてのテストが実行されま す。これは、誤って不具合が生じた場合にすぐに気がつくようにするための最も簡単な方法です。 CIシステムを導入すると、顧客が開発中のアプリケーションの最新バージョンを試用できるように

参照

関連したドキュメント

(4) 現地参加者からの質問は、従来通り講演会場内設置のマイクを使用した音声による質問となり ます。WEB 参加者からの質問は、Zoom

WEB 申請を開始する前に、申請資格を満たしているかを HP の 2022 年度資格申請要綱(再認定)より必ずご確

の知的財産権について、本書により、明示、黙示、禁反言、またはその他によるかを問わず、いかな るライセンスも付与されないものとします。Samsung は、当該製品に関する

Webカメラ とスピーカー 、若しくはイヤホン

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS

(a)第 50 類から第 55 類まで、第 60 類及び、文脈により別に解釈される場合を除くほか、第 56 類から第 59 類までには、7に定義する製品にしたものを含まない。.

欄は、具体的な書類の名称を記載する。この場合、自己が開発したプログラ

かつ、第三国に所在する者 によりインボイスが発行 される場合には、産品が締 約国に輸入される際に発