連載
» 2011年02月23日 00時00分 公開

Ruby on Rails3で学ぶWeb開発のキホン(1):MVCとRailsの基本構成を学ぼう (3/3)

[大場寧子, 河野十行, 鳥井雪,株式会社万葉]
前のページへ 1|2|3       

RailsコマンドとRake

 最後に、Railsアプリケーション開発でよく利用するrailsコマンドとrakeについて紹介します。

 railsコマンドには、new以外にもいろいろなサブコマンドが用意されています。よく使用するサブコマンドには以下のようなものがあります。

rails generate(または“rails g”)
コードの生成(後で詳述)を行う

rails console(または“rails c”)
Railsコンソールを起動

rails server(または“rails s”)
Railsサーバーを起動

 Railsコンソールとは、Railsの環境をロードした状態で対話的にRubyコードを実行できるツールです。また、Railsサーバーを起動すると、アプリケーションが立ち上がり、ブラウザから利用することができるようになります。

 その他のサブコマンドについては「rails -h」で確認することができます。また、各サブコマンドの引数に-hを指定して実行することでヘルプを表示させることができます(例:rails g -h)。

 ここでは、上記のサブコマンドの中でも特に頻繁に使用するrails generateコマンドについて、さらに詳しく見ていきます。

rails generateの詳しい使い方

 rails generateコマンドを使ってさまざまなコードを生成することができます。実行する際には引数にジェネレータを指定します。よく使用するジェネレータには以下のようなものがあります。

> rails g model item name:string price:integer
model(モデルを生成します)

 上記を実行すると、モデル(app/models/item.rb)と後述するマイグレーション(db/migrate/20110211XXXXXX_create_items.rb)が作られます。この例では文字列型の name というカラムと 数値型の price というカラムを持った Item という名前のモデルが作られます。

> rails g controller items recent
controller(コントローラーを生成します)

 この例では、 ItemsControllerというコントローラー(app/controllers/items_controller.rb)が作られ、さらにそのアクションとして、recentメソッドが定義されます。また、アクションに対応するビュー(app/views/items/recent.html.erb)が作られ、config/routes.rbにルーティング(これは後で説明します)の情報(get "items/recent")が追加されます。

> rails g migration add_description_to_items description:string
migration(マイグレーションを生成します)

 Railsのマイグレーションとは、データベースのスキーマに対する個々の変更をそれぞれ対応するファイルにRubyコードとして記述するもので、複数の開発者の間でスキーマの変更を共有し、効果的に管理するのに役立ちます。

 上の例では、itemsテーブルにdescriptionという名前の文字列型のカラムを追加するマイグレーションが作られます。マイグレーションファイルの中身やコマンドの使い方については後で詳しく説明します。

Rakeについて

 RakeとはRuby製のビルドツールです。ちょうどMakeのRuby版ということでこの名前が付いています。“タスク”という単位で処理を記述し、それらの依存関係を定義することができます。rakeコマンドを使ってそれらのタスクを実行します。

 rakeコマンドは、カレントディレクトリにあるRakefileという名前のファイルを読み込んで処理を行います。Railsアプリケーションの開発では、このRakeを使用してさまざまな処理を行います。独自にrakeタスクを定義したい場合は、lib/tasks以下に.rakeという拡張子を付けたファイルを配置し、そこにタスクを記述します。

 タスクの一覧は rake --tasks(または rake -T)を実行することで確認できます。また、タスク名を指定して絞り込むこともできます(例:rake -T db)。

データベース関連のrakeタスク

 データベース関連のrakeタスクには“db:”というネームスペースが付けられています。データベースのマイグレーションを行うには、以下を実行します。

> rake db:migrate

 マイグレーションの現在の状態を確認するには次のようにします。

> rake db:migrate:status
出力例:
rake db:migrate:status
database: db/development.sqlite3
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20110211161409  Create items
   up     20110211162505  Add description to items

 一度実行したマイグレーションを取り消してデータベースを1世代前の状態に戻すには次のようにします。

> rake db:rollback

 引数に「STEP=n」を付けることで何世代戻すかを指定することができます。

> rake db:rollback STEP=2

URLをアクションに結びつける“ルーティング”

 Railsでは、ユーザーからのリクエストのインターフェイス部分、すなわち、URLやHTTPメソッドをどのコントローラーのどのアクションに結びつけるかを、config/routes.rbで定義します。このマッピングのことをルーティングと呼びます。

 routes.rbでの記述は、複数のマッピングを1行で記述するなど、プログラムとしての側面が強く、最終的にどのようなマッピングが定義できているかを網羅的に把握することができません。この点を支援してくれるのがrake routesです。

 rake routesを実行するとconfig/routes.rbに定義されているルーティングの情報が整形されて出力されます。

> rake routes
       users GET    /users(.:format)          {:action=>"index", :controller=>"users"}
             POST   /users(.:format)          {:action=>"create", :controller=>"users"}
    new_user GET    /users/new(.:format)      {:action=>"new", :controller=>"users"}
   edit_user GET    /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
        user GET    /users/:id(.:format)      {:action=>"show", :controller=>"users"}
             PUT    /users/:id(.:format)      {:action=>"update", :controller=>"users"}
             DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"}
items_recent GET    /items/recent(.:format)   {:controller=>"items", :action=>"recent"}

 引数に“CONTROLLER=コントローラー名”を付けることで絞り込むことができます。

> rake routes CONTROLLER=items

ツールをより快適に使う

 以上のように、railsコマンドやrakeはRailsアプリケーションを実装する上で欠かせない便利なツール群です。しかし、コマンドの実行のたびにRailsアプリケーションをロードするので、毎回少し時間がかかってしまいます。それを解消するために本記事の筆者の1人である@jugyoが作ったツールが「rails-sh」です。rails-shは、あらかじめRailsアプリケーションをロードした状態で起動するコマンドラインシェルのようなものです。

 rails-shを使うと、Railsの各種コマンドをすばやく実行することができます。筆者の環境では、10秒ほどかかっていたrake routesの実行が、rails-shで1秒ほどに短縮できました。rails-shの詳細については以下を参照してください(なお、rails-shのWindowsでの動作は未確認です)

今回のまとめ

 本記事では、Railsの概要を理解するために、RailsにおけるMVC、Railsアプリケーションの構造、開発に頻繁に利用するrailsコマンド、rakeコマンドを解説しました。

 また、これらに関連して、マイグレーションやルーティングといった概念についても簡単に触れました。本記事を通じて、Railsアプリケーションがどのような構造になっているのか、どんなツールを使いながら開発していくのかのイメージを持っていただけたなら幸いです。次回は、Railsを構成するコンポーネントを概観し、その中で汎用的に利用されるActiveSupportについて詳しく見ていきます。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。