まずRoRを使って、付箋紙の情報を管理するサーバを立ち上げましょう。これは、AIRで作る付箋紙クライアントの情報を保持するサーバで、付箋紙の登録・取得・削除を行います。
付箋紙クライアントが起動すると、このサーバから付箋紙情報を取得してその内容を表示し、新しい付箋紙を貼り付けたときや付箋紙の内容を更新したときには、そのサーバにすべて送られます。
これは、付箋紙というモデルに対するCRUD動作といえます。CRUD動作とは、「Create(登録)」「Read(読み込み)」「Update(更新)」「Delete(削除)」の頭文字を合わせた単語で、データベースの基本操作をあらわします。
RoRでは、scaffoldという機能を使うことで、モデルに対するCRUD操作をするアプリケーションを簡単に作ることができます。
RoRのバージョン1.2から、通常のHTMLページのscaffoldだけでなく、アプリケーションとの連携するためのRESTfulなWebAPIを生成するためのジェネレータとしてscaffold_resourceが付属しています。このジェネレータは、HTMLによるCRUD操作だけでなく、RESTfulでXMLを使ったCRUD操作も提供します。これを使えば、AIRからも付箋紙のCRUD動作が行えます。
ではscaffold_resourceを使って、付箋紙サーバを構築してみましょう。まずはいつもの通りにRoRのプロジェクトを開始します。この機能はRoR 1.2以降の機能ですので、必ず1.2以降をインストールしておいてください。
今回の例ではデータベースにSQLite3を使っていますが、MySQLでも動きますので、環境に合わせて変更してください。SQLite3を使う場合には最新版をインストールしておいてください。古いバージョンでは、マイグレーションに失敗する場合があります。
$ rails stickies -d sqlite3
$ cd stickies
$ rake db:sessions:create
$ cat <<__EOF__ > config/environment.rb
require File.join(File.dirname(__FILE__), 'boot')
Rails::Initializer.run do |config|
config.action_controller.session_store = :active_record_store
end
__EOF__
付箋紙を保持するモデルをStickyモデルとしましょう。付箋紙に付帯する情報は、「メモの内容」「貼った位置」「大きさ」の3種類の情報です。「付箋の色や文字の大きさを変えたい」「写真を貼り付けられるようにしたい」などいろいろな機能も思いつくのですが、まずはシンプルな3つの情報だけにします。
メモの内容は単純な文字列なのでtext型で定義します。貼った位置情報は、いろいろなPCで画面サイズが違うことから、X/Yのドット単位の座標データではなく、画面に対する割合で保持するようにします。
画面の真ん中に付箋の左上が来る場合には、「X=0.5, Y=0.5」という具合です。この位置情報は小数点を使うので、float型で定義します。付箋の大きさは、文字の配置があるので、そのままドット単位でinteger型として定義します。
scaffold_resourceを使えば、モデルの定義とそのモデルをRESTfulに操作するためのコントローラを同時に生成してくれます。
script/generate scaffold_resource モデル名 [属性名:型 属性名:型 ...]という形式で呼び出すことができるので、早速、実行してみましょう。
$ ruby script/generate scaffold_resource sticky body:text x:float y:float width:integer height:integer created_at:timestamp updated_at:timestamp
Stickyモデルとそのマイグレーションファイル、Stickiesコントローラが生成され、ルートファイル「config/route.rb」に必要なルートを追記されました。次にデータベースにテーブルを作るためにマイグレートを実行します。
$ rake db:migrate
これだけで、RESTfulに付箋紙を操作できるWebアプリケーションができあがりました。
|