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

RailsアプリからDB2にアクセスするための基礎知識

 

日本アイ・ビー・エム株式会社
Team Ruby
成毛久美子
2008/10/3

プロジェクトの作成と設定

 まず、プロジェクトを作成します。

プロジェクトの作成

 コマンドプロンプトを開き、プロジェクトを作成したいディレクトリへ移動します。「rails プロジェクト名」でプロジェクトが作成されます(リスト4)。今回はプロジェクト名を「demo」としています。

 C:\の下でプロジェクトを作成すると、プロジェクト名のディレクトリが作成され、その下にたくさんのファイルが用意されます。今後は、C:\demoで作業を行いますので、ディレクトリを移動します。

●リスト4 プロジェクト「demo」の作成と作業ディレクトリへの移動
C:\>rails demo        <--プロジェクトの作成 
      create
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  config/initializers
   …(略)… C:\>cd demo <--作業ディレクトリに移動 C:\demo>

データベース接続の設定

 データベースへの接続を定義します。demoディレクトリ下のconfig\database.ymlというファイルをエディタで開き、developmentと記載されている部分をサンプル1のように編集します。

 DB2へ接続する場合は、adapterにibm_dbを指定します。database、username、passwordは、データベース名、データベースへの接続ユーザー名、接続ユーザーのパスワードを指定します。この後、編集・作成するファイルはすべてUTF-8(BOMなし)で保存します。

●サンプル1 config\database.yml(抜粋)
development:
  adapter: ibm_db
  database: rubydb
  username: db2admin
  password: db2admin

アプリケーションの作成

 それでは腕試しに簡単なアプリケーションを作成してみましょう。Railsには、簡単なテーブル保守アプリケーションを作成するscaffoldという機能がありますが、今回はより見栄えがよく、いろいろなカスタマイズができるActiveScaffoldを使ってテーブル保守アプリケーションを作ってみたいと思います。

 ユーザーの名前とemailなどを登録できるユーザー表を作成し、Web上からデータの登録・更新・削除を行えるようにします。

ActiveScaffoldプラグインの導入

 ActiveScaffoldはプラグインとして提供されていますので、script\plugin installを使うとスムーズに導入できます。リスト5のようにURLを指定すると、最新版のActiveScaffold(本稿執筆時は、v1.1.1)が導入されます。

●リスト5 ActiveScaffoldの導入
C:\demo>ruby script\plugin install http://activescaffold.googlecode.com/svn/tags/active_scaffold/
+ ./CHANGELOG
+ ./MIT-LICENSE
+ ./README
+ ./Rakefile
+ ./environment.rb
+ ./frontends/default/images/add.gif
+ ./frontends/default/images/arrow_down.gif

…(略)… C:\demo>

モデルの作成とテーブルの作成

 Railsは、Model View Controller(MVC)アーキテクチャに基づいたフレームワークです。

 今回処理したいデータは、ユーザー情報ですので、Railsでユーザーのモデルを作ります。ユーザー表(user)には、名前を格納するstring型のname、メールアドレスを格納するstring型のemail、入社日を格納するdate型のhire_dateを作成します。

 モデルの作成はリスト6のように、scriptディレクトリのgenerateを使い、それぞれのデータ型を定義したうえで、スケルトンを生成します。

●リスト6 モデルの作成
C:\demo>ruby script\generate model user name:string email:string hire_date:date
      exists  app/models/
      exists  test/unit/
      exists  test/fixtures/
      create  app/models/user.rb
      create  test/unit/user_test.rb
      create  test/fixtures/users.yml
      create  db/migrate
      create  db/migrate/001_create_users.rb
C:\demo>

 モデルを作成すると、データベースに表を作成するスクリプトdb\migrate¥001_create_users.rbが作成されるので、リスト7のように、rakeを使ってデータベースに反映させます。

●リスト7 migrateを使ったデータベーススキーマの作成と反映
C:\demo>rake db:migrate
(in C:/ruby/demo)
== 1 CreateUsers: migrating ===================================================
-- create_table(:users)
   -> 0.5470s
== 1 CreateUsers: migrated (0.5470s) ==========================================
C:\demo>

 データベースに「users」という名前でユーザー表が作成されていることを確認します。指定したカラムのほかに、ID、CREATED_AT、UPDATED_ATが作成されます。IDは、Railsが内部的に利用します。CREATED_AT、UPDATED_ATは、カラム名のとおり、データの作成日、更新日が入ります。

 リスト8のように、db2コマンドでデータベースにアクセスし、確認します。

●リスト8 表の内容を確認する
C:\IBM\SQLLIB\BIN>db2 connect to rubydb user db2admin using db2admin

…(略)… C:\IBM\SQLLIB\BIN>db2 describe table users Data type Column Column name schema Data type name Length Scale Nulls ------------------------------- --------- ------------------- ---------- ----- ------ ID SYSIBM INTEGER 4 0 いいえ NAME SYSIBM VARCHAR 255 0 はい EMAIL SYSIBM VARCHAR 255 0 はい HIRE_DATE SYSIBM DATE 4 0 はい CREATED_AT SYSIBM TIMESTAMP 10 0 はい UPDATED_AT SYSIBM TIMESTAMP 10 0 はい 6 レコードが選択されました。 C:\IBM\SQLLIB\BIN>

コントローラの作成

 続いて、コントローラを作成します。app\controllersディレクトリの下にusers_controller.rbというファイルを作成し、サンプル2のように記述し保存します。「active_scaffold :user」で、ActiveScaffoldの使用を指定し、「layout "activescaffold"」で、レイアウトは、「activescaffold」というファイルを使用するようにします。

●サンプル2 users_controller.rbの記述
class UsersController < ApplicationController
  active_scaffold :user
  layout "activescaffold"
end

標準レイアウトの追加

  コントローラーで指定した、レイアウトファイルを作成します。app\views\layoutsの下に、activescaffold.erbを作成し、サンプル3のように記述し、保存します。

●サンプル3 レイアウトファイル(activescaffold.erb)の作成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
   <title>Site Administration</title>
   <%= javascript_include_tag :defaults %>
   <%= active_scaffold_includes %>
   
</head>
<body style="background: #DDD;">
    <div>
        <div style="float: left; width: 10%;">
            <a href="/users">Users</a><br/>
        </div>
        <div style="float: right; width: 90%;">
           <%= yield %>
        </div>
    </div>
</body>
</html>

サーバの起動と動作確認

 では実際Webサーバを起動して動作を確認してみましょう。ここではRailsパッケージに含まれている簡易WebサーバWEBlickを使って動作確認を行います。

 Webサーバ立ち上げの際には、DB2のクライアントの文字コードに注意する必要があります。OSがWindowsなので、DB2側はクライアントがシフトJIS環境だと認識しています。しかし、RailsはUTF-8を使っていますので、そのままだと文字化けが起こってしまいます。

 そこで、DB2CODEPAGEにおいてクライアントをUTF-8(コードページ1208)に設定する必要があるのです。この設定は、Webサーバを起動するコマンドプロンプトで「set DB2CODEPAGE=1208」と指定することで可能です(リスト9)。

 Webサーバは、「ruby script\server」で起動します。リスト9の3行目以降のようなメッセージが出れば起動していますので、コマンドラインは落とさずに、Webブラウザから「http://localhost:3000/Users/list」にアクセスします。図1のような画面が表示されれば、ひとまず完成です。

●リスト9 WEBrickサーバを起動する
C:\demo>set DB2CODEPAGE=1208 クライアントの文字コードを変更しておく
C:\demo>ruby script\server WEBrickの起動
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-09-10 21:22:19] INFO  WEBrick 1.3.1
[2008-09-10 21:22:19] INFO  ruby 1.8.6 (2007-09-24) [i386-mswin32]
[2008-09-10 21:22:19] INFO  WEBrick::HTTPServer#start: pid=3868 port=3000
●図1 Webブラウザからアクセスしたところ


前のページへ

2/4

次のページへ

Index
DB2でさくさく実現するRESTfulなDBアプリ(1)
RailsアプリからDB2にアクセスするための基礎知識
・環境の作成
DB2 9.5の無償版 Express-Cを導入|Ruby実行環境を整える|Railsの導入|ibm_dbドライバもパッケージから導入できる|データベースの作成
・プロジェクトの作成と設定
プロジェクトの作成|データベース接続の設定
→ Page 2
・アプリケーションの作成
ActiveScaffoldプラグインの導入|モデルの作成とテーブルの作成|コントローラの作成|標準レイアウトの追加|サーバの起動と動作確認
・ユーザー表へのカラムの追加
カラム追加用スクリプトとデータベースへの反映|関連付けの作成|組織表の作成とユーザー表の修正
・組織コントローラの作成
関連付けの追加
・アプリケーションの実行・動作の確認
・さらにカスタマイズする
・次回、実践編は……

DB2でさくさく実現するRESTfulなDBアプリ



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

注目のテーマ

Database Expert 記事ランキング

本日月間