4. scaffoldを利用した開発(1)
Quick Start 4章 scaffoldを利用した開発
4.1 scaffold概要
4.2 scaffoldジェネレータの実行
4.3 テーブルの作成
4.4 アプリケーションへのアクセス
4.5 モデル(Active Record)
4.6 コントローラ(Action Controller)
4.7 ビュー(Action View)
4.8 ルーティング
4.1 scaffold概要
Railsには、コードを自動生成するジェネレータが複数用意されています。ここでは、「scaffold」というジェネレータを紹介します。
scaffold(「足場」という意味)は、データベースのテーブルへの登録(CREATE)、参照(READ)、更新(UPDATE)、削除(DELETE)(英語の頭文字をとって、「CRUD」といいます)を行うWebアプリケーションのひな形となるソースコードを自動生成します。scaffoldを実行させれば、「足場」という名の通り、最低限のCRUDを行うWebアプリケーションを作成することができます。
実際の開発においては、使用する機会が少ないかと思いますが、ここではRailsの基本構造を知るために利用します。
scaffoldを実行した結果出来上がるアプリケーションは、以下のような画面遷移となります。
4.2 scaffoldジェネレータの実行
では、実際にscaffoldで、アプリケーションを作成してみましょう。
今回は商品を管理するテーブル(itemsテーブル)に対して登録、参照、更新、削除ができるアプリケーションにします。
itemsテーブルでは、商品名(name)と、価格(price)と、商品説明(description)の3つのカラムを持つこととします。
データベースは、前章に引き続き、SQLiteを利用します。
コマンドラインを開き、前章で作成したC:\sampleの直下に、新しいRailsアプリケーション「scaffoldTest」を作成します。
c:\ > cd c:\sample
c:\sample > rails new scaffoldTest
作成できたら、scaffoldTestフォルダに移動し、以下のコマンドを入力します。
c:\sample\scaffoldTest > rails g scaffold item ^ name:string price:integer description:text (「rails g」は「rails generate」でも可能)
※画面の都合上、コマンド途中で「^」を入力して改行しています。1行で入力していただいても結構です。
これだけで、ソースコードが自動生成されます。
生成されたファイルは、以下の通りです。
4.3 テーブルの作成
ほとんどのことは自動生成してくれるscaffoldですが、データベースのテーブルの作成は、自分で行う必要があります。
しかし、データベースのコンソールを開いて、SQLでテーブルの作成をする必要はありません。
Railsでは、テーブルの操作(作成・削除、カラムの追加・削除等)を行う際、マイグレーションを利用します。
マイグレーションは、「マイグレーションファイル」と呼ばれるファイルにテーブル操作の内容を記載し実行します。
これにより、テーブルの追加や変更が生じた際、DBを操作せずとも簡単に反映させることができます。
scaffoldでコードを自動生成した際に、itemsテーブルを作成するためのマイグレーションファイルも生成されています。
それが、「db\migrate\20110824061412_create_items.rb」というファイルです。
(先頭の数値はタイムスタンプのため、皆さんの環境で行っていただいたものと異なります)
詳しい記述については、後の章で説明をします。ここでは簡単に見ていきましょう。
class CreateItems < ActiveRecord::Migration def self.up create_table :items do |t| t.string :name t.integer :price t.text :description t.timestamps end end def self.down drop_table :items end end
upメソッドとdownメソッドがあります。upメソッドで、itemsテーブルを作成します。
カラムは、scaffoldを実行した際に指定した、name、price、descriptionを作成するようになっていますね。
では、実行してみましょう。
マイグレーションは、railsコマンドではなく、rakeコマンドを使います。
Rakeとは、Rubyで実装されたビルドツールです。「タスク」と呼ばれる実行単位で処理を定義しておき、rakeコマンドを使って実行します。
Ruby1.9をインストールすると、同時にインストールされていますので、再度インストールする必要はありません。
Railsには、rakeコマンドで実行できるタスクが、すでにいくつか用意されています。今回行うマイグレーションもその一つです。
以下のコマンドを入力して、マイグレーションを実行します。12
C:\sample\scaffoldTest > rake db:migrate (in C:/sample/scaffoldTest) == CreateItems: migrating ==================================================== -- create_table(:items) -> 0.0010s == CreateItems: migrated (0.0010s) ===========================================
これだけで、テーブルが生成されています。
4.4 アプリケーションへのアクセス
では、実際にアクセスしてみましょう。
前章と同様に、サーバを起動します。
c:\sample\scaffoldTest > rails s
サーバが起動したら、indexページを開きましょう。以下のURLを入力してページを開きます。
http://localhost:3000/items
itemsテーブルの一覧画面が開きます。まだitemsテーブルは空ですので1件も表示されていません。
New Itemを押下すると、新規登録画面が開きます。
任意の値を入力して、「Create Item」ボタンを押下すると、データが1件登録され、詳細画面に遷移します。
一覧画面から詳細画面に行くこともできます。
一覧画面、もしくは詳細画面の「Edit」を押下すると、編集画面に遷移します。
削除の際は、一覧画面から「Destroy」を押下します。確認のダイアログボックスが表示され「OK」を押下すると削除されます。
1 もしrakeコマンド実行時に「rake aborted! uninitialized constant Rake::DSL」というエラーが表示された場合、rakeをバージョンダウンさせる必要があります。C:\sample\scaffoldTest\Gemfileをテキストエディタで開き、最終行に「 gem ‘rake’, ‘0.8.7’」を追加してください。その後、コマンドプロンプトにて、C:\sample\scaffoldTest\をカレントディレクトリとし、「bundle update rake」と入力し、コマンドを実行させるとバージョンダウンします。
2 今回はSQLiteを利用していますので不要ですが、他のデータベースを利用する際は、テーブル作成の前にデータベースを作成する必要があります。こちらも「rake db:create」というrakeコマンドを使って作成することができます。