SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

iPhone+Ruby on Rails連携テクニック

iPhone とRuby on Railsを超簡単に連携する ObjectiveResource
- Ruby on Rails編

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>&#12397;&#12416;&#12356;</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>&#12362;&#12394;&#12363;&#12377;&#12356;&#12383;</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>&#32013;&#26399;&#12364;&#12365;&#12388;&#12356; !!</text> 
    <updated-at type="datetime">2010-04-19T00:53:18+09:00</updated-at> 
  </talk> 
</talks> 

 また、クライアントからのXMLデータによる更新も受けつけます。さらにRuby on RailsはRESTfulな設計になっているので データの取得や更新がシンプルなURLで指定でき、iPhoneやリッチクライアント向けのサーバーとしては最適です。

次のページ
ObjectiveResourceを使ったサーバー連携

この記事は参考になりましたか?

iPhone+Ruby on Rails連携テクニック連載記事一覧
この記事の著者

吉田裕美(ヨシダユウミ)

有限会社 EY-Office 取締役CADのベンチャー企業でCADのコア部分や図面管理システムなどの開発に従事した後、独立しJava,Ruby,PerlでWebアプリを中心に開発してきた。現在は殆どの開発はRuby on Rails。ここ数年はソフトウェアエンジニアの教育に興味をもち、従来の知識偏重な教育ではなく現実の問題を解決できるエンジニアを育てる教育に注力している。またLisp等に関心...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5127 2010/04/22 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー