この 2 年間、Ruby on Rails アプリケーション・フレームワークでは、いくつものホスティング・プロバイダーやサービス・プロバイダー、拡張を続ける膨大な開発ツール群、そしてソフトウェアの機能を高める多種多様な補助ライブラリー (Ruby では gem やプラグインと呼ばれます) を蓄積してきました。例えば Engine Yard と Heroku は、優れた仮想的な Rails ソフトウェアのホスティングを提供する会社です。風変わりな名前の Oink と Bullet は、それぞれメモリーの使用状況、パフォーマンスをプロファイリングするツールです。そして Clearance と Sunspot は、それぞれ認証機能、索引付けされた高速な検索機能をそのまま使える状態で提供するプラグインです。
2007年以来、Rails ではコミュニティーも大きくなりました。全世界の Rails 開発者達は活気に満ちており、互いに助け合い、常にソフトウェアの改善に意欲的に取り組んでいます。実際、Rails コミュニティーでは Rails を改善しようとしており、プログラマー達はより良いコードを作成するために常に切磋琢磨しあっている、と言っても決して誇張ではありません。繰り返しが行われるごとに、さまざまな機能が生まれたと思うと実用的なものになり、実用的なものから強力なもの、さらには洗練されたものになり、最終的には不可欠なものになります。多くの場合、Rails コミュニティーが不可欠と見なした gem やプラグインは Rails コアの中に収められます。Rails の named scope (クエリーの簡潔な表現) は、まさにその一例であり、nested form も同様です (nested form はごく最近追加された機能であり、同じ HTML フォーム内で複数のモデルを作成、編集しようとする従来の試みに代わるものです)。実際、Rails 開発者にとって最も困難な課題は、Rails の変化に追いつくことです。(幸いなことに、Ruby や Ruby on Rails に関して毎週更新されるポッドキャストがいくつかあり、その中でトレンドやベスト・プラクティスが整理されて紹介されています。)
Rails の次期メジャー・リリースである Rails バージョン 3 でも、ツールキットは急速な進化を続けています。そして Rails の伝統に従い、相変わらず「頑固に」設定よりも規約を優先しています。Rails のコア・コンポーネント、つまり RESTful な経路、関係、検証、テンプレート、データベース抽象化などは、従来のまま維持されています。しかし、こうしたユニットの内部では、その大部分が再作成されたり、あるいは改善されたりしています。最も注目すべき点として、Rails 3 では Merb のさまざまな技術を大量に採用しているため、Rails の基本機能の多くは、もはや密結合されてはいません。例えば、従来は Rails アプリケーションでしか利用できなかった便利なデータ検証機能は、今や独立したコンポーネントであり、まったく普通の Ruby コードに含めることができます。パーシャルやテンプレートの描画といったコントローラー機能も今や独立した機能であり、任意のライブラリーに組み込むことができます。
この記事では、Rails 3 について、そして Rails 3 での多くの変更と追加について調べ、新しい Rails 3 アプリケーションをゼロの状態から作成します。2010年 2月半ばの時点で、Rails 3 はベータ・プレリリースの状態にあり、夏が始まる前の正式リリースに向け、中心となるチームはパッチやフィードバック、ドキュメントを収集している最中です。しかし現時点での Rails 3 でも、アプリケーションを作成したり、多くの新機能について学んだりするには十分です。
Rails 3 での変更はあまりにも数が多く、ここで完全に説明することはできません。補助資料を含めた変更の完全なリストを読むためには、Rails 3 のリリース・ノートを参照してください (「参考文献」にリンクがあります)。ただしここで、ほぼ確実に開発者に影響すると思われる変更点をいくつか挙げておきます。
- すべてを 1 つのコマンドで制御。Rails 3 では、これまで各アプリケーションの中にあった一連のスクリプト (script/server や script/generate など) はなくなり、
rails
という適切な名前が付いた 1 つのコマンドで置き換えられています。例えば、従来は./script/console
と入力していたものは、今度はrails console
と入力します。またrails
コマンドによって、従来と同じように新しいアプリケーションを生成することもできます。rails コマンドの動作は既存の Rails アプリケーションの中で起動されたかどうかによって異なります。 - 依存関係をマニフェストで解決。gem の依存関係の調整と解決は面倒な問題です。gem のリビジョンはシステムごとに異なり、どんな gem を利用できるのかもシステムごとに異なります。このようにシステムごとに異なる多様な依存関係があると、Rails アプリケーションを広範にデプロイしたり共有したりすることが難しくなります。Rails 3 では、依存関係を管理するための特別なユーティリティーである、Bundler を導入しています (その結果
config.gem
は古いものになりました)。依存関係の宣言はアプリケーションのルートにある Gemfile というカタログの中で行います。Bundler は指定された gem をすべてダウンロードして保存します。さらにはアプリケーションの中に gem を含めてしまうことで、外部リポジトリーからのダウンロードを不要にすることもできます。 - クエリーを使わないクエリー。Rails は古くからドメイン特化言語 (DSL) を多用してきました (
has_one
やvalidates_numericality_of
を考えてみてください)。ただし 1 つ重要な例外があり、それがデータベース・クエリーです。Rails の動的ファインダーのおかげで負担が軽くなることは確かですが、find_by_sql 文の場合と同様で、通常:conditions
や:order
、:limit
などが多用されたオプションのハッシュによってコードが複雑になりがちです。Rails 3 には、クエリーを表現するための DSL である関係代数が採用されています。プリミティブには、(列を選択するための)project
、(条件を表現するための)where
、(関係を指定するための)join
、(それぞれ限界とオフセットを指定するための)take
とskip
、(集約のための)group
、などがあります。 - ボイラープレート・コード不要のコントローラー。Rails コントローラーのコア・アクション (
new
、create
、edit
、update
) は通常は変化せず、特にコントローラーの主目的が CRUD 操作用の場合には変化しません。実際、コントローラー生成命令./script/generate controller
の出力で十分な場合がほとんどであり、生成されたものを特に変更する必要はありません。このようにコントローラーはどれも似ていることから、Rails 3 ではResponder
を導入し、さらにコードを単純化しています。例えば、create
アクションに必要なコードは下記のように数行にすぎません。class PostsController respond_to :html, :xml def create @post = Post.create(params[:post]) respond_with(@post) end end
このスニペットでは、@post が適切に保存された場合には
respond_with(@post)
はshow
にルーティングされて新しいレコードを表示し、このオブジェクトの検証が失敗した場合には respond_with(@post
) はnew
にルーティングされます。
繰り返しますが、これはごく一部の例にすぎません。次のセクションでは、これらの新機能や他の機能の例について説明し、Rails 3 のアプリケーションをゼロの状態から作成します。
お使いのシステムで Rails 3 を実行するために必要なものは、Ruby バージョン 1.8.7 または Ruby バージョン 1.9.2、あるいはまたはそれよりも新しいリリースの Ruby 言語と付属ライブラリー、そしてインタープリターです。また、マシンに Git ソフトウェア・バージョン管理システムがインストールされていると役立ちます。Rails 3 や、その他多くの重要な Rails プロジェクトは Git によって維持管理されているからです。またシステムにはデータベース・エンジンも必要です (SQLite (バージョン 3)、MySQL、PostgreSQL など)。Rails アプリケーションの作成には Web サーバーは必要ありませんが、通常は本番デプロイメントの一部として Web サーバーがあるものです。
Rails 3 アプリケーションを作成するためには、Rails 3 プレリリースの gem と、その gem の依存関係のすべてが必要です。今のところ、いくつかのコマンドを使うだけで必要なコンポーネントをインストールすることができます (リスト 1)。(コマンドを実行する前に Rails 3 のドキュメントを調べてください。詳細部分はリリースごとに異なる可能性があります。)
リスト 1. Rails 3 プレリリースの gem と依存関係
$ gem install rails3b Due to a rubygems bug, you must uninstall all older versions of bundler for 0.9 to work Successfully installed mime-types-1.16 Successfully installed mail-2.1.2 Successfully installed text-hyphen-1.0.0 Successfully installed text-format-1.0.0 Successfully installed memcache-client-1.7.8 Successfully installed rack-1.1.0 Successfully installed rack-mount-0.4.7 Successfully installed abstract-1.0.0 Successfully installed erubis-2.6.5 Successfully installed i18n-0.3.3 Successfully installed tzinfo-0.3.16 Successfully installed bundler-0.9.5 Successfully installed thor-0.13.1 Successfully installed rails3b-3.0.1 14 gems installed $ gem install arel --pre Successfully installed activesupport-3.0.0.beta Successfully installed arel-0.2.pre 2 gems installed $ gem install rails --pre Successfully installed activemodel-3.0.0.beta Successfully installed actionpack-3.0.0.beta Successfully installed activerecord-3.0.0.beta Successfully installed activeresource-3.0.0.beta Successfully installed actionmailer-3.0.0.beta Successfully installed railties-3.0.0.beta Successfully installed rails-3.0.0.beta 7 gems installed |
次のステップは、単純なウィキのアプリケーションを生成することです (リスト 2)。このアプリケーションは記事の作成と管理を行います。各記事にはタイトルと文章があり、新しい記事を作成するためには単にその記事への参照を既存のページの本体から作成します。参照は、ラクダ記法による任意の単語、例えば TheSolarSystem や TheOscars などによって行われます。
注: このウィキ・アプリケーションのソース・コードは下記の「ダウンロード」テーブルから入手することができます。
リスト 2. Rails のウィキ・アプリケーション
$ rails wiki |
ls -lR
を実行してアプリケーションを構成するファイルを表示すると、下記のようないくつかの新しいファイルがあることがわかります。
- Gemfile は先ほど触れた gem のマニフェストです。このファイルには少なくとも 2 つの行が含まれている必要があります (Rails 3 のベータ版 gem のソースを指す行と、Rails 3 のベータ版 gem 自体を含めるための行)。通常は次のように、(少なくとも) 3 番目の行としてデータベースに接続するための行が必要なはずです。
source 'http://gemcutter.org' gem "rails", "3.0.0.beta" gem "sqlite3-ruby", :require => "sqlite3"
- config/application.rb の中には、従来 config/environment.rb の中にあった多くのオプションが含まれています。config/environment.rb は残っていますが、その内容のほとんどは非推奨となっています。config/application.rb に追加された重要なものの 1 つが generators ブロックです。
config.generators do |g| g.orm :active_record g.template_engine :erb g.test_framework :test_unit, :fixture => true end
Rails 3 アプリケーションは、これらと互換性のある、いくつかの ORM (Object-Relational Mapper)、テンプレート・エンジン、テスト・フレームワークの 1 つを使用します。generators ブロックはアプリケーションのプリファレンスを指定し、モデルやビューなどのための適切な生成コマンドを呼び出します。
- db/seeds.rb は Rails 3 で新たに追加されたファイルではありませんが、ごく最近追加されたものであり (Rails バージョン 2.3.4 で導入されました)、重要なので説明しておきます。アプリケーションを適切に実行するために初期データ (例えば管理ユーザー、価格コード、静的ページなど) が必要な場合には、それらのデータを db/seeds.rb の中に作成し、
rake db:seed
を実行します。このシード・ファイルが導入される前には初期化のための規約がなく、多くの開発者はコードを移植して使用していたため、データベースの作成とデータベースへのデータ追加との区別が曖昧になっていました。 - 各 Rails 3 アプリケーションのルートにある config.ru は、いわゆる rackup ファイル、つまり Rack ベースのアプリケーションのための構成です。Rails 3 は Rack アプリケーションであり、同じく Rack をサポートする任意の Web サーバーと互換性があります。一般的に、他の Rack コンポーネントを追加する必要がある場合を除き、config.ru に触れる必要はありません。
これら以外にも新しいファイルがいくつかありますが、その大部分は Rails バージョン 2.3 からお馴染みのもののように見えるはずです。config/routes.rb ファイルの用途は以前と同じですが、大幅に単純化され、Ruby らしさが増しています。この例を、このすぐ後に説明します。
アプリケーションを生成し、Gemfile を編集して依存関係を取り込んだら、次のステップはアプリケーションに必要な gem を収集することです。それを行うものが、新しいユーティリティーである bundle
です (リスト 3)。
リスト 3. 必要な gem を収集する
$ bundle installFetching source index from http://gemcutter.org Resolving dependencies Installing abstract (1.0.0) from system gems Installing actionmailer (3.0.0.beta) from system gems Installing actionpack (3.0.0.beta) from system gems Installing activemodel (3.0.0.beta) from system gems Installing activerecord (3.0.0.beta) from system gems Installing activeresource (3.0.0.beta) from system gems Installing activesupport (3.0.0.beta) from system gems Installing arel (0.2.1) from rubygems repository at http://gemcutter.org Installing builder (2.1.2) from system gems Installing bundler (0.9.7) from rubygems repository at http://gemcutter.org Installing erubis (2.6.5) from system gems Installing i18n (0.3.3) from system gems Installing mail (2.1.2) from system gems Installing memcache-client (1.7.8) from system gems Installing mime-types (1.16) from system gems Installing rack (1.1.0) from system gems Installing rack-mount (0.4.7) from system gems Installing rack-test (0.5.3) from system gems Installing rails (3.0.0.beta) from system gems Installing railties (3.0.0.beta) from system gems Installing rake (0.8.7) from system gems Installing sqlite3-ruby (1.2.5) from rubygems repository at http://gemcutter.org with native extensions Installing text-format (1.0.0) from system gems Installing text-hyphen (1.0.0) from system gems Installing thor (0.13.3) from rubygems repository at http://gemcutter.org Installing tzinfo (0.3.16) from system gems Your bundle is complete! |
bundle
ユーティリティーは Bundler の省略形であり、Gemfile で指定されたすべての gem と、それらの gem の前提条件のすべてをダウンロードしてインストールします (リスト 4)。また bundle
ユーティリティーは、これらの依存関係のすべてをアプリケーションの中にコピーし、コード・ベースを自己完結的なものにします。具体的に言えば、bundle pack
を実行すると、Bundler は一連の gem を vendor/cache にコピーします。
リスト 4. bundle ユーティリティーを実行する
$ bundle pack Copying .gem files into vendor/cache * bundler-0.9.7.gem * thor-0.13.3.gem * abstract-1.0.0.gem * mime-types-1.16.gem * text-hyphen-1.0.0.gem * rack-mount-0.4.7.gem * rake-0.8.7.gem * text-format-1.0.0.gem * tzinfo-0.3.16.gem * rack-test-0.5.3.gem * builder-2.1.2.gem * erubis-2.6.5.gem * memcache-client-1.7.8.gem * rack-1.1.0.gem * sqlite3-ruby-1.2.5.gem * i18n-0.3.3.gem * activesupport-3.0.0.beta.gem * arel-0.2.1.gem * mail-2.1.2.gem * activemodel-3.0.0.beta.gem * activerecord-3.0.0.beta.gem * actionpack-3.0.0.beta.gem * railties-3.0.0.beta.gem * actionmailer-3.0.0.beta.gem * activeresource-3.0.0.beta.gem * rails-3.0.0.beta.gem $ ls vendor/cache abstract-1.0.0.gem memcache-client-1.7.8.gem actionmailer-3.0.0.beta.gem mime-types-1.16.gem actionpack-3.0.0.beta.gem rack-1.1.0.gem activemodel-3.0.0.beta.gem rack-mount-0.4.7.gem activerecord-3.0.0.beta.gem rack-test-0.5.3.gem activeresource-3.0.0.beta.gem rails-3.0.0.beta.gem activesupport-3.0.0.beta.gem railties-3.0.0.beta.gem arel-0.2.1.gem rake-0.8.7.gem builder-2.1.2.gem sqlite3-ruby-1.2.5.gem bundler-0.9.7.gem text-format-1.0.0.gem erubis-2.6.5.gem text-hyphen-1.0.0.gem i18n-0.3.3.gem thor-0.13.3.gem mail-2.1.2.gem tzinfo-0.3.16.gem |
vendor/cache はアプリケーション独自の gem リポジトリーと考えることができます。このコード・ベースは任意の場所に移動することができ、その移動した場所で、アプリケーションが依存する gem ソフトウェアの多様なバージョンを利用することができ、リモートのリポジトリーは必要ありません。例えば bundle pack
の後に bundle install
を実行すると、gem はアプリケーションのリポジトリーからシステムにインストールされます (リスト 5)。
リスト 5. gem をインストールする
Fetching source index from http://gemcutter.org Resolving dependencies Installing abstract (1.0.0) from .gem files at /Users/strike/projects/rails3/wiki/vendor/cache Installing actionmailer (3.0.0.beta) from .gem files at /Users/strike/projects/rails3/wiki/vendor/cache Installing actionpack (3.0.0.beta) from .gem files at /Users/strike/projects/rails3/wiki/vendor/cache ... Installing thor (0.13.3) from .gem files at /Users/strike/projects/rails3/wiki/vendor/cache Installing tzinfo (0.3.16) from .gem files at /Users/strike/projects/rails3/wiki/vendor/cache Your bundle is complete! |
アプリケーションを作成するためには、ページの scaffold を生成し、データベースを作成したら、そのデータベースに初期ページを追加し、必要な経路を設定します (リスト 6)。ここでは単純にするために、ウィキ・ページのレコードには数個のフィールドしかありません。つまりフィールドとしては、title、slug (title の省略形)、body、そしてページが作成された時と最後に変更された時を記録するための timestamps のみです。title と slug はストリング・フィールドです。body はテキスト・フィールドです。timestamps は日付フィールドと時刻フィールドです。(もちろん、実際のウィキには他にもフィールドがあるはずです。例えば、そのページの一番最近の作成者や以前のリビジョンなど。この例では単純にするために、ユーザーやセッション、フォーマット設定、さまざまな認証や承認なども省略しています。) 最初のモデル、一連のビュー、そしてコントローラーを、コマンド rails generate scaffold
を使って生成します。
リスト 6. 完全なウィキ・アプリケーション
$ rails generate scaffold page title:string slug:string body:text --timestamps invoke active_record create db/migrate/20100221115613_create_pages.rb create app/models/page.rb invoke test_unit create test/unit/page_test.rb create test/fixtures/pages.yml route resources :pages invoke scaffold_controller create app/controllers/pages_controller.rb invoke erb create app/views/pages create app/views/pages/index.html.erb create app/views/pages/edit.html.erb create app/views/pages/show.html.erb create app/views/pages/new.html.erb create app/views/pages/_form.html.erb create app/views/layouts/pages.html.erb invoke test_unit create test/functional/pages_controller_test.rb invoke helper create app/helpers/pages_helper.rb invoke test_unit create test/unit/helpers/pages_helper_test.rb invoke stylesheets create public/stylesheets/scaffold.css |
./script/generate
はどうなったのかと思う人がいるかもしれませんが、今や ./script/generate
はあらゆる場面で使用できる rails
コマンドに含まれていることを思い出してください。
rake db:create db:migrate
を実行してデータベースを作成します。
$ rake db:create db:migrate == CreatePages: migrating ==================================================== -- create_table(:pages) -> 0.0010s == CreatePages: migrated (0.0011s) =========================================== |
これでウィキが存在するようになりましたが、このウィキは空です。他のすべてのページのアンカーとなる最初のページを追加します。db/seeds.rb ファイルを編集し、新しいページを作成するためのコードを作成します (リスト 7)。
リスト 7. ウィキのアンカー・ページ
Page.create( :title => 'The Marx Brothers Wiki', :slug => 'Home', :body => 'An encyclopedic guide to the Marx Brothers.') |
rake db:seed
と入力することで、このコードを実行します。rails console
と入力すると、このページをパッと見ただけで素早く検証することができます (リスト 8)。
リスト 8. アンカー・ページを検証する
$ rake db:seed (in /Users/strike/projects/rails3/wiki) $ rails console Loading development environment (Rails 3.0.0.beta) irb(main):001:0> Page.all => [#<Page id: 1, title: "The Marx Brothers Wiki", slug: "Home", body: "An encyclopedic guide to the Marx Brothers.", created_at: "2010-02-21 12:24:43", updated_at: "2010-02-21 12:24:43">] |
このコードについて説明する前に、経路を設定します。経路は 2 つ必要です。つまりホームページを見つけるためのデフォルトの経路、そしてページの slug によってページを見つけるための別の経路という 2 つです。リスト 9 は最終的な config/routes.rb ファイルを示しています。
リスト 9. config/routes.rb (最終版)
Wiki::Application.routes.draw do |map| resources :pages root :to => "pages#show" end |
リスト 6 の rails generate scaffold page
行によって 2 行目の経路が自動的に作成されており、この経路は RESTful です。3 行目に手動で経路を追加する必要があります。サイトの経路のデフォルトの「ルート (root)」を指定するための構文は Rails 3 で新たに登場したものです。3 行目の内容は、『経路「/」を pages コントローラーの「show
」メソッドにマッピングする』ということです。show メソッドのコードにより、データベースの中にあるホームページが発見されて、表示されます。
新しいルート経路を追加したら、public/index.html ファイルを削除し、競合を防止します。
$ rm public/index.html |
今度はページ・コントローラーに注目します。Rails 3 でのページ・コントローラーのコードは極めて簡潔です。リスト 10 はページ・コントローラーの最初の実装であり、show
メソッドしかありません。
リスト 10. Rails 3 のコントローラー
class PagesController < ApplicationController respond_to :html def show @page = Page.where( :slug => ( params[:id] || 'Home' ) ).first respond_with( @page ) end end |
これを見るとわかるように、Rails 2 のコントローラーに通常見られたボイラープレート・コードはまったくありません。respond_to
はコントローラーがサポートするフォーマットを一覧表示します。ここではコントローラーは HTML に対するリクエストにのみ応答します。respond_with
はコントローラーによる処理の進め方を指定するためのロジックの省略形です。
クエリーのための構文も非常に異なっています。この参照は Rails 3 の関係代数の一例です。なぜ first
という接尾辞が必要なのかと思う人がいるかもしれません。where
など、クエリーを表現するオペランドによって実際にクエリーが実行されることはありません。データが実際に必要になるまで、クエリーはそのまま放置されます。これは遅延ローディング、つまり可能な限りクエリーを遅延させる手法です。first
によってデータベースへの問い合わせが実際にトリガーされます。
このアプリケーションを今実行すると、図 1 のようなものが表示されるはずです。
図 1. Rails 3 のウィキ・アプリケーション
ここで、コントローラーにコードを追加します。リスト 11 は完全なコントローラーを示しています。
リスト 11. 完全な Rails 3 コントローラー
class PagesController < ApplicationController respond_to :html before_filter :get_page, :except => [ :create ] def create respond_with( @page = Page.create( params[ :page ] ) ) end def edit end def index render :action => :show end def show @page ||= Page.new( :slug => params[ :id ] ) if @page.new_record? render :action => :new else respond_with( @page ) end end def update @page.update_attributes( params[ :page ] ) respond_with( @page ) end private def get_page @page = Page.where( :slug => ( params[:id] || 'Home' ) ).first || Page.where( :id => params[:id] ).first end end |
コントローラーの中で、index
メソッドは show
アクションを反映しているにすぎず、ページ識別子を持っていません。従ってホームページを描画します。show
は指定された ID または slug のページを表示します (すべてのアクションに関する参照は get_page
に集められているため、さらにコード量が削減されています)。ページが存在しない場合には、新しいページが編集用に用意されます。
Page
モデルは単にすべてのフィールドが存在しているかどうかを検証します。
class Page > ActiveRecord::Base validates_presence_of :body, :slug, :title end |
ラクダ記法の参照を他のページへのリンクに変換する動作は Page
モデルのビューの中で行われます。app/helpers/pages_helper.rb のヘルパー関数が大部分の作業を行うため、ビューには最低限のコードしかありません (リスト 12)。
リスト 12. ラクダ記法を変換するヘルパー関数
module PagesHelper def wikify( page ) return '' if page.body.blank? page.body.gsub( /^([A-Z][[:alnum:]]*([A-Z][[:alnum:]]*)+)/ ) do |match| link_to( $1, :action => :show, :id => $1 ) end end end |
このビューは典型的なものです (リスト 13)。
リスト 13. 典型的なビュー
<p> <b>Title:</b> <%= @page.title %> </p> <p> <b>Body:</b> <%= raw wikify( @page ) %> </p> <%= link_to 'Edit', edit_page_path(@page) %> | <%= link_to 'Back', pages_path %> |
raw
演算子は Rails 3 で新たに登場したものです。従来の Rails リリースとは逆に、すべてのストリングはデフォルトで HTML なしに安全に出力されます。HTML でストリングを出力したい場合には、raw
を使う必要があります。
この記事で紹介した改善事項や便利さに加え、Rails 3 は従来のバージョンよりもパフォーマンスが改善されており、特にパーシャルの描画のパフォーマンスが改善されています。また独自のバリデーター・クラスを作成することができ、より効率化された標準的な検証も利用できるようになっています。例えば下記の検証は Jeremy McAnally によって作成されたものですが、この検証を行うために以前は別々の 4 行のコードが必要でした。
validates :login, :presence => true, :length => {:minimum => 4}, :uniqueness => true, :format => { :with => /[A-Za-z0-9]+/ } |
Rails の正式なチュートリアルである Rails Guides は、現在 Rails 3 に対応するように更新が行われています。また、Jeremy McAnally、Yehuda Katz、Gregg Pollack、その他コミュニティーのリーダーによるブログには、広範な内容を網羅した説明や賢明なソリューションが紹介されています (「参考文献」を参照)。また人気のある何冊かの本も新しいリリースに対応して改訂が行われている最中であり、その中にはツルハシの表紙で有名な『Programming Ruby』や、『Agile Web Development with Rails』(「参考文献」) も含まれています。
内容 | ファイル名 | サイズ | ダウンロード形式 |
---|---|---|---|
Source files for the example wiki | wiki.zip | 120KB | HTTP |
学ぶために
- Rails 3 のリリース・ノート: このリリース・ノートには、Rails 3 のコードへの追加事項や改善事項、変更点などに関する包括的で最新の内容が、一覧で説明されています。
- Merb: Rails 3 は Merb フレームワークの機能の多くを統合しています。Merb の歴史と機能について知ってください。
- Jeremy McAnally のブログ: このブログはチュートリアルであり、エキスパートによる洞察でもあります。
- Yehuda Katz のブログ: Katz は Rails の中心的コントリビューターであり、Merb と Rails の統合に関するチーフ・アーキテクトでもあります。
- Gregg Pollack のブログ: Pollack は、Rails に関して毎週更新されるポッドキャスト、そして時折行われるスクリーンキャストをホストしています。
- 『RailsによるアジャイルWebアプリケーション開発』(Sam Ruby、Dave Thomas、David Heinemeier Hansson らの共著、2009 年オーム社刊): この本は Rails を学ぼうとする人にとって計りしれないほど貴重な本です。
- developerWorks の Web development ゾーン: Web development ゾーンには Web 2.0 開発に関するツールや情報が豊富に用意されています。
- IBM Technical events and webcasts: developerWorks の Technical events and webcasts で最新情報を入手してください。
製品や技術を入手するために
- Ruby on Rails: Rails のホームページを訪れ、Rails について詳細資料を読み、また Rails をダウンロードしてください。
- Sunspot: Rails 用のテキスト検索プラグイン、Sunspot のコピーを Github からダウンロードしてください。
- Clearance: このパッケージ化された Rails ソリューションはユーザー認証に役立ちます。
- Bullet: アプリケーションに Bullet を組み込み、実行が極めて遅延されたクエリーや、即座に実行されるクエリーを発見してください。
- Oink: Rails アプリケーションのメモリー使用量を減らすために、この風変わりな名前の Oink を試してください。
- IBM 製品の試用版: これらの試用版をダウンロードし、DB2® や Lotus®、Rational®、Tivoli®、WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品をお試しください。
議論するために
- developerWorks blogs: developerWorks blogs から developerWorks のコミュニティーに加わってください。
Martin Streicher はフリーランスの Ruby on Rails 開発者であり、以前は Linux Magazine の編集責任者でした。彼は Purdue University でコンピューター・サイエンスの修士号を取得しており、1986年以来 UNIX ライクなシステムのプログラミングをしてきました。彼は美術品やおもちゃを収集しています。