目次へ

4. scaffoldを利用した開発(1)

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行で入力していただいても結構です。

これだけで、ソースコードが自動生成されます。

生成されたファイルは、以下の通りです。

scaffoldで生成されたファイル

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コマンドを使って作成することができます。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp