db2 on Rails
DB2でさくさく実現するRESTfulなDBアプリ(3)

FirebugでRESTfulなDBアプリに挑戦!!

日本アイ・ビー・エム株式会社
Team Ruby
野間 愛一郎
2009/1/5
これまでは、Ruby on Railsの環境づくりや、既存の表(レガシー表)に対してActiveRecordを使用する方法などを説明してきました。今回は、いよいよRuby on RailsにおけるREST(REpresentational State Transfer)に迫っていきます。Ruby on Rails2.0では、script/generate scaffoldがREST対応になったことや、ActiveResourceの標準搭載、AtomPub対応など、RESTfulサービスの実装が進みました。本稿では、RESTによるデータベース操作を、さまざまな方法で体験してみましょう。

Firebugを利用したデバッグ

 本稿はスクリプトの確認にFirebugというFirefoxアドインを使用します。

 Firebugを利用するにはFirefoxが必要です。お持ちでない方は、以下のURLより事前にダウンロードし、導入しておいてください。

 FirebugはFirefoxのアドインの1つで、Firefoxで閲覧しているページの内容を分析し、編集、デバッグ、モニタリングなどが可能な万能ツールです。

 表示されている画面をモニタしながらデバッグが可能なので、Ajaxなど、リロードを伴わずにサーバとデータのやりとりを行って処理を進めていくアプリケーションの開発には、非常に強力なツールです。特にAjaxなどの開発において、XMLHttpRequestにより、どのようなXMLがやりとりされているかを動的に確認できる点は、とても便利です。

 Firebugの導入方法はコラムで紹介していますので、参考にしてください。

RESTの考え方をあらためて確認

 RESTREpresentational State Transfer)は単なる機能を示す言葉ではありません。ROA(Resource Oriented Architecture)の考え方をベースにしたアーキテクチャスタイルとして定義されます。つまり、リソースを中心に物事を考えるアーキテクチャです。

 現在RESTという言葉の使われ方には、本来提唱されているRESTの意味を含まない、あいまいな使われ方も多く存在します。本稿では、RESTとは、すべてのリソースは一意のURIを持ち、リソースに対する基本操作(CRUDCreate、Read、Update、Delete)はHTTPのメソッド(GET、POST、PUT、DELETE)でリクエストするものとしています。

 リソース指向とは何か、RESTとは何かをもっと詳しく知りたい方、特にRESTとSOAPの違いについて理解したい方はぜひ、『RESTful Webサービス』(Leonard Richardson、Sam Ruby著、オライリー・ジャパン、ISBN: 978-4-87311-353-1)を読んでみてください。

Rails環境の準備

 連載第1回で使用した、「demo」プロジェクトを使用します。環境がない方は、連載第1回を参考に、導入〜データベース接続の設定〜ActiveScaffoldプラグインの導入までを実施しておいてください。

モデルの作成とデータベースへの反映

 scriptディレクトリのgenerateを使い、データ型を定義・生成していきますが、今回はアプリケーションの制御や表示のコードを生成するために、「scaffold」というオプションを使用します(リスト1)。この例では、リソースMovieが属性(title:string、year:integer、category:string、desc:xml)を持っています。コマンドを実行すると、コントローラと各ビューファイルが自動的に生成されます。

リスト1 scaffoldを使ったデータベーススキーマを含むスケルトンの作成(movie)
C:\demo>ruby script\generate scaffold movie title:string year:integer category:string desc:xml
      exists  app/models/
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/movies
      exists  app/views/layouts/
      exists  test/functional/
      exists  test/unit/
      create  app/views/movies/index.html.erb
      create  app/views/movies/show.html.erb
      create  app/views/movies/new.html.erb
      create  app/views/movies/edit.html.erb
      create  app/views/layouts/movies.html.erb
      create  public/stylesheets/scaffold.css
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
      create    app/models/movie.rb
      create    test/unit/movie_test.rb
      create    test/fixtures/movies.yml
      exists    db/migrate
      create    db/migrate/002_create_movies.rb
      create  app/controllers/movies_controller.rb
      create  test/functional/movies_controller_test.rb
      create  app/helpers/movies_helper.rb
       route  map.resources :movies

 scaffold の生成によって、データベースのスキーマ定義も完了していますので、次にrakeを使ってスキーマ定義をデータベースに反映させます(リスト2)。

リスト2 スキーマ定義の反映(migrate)
C:\demo>rake db:migrate
(in C:/demo)
== 1 CreateMovies: migrating ========================================
-- create_table(:movies)
   -> 0.1500s
== 1 CreateMovies: migrated (0.1500s) =================================

 実はこれだけで、リソースMovieの定義、それに対するCRUDを提供するRESTfulなAPI、そのAPIへのWebインターフェイスが生成されるのです。

Webサーバの起動

 Webサーバ(WEBrick)を起動します。起動時には接続しているデータベースの文字コードセットに気を付けましょう。RailsではUTF-8を使用していますので、データベース側(実際にはデータベースに接続しているクライアントの文字コード)もそれに合わせます(リスト3)。

リスト3 文字コードのセットとWEBrickの起動
C:\demo>set DB2CODEPAGE=1208

C:\demo>ruby script\server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-11-11 02:09:22] INFO  WEBrick 1.3.1
[2008-11-11 02:09:22] INFO  ruby 1.8.6 (2007-09-24) [i386-mswin32]
[2008-11-11 02:09:22] INFO  WEBrick::HTTPServer#start: pid=6976 port=3000

 Webサーバ起動後、WebブラウザにてURLに「http://localhost:3000/movies」と指定します(図1)。

図1 リスト1、2で生成した内容を表示

 「New movie」をクリックして、任意にテストデータを入力してみてください(図2)。

 今回は、簡単な形式の映画情報を管理するアプリケーションを取り扱います。

  「Title」に映画のタイトル、「Year」に公開年、「Category」に映画のカテゴリ、「Desc」に映画の詳細情報(任意のXML形式で)を入力します。

図2 データベースにテストデータを登録

 

  1/5 次のページへ

Index
DB2でさくさく実現するRESTfulなDBアプリ(3)
FirebugでRESTfulなDBアプリに挑戦!!
→ Page 1
・Firebugを利用したデバッグ
・RESTの話をあらためて
 コラム1:Firebugの導入手順
・Rails環境の準備
 モデルの作成とデータベースへの反映|Webサーバの起動
  Page 2
・URIでCRUDを実現する
 コラム2:Webクエリを使用して、Excelからリソースへアクセスする
  Page 3
JavaScript(Jester)でリソースに直接アクセスする
・Jesterの準備
 レイアウトファイルの編集|Webサーバの再起動|modelクラスの宣言
 コラム3:JesterのJSONサポート
  Page 4
 CRUDの実行1(Create)
 CRUDの実行2(Read)
  Page 5
  CRUDの実行3(Update)
   CRUDの実行4(Delete)

バックナンバー DB2でさくさく実現するRESTfulなDBアプリ



Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間