Ruby のブログを 10 分で作成
執筆: Brian Leonard、管理: Gail Chappell
2007 年 12 月 [リビジョン番号: V6.0--6]
このチュートリアルでは、NetBeans IDE での Ruby サポートを使用して、簡単な Web アプリケーションを作成し、実行します。この例では、Ruby のブログを作成する方法を説明します。モデルの作成、コントローラの追加、ビューの作成という基本的なワークフローをたどっていきます。
目次
|
|
 |
チュートリアルの要件
このチュートリアルでは、次のテクノロジとリソースが必要です。
注: このチュートリアルは Rails 1.2.5 向けに記述されており、スキャフォールドに言及しています。Rails 2.0 では、スキャフォールドはサポートされていません。
サンプルデータベースの作成
注: このチュートリアルでは、MySQL データベースサーバーを使用します。Ruby アプリケーションでの MySQL データベースサーバーの使用については、「Ruby サポートのインストールと設定」を参照してください。このドキュメントでは、代わりに Java DB データベースサーバーを使用する場合のヒントも説明します。
Ruby on Rails プロジェクトを作成する前に、次で説明するように rubyweblog_development データベースを作成します。
- コマンドウィンドウを開きます。
- MySQL データベースサーバーをまだ起動していない場合、起動します。
- 次のコマンドを入力して開発用データベースを作成し、Enter キーを押します。
mysqladmin -u root -p create rubyweblog_development
注: root ユーザーにパスワードが必要ない場合、引数 -p を省略してください。
Ruby on Rails アプリケーションの作成
まず、Ruby on Rails プロジェクトを作成します。デフォルトでは、アプリケーションは、Ruby on Rails プロジェクトのアプリケーション用規則に準拠したディレクトリ構造内に作成されます。
- NetBeans IDE で、「ファイル」>「新規プロジェクト」を選択します。
「カテゴリ」フィールドで「Ruby」、「プロジェクト」フィールドで「Ruby on Rails アプリケーション」を選択します。「次へ」をクリックします。
注: IDE で Ruby プロジェクトを最初に作成すると、バンドルされた JRuby ソフトウェア以外に Ruby のインストールが存在するかどうかが IDE によって確認されます。存在する場合、使用するソフトウェアを選択するよう求めるダイアログが表示されます。バンドルされた JRuby インタプリタを使用する場合は、「JRuby」を選択します。これ以外のインストールされている Ruby を使用する場合は、その Ruby を選択します。詳細は、「Ruby サポートのインストールと設定」チュートリアルの「独自の Ruby インストールを使用するための IDE の設定」を参照してください。
-
「プロジェクト名」フィールドに「
rubyweblog」と入力します。その他のデフォルト設定をすべて受け入れます。
「完了」をクリックして新しいプロジェクトを作成します。
プロジェクトと同じ名前のプロジェクトディレクトリが IDE によって作成されます。次の項目が表示されます。
- 「プロジェクト」ウィンドウにアプリケーションの基本的なカテゴリ。特に注目されるのは「コントローラ」、「モデル」、「ビュー」の各ノードです。このチュートリアルでは、モデルの作成、コントローラの追加、ビューの作成という基本的なワークフローをたどっていきます。
- 「出力」ウィンドウに表示される、アプリケーションを構成するファイルの一覧。「出力」ウィンドウでリンクをクリックすると、編集領域でファイルが開きます。
- 編集領域の
database.yml ファイル。
データベース環境の設定
次の手順では、database.yml ファイルを編集します。このファイルはすでに MySQL アダプタと開発用データベースを利用できるように設定されています。root ユーザーでパスワードが必要でないかぎり、何も設定する必要はありません。
- 編集領域で、development 設定にパスワードを追加して
database.yml を編集します。
database.yml ファイルを保存して閉じます。
注: 使用中のオペレーティングシステムのホストファイルに localhost がない場合、代わりに 127.0.0.1 を使用します。
モデルの作成
ここでは Rails ジェネレータを使用して、アプリケーションのモデルを作成します。rubyweblog アプリケーションでは、ブログ投稿のインスタンスを保存するための Post モデルが必要です。
- 「プロジェクト」ウィンドウで、「モデル」ノードを右クリックし、「生成」を選択します。
-
「Rails ジェネレータ」ダイアログで、「引数」フィールドに「Post title:string」と入力し、「了解」をクリックします。
Rails ジェネレータが Post という名前のモデルを作成します。「出力」ウィンドウには、モデル生成の一部として作成されたファイルが一覧表示されます。
- app/models/post.rb。Post モデルのメソッドを保持するファイル。
このファイルは編集領域でも開けます。
- test/unit/post_test.rb。Post モデル確認用の単体テスト。
-
test/fixtures/posts.yml。モデル生成用のテストフィクスチャー。
-
db/migrate/migrate/001_create_posts.rb。データベースの初期構造を定義するためのマイグレーションファイル。
データベースのマイグレーション
次に作業するのは 001_create_posts.rb というマイグレーションファイルです。
-
「出力」ウィンドウで 001_create_posts.rb ファイルへのリンクをクリックします。
ファイルが開き、次のコード例に示すように、posts という表を作成する self.up メソッド、および posts 表を破棄する self.down メソッドが作成されます。
コード例 1: 001_create_posts.rb のコード |
class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.column :title, :string
end
end
def self.down
drop_table :posts
end
end
|
-
「プロジェクト」ウィンドウで、「rubyweblog」ノードを右クリックし、「データベースマイグレーション」>「現在のバージョンへ」を選択します。
このアクションによってデータベースが更新され、posts 表が取り込まれます。マイグレーションが完了すると、「出力」ウィンドウに示されます。
コントローラの作成
次に Rails ジェネレータを使用して、Post モデルと連係するコントローラを作成します。このチュートリアルでは、スキャフォールドのコードを追加します。これは、ブログのエントリを作成、読み込み、更新、および削除するための単純な CRUD インタフェースです。
-
「プロジェクト」ウィンドウで、「コントローラ」ノードを右クリックし、「生成」を選択します。
「Rails ジェネレータ」ダイアログで、「名前」フィールドに「Blog」と入力します。「ビュー」フィールドは空白のままにします。「了解」をクリックします。
このアクションによって、ファイル blog_controller.rb が作成され、編集領域に表示されます。「プロジェクト」ウィンドウで「コントローラ」ノードの下に「blog_controller.rb」ノードが追加されます。
-
次のスキャフォールドのコードを追加して、blog_controller.rb を編集します。このコードは、Post モデルに基づいた単純な CRUD アプリケーションを提供します。
コード例 2: blog_controller.rb のコード |
class BlogController < ApplicationController
scaffold :post
end
|
アプリケーションの実行
次にアプリケーションをテストします。
-
「構成」ノードにある routes.rb を開きます。次の行を探します。
# map.connect '', :controller => "welcome"
- コメント符号 (#) を削除し、
welcome を blog に変更して、行を編集します。
-
「公開」ノードを展開し、index.html を右クリックして「削除」を選択します。
index.html はデフォルトの開始ページを表示しますが、これは表示したいページではありません。index.html を削除すると、Rails は routes.rb 内を検索して表示するページを見つけ出します。前の手順で、このページをブログに設定しました。
- 「ファイル」>「すべてを保存」を選択します。
-
ツールバーにある「主プロジェクトを実行」ボタンをクリックします。
このアクションにより、Ruby on Rails フレームワークの一部である WEBrick サーバーが起動し、Web ブラウザが開きます。次は、アプリケーションの最初のページです。
図 1: rubyweblog のホームページ
-
「New post」リンクをクリックすると、次の図のようにアプリケーションの 2 ページ目が表示されます。
図 2: 新規投稿作成用のページ
-
タイトルを入力し、「Create」をクリックします。
サンプルのブログ投稿は次のようになります。
図 3: 正常なブログ投稿の作成
その他の可能な操作: フィールドの追加
ここでは「Title」フィールド以外のフィールドを追加し、ブログのテキスト入力用の「Body」列を posts 表に組み込めるようにします。フィールドの作成手順については、慣れてきたのではないでしょうか。
-
「データベースマイグレーション」ノードを右クリックし、「生成」を選択します。「Rails ジェネレータ」ダイアログで、「引数」フィールドに「AddBody」と入力し、「了解」をクリックします。
バージョン番号付きのマイグレーションスクリプト 002_add_body.rb が IDE によって作成され、編集領域でファイルが開きます。
-
def self.up の下に行を追加し、「mcol」と入力して Tab キーを押します。
mcol トリガーが置換され、3 つのパラメータを備えた次のコードテンプレートに変わります。
add_column :table, :column, :string
最初のパラメータに「posts」と入力して置き換え、Tab キーを押します。「body」と入力し、再度 Tab キーを押します。続いて「text」と入力して 3 つ目のパラメータを置き換えます。この行は次の文のようになるはずです。
add_column :posts, :body, :text
このマイグレーションにより、body 列が posts 表に追加されます。
- 「ファイル」>「すべてを保存」を選択します。
-
「rubyweblog」ノードを右クリックし、「データベースマイグレーション」>「現在のバージョンへ」を選択します。
またはソースファイルで右クリックし、ポップアップメニューから「実行」を選択します。
-
ブラウザに戻って「New Post」リンクをクリックし、次の図のように Ruby が新しい Body フィールドを認識していることを確認します。
図 4: Body フィールドのある New Post
さらにいくつかのブログエントリを作成します。例:
図 5: ブログ投稿の追加
その他の可能な操作: 入力の妥当性検査
ここでは Post クラスにコードを追加し、ユーザーが「Title」と「Body」の両フィールドに値を入力していることを確認できるようにします。
- 「プロジェクト」ウィンドウで「モデル」ノードを展開し、「post.rb」をダブルクリックしてエディタでファイルを開きます。
クラス定義の中で行を追加し、「vp」と入力してから Tab キーを押します。
vp トリガーが置換され、次のコードテンプレートに変わります。
validates_presence_of :attribute
- 「title, :body」と入力します。このコードは次のようになるはずです。
validates_presence_of :title, :body
アプリケーションを実行して、「New Post」をクリックし、「Create」をクリックします。
これで、アプリケーションで「Title」と「Body」を空白にできないことが表示されるようになりました。
その他の可能な操作: 一覧をブログのような外見にする
これまで、BlogController で使用されたスキャフォールドメソッドにより、Post モデルを簡単にテストできるようにする基本的な CRUD アプリケーションを作成してきました。ここでは、スキャフォールドメソッドで使用されたのと同じビューを生成し、ユーザーインタフェースをカスタマイズできるようにします。
- 「プロジェクト」ウィンドウで、「ビュー」ノードを右クリックし、「生成」を選択します。
- 「Rails ジェネレータ」ダイアログで、「生成」ドロップダウンリストから「scaffold」を選択します。
-
「モデル名」フィールドで「Post」、「コントローラ名」フィールドで「Blog」と入力します。「アクション」フィールドは空白のままにします。「上書き」を選択して BlogController を強制的に再生成するようにし、「了解」をクリックします。
IDE は Post モデルのビューを作成し、「出力」ウィンドウで内容を一覧表示します。
-
「ビュー」>「blog」を展開し、list.rhtml を開きます。これはブログエントリの一覧を表示するのに使用します。<h1> タグおよび <table> タグを削除し、次のコードと置き換えます。
コード例 4: list.rhtml のコード |
<h1>The Ruby Blog</h1>
<% @posts.each do |post| %>
<h2><%= post.title %></h2>
<p><%= post.body %></p>
<small> <%= link_to 'Permalink', :action => 'show', :id => post %></small>
<hr>
<% end %>
|
このコードは図 6 で示すように、post アクションの各インスタンスで Title、Body、および Permalink を作成します。
ヒント: liai (アクションおよびインデックス付きのリンク) は次のコードテンプレートのトリガーです。
<%= link_to "link text...", :action => "edit", :id => @item %>
-
アプリケーションを実行し、Post モデルの新しいインタフェースを確認します。
図 6: 改善された新しい Model インタフェース
-
ブログで最新のエントリを最初に表示するには、list.rhtml で @post の後ろに「.reverse」と追加してソート順を逆にします。
<% @posts.reverse.each do |post| %>
ファイルを保存してブラウザを再表示すると、次の図に示すようにブログが表示されます。
図 7: 順番を逆にしたブログ投稿
次の手順
>> その他の NetBeans Ruby ドキュメント