Ruby on Rails開発入門 2
ひとりったーWeb版を作る
自分のつぶやきが記録できる「ひとりったー」のWebアプリをRuby on Railsで作ってみます。
1.プロジェクトの作成
Ruby on Railsのプロジェクトはrailsコマンドで作成します。
% rails Hitoritter % cd Hitoritter
railsコマンドは引数で指定されたディレクトリを作り、そこにRailsで必要になるディレクトリやデフォルトのファイルを作ってくれます。
2.ひな形コードの作成
Ruby on Railsではコードジェネレータを使い必要なコードのひな形を作り、それを変更しながらアプリを作っていきます。ここではscaffoldという1つのテーブルのCRUD(作成、更新、表示、削除)が行える簡単なアプリを生成するひな形を使います。scaffoldではModel名(テーブル名)と属性(カラム名)を指定します。
ひとりったーにはつぶやいた文字列とつぶやいた日時が必要ですが、レコードの作成、変更日時カラムは自動的に作成されるので、Model名「talk」とつぶやいた文字列「text」を指定します。
% ./script/generate scaffold talk text:string
作成されたコードですがRuby on RailsはMVCフレームワークなので「Model」「View」「Controller」に分かれていています。
- Model…app/models/talk.rb、ビジネスロジックやRDBの操作のメソッドをここに定義します。
- View…app/views/talksディレクトリの.erbファイル、いわゆるテンプレートで表示するHTMLとプログラムで変化する部分を <% ~ %> でくくったRubyコード記述します。
- Controller…app/controllers/talks_controller.rb、リクエストを受けつけ、モデルなどを呼び出し処理を行い、テンプレートを使ってHTMLを組み立てる処理のまとめ役です。
3.テーブル作成
ここではアカウントや領域管理のないSQLite3を使うので、以下のrakeコマンド実行だけで、SQLite3上にtalksテーブルが作成されます。Ruby on Railsではよく行う操作をrakeコマンドとして組み込んであります。組み込まれた機能は rake -T で表示されます。
% rake db:migrate
sqlite3コマンドで作成されたテーブルを確認できます。
% sqlite3 db/development.sqlite3
sqlite> .schema talks
CREATE TABLE "talks" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "text" varchar(255), "created_at" datetime, "updated_at" datetime);
sqlite> .quit
%
Modelはtalkなので、テーブルはその複数形のtalksになります。カラムには指定したtextカラム以外にprimary keyにidカラム、作成日時のcreated_at、更新日時のupdated_atカラムが追加されています。
4.サーバーの起動
開発用のサーバーが内蔵されているので、すぐにアプリを実行できます。
% ./script/server
3000番のポートにサーバーが立ち上がるので、http://localhost:3000/talksにアクセスしてみます。今回作ったModelはtalkなので、URLのパスはその複数形のtalksになります。
5.コードの変更
このままでは一覧にはつぶやいた文字列しか表示されません。そこで一覧表示のテンプレートapp/view/talks/index.html.erbを以下のように変更します。
<h1>Listing talks</h1>
<table>
<tr>
<th>Created</th> ← 追加
<th>Text</th>
</tr>
<% @talks.each do |talk| %>
<tr>
<td><%=h talk.created_at.to_s(:db) %></td> ← 追加
<td><%=h talk.text %></td>
<td><%= link_to 'Show', talk %></td>
<td><%= link_to 'Edit', edit_talk_path(talk) %></td>
<td><%= link_to 'Destroy', talk, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New talk', new_talk_path %>
6.使ってみる
New Talksをクリックし、つぶやきをいくつか登録して一覧を表示すると下図のような画面になります

さてここでURLに http://localhost:3000/talks.xml を指定してみましょう。Safariではつぶやきのデータが表示されているように見えますが、ソースを見てみると次のようにXML形式で出力されている事が分かります。Ruby on RailsはこのようにXMLやJSONでの出力が簡単にできます。
<talks type="array">
<talk>
<created-at type="datetime">2010-04-19T00:31:05+09:00</created-at>
<id type="integer">1</id>
<text>ねむい</text>
<updated-at type="datetime">2010-04-19T00:31:05+09:00</updated-at>
</talk>
<talk>
<created-at type="datetime">2010-04-19T00:33:17+09:00</created-at>
<id type="integer">2</id>
<text>おなかすいた</text>
<updated-at type="datetime">2010-04-19T00:33:17+09:00</updated-at>
</talk>
<talk>
<created-at type="datetime">2010-04-19T00:53:18+09:00</created-at>
<id type="integer">5</id>
<text>納期がきつい !!</text>
<updated-at type="datetime">2010-04-19T00:53:18+09:00</updated-at>
</talk>
</talks>
また、クライアントからのXMLデータによる更新も受けつけます。さらにRuby on RailsはRESTfulな設計になっているので データの取得や更新がシンプルなURLで指定でき、iPhoneやリッチクライアント向けのサーバーとしては最適です。
