RailsアプリからDB2にアクセスするための基礎知識
プロジェクトの作成と設定
まず、プロジェクトを作成します。
プロジェクトの作成
コマンドプロンプトを開き、プロジェクトを作成したいディレクトリへ移動します。「rails プロジェクト名」でプロジェクトが作成されます(リスト4)。今回はプロジェクト名を「demo」としています。
C:\の下でプロジェクトを作成すると、プロジェクト名のディレクトリが作成され、その下にたくさんのファイルが用意されます。今後は、C:\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なし)で保存します。
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)が導入されます。
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を使い、それぞれのデータ型を定義したうえで、スケルトンを生成します。
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を使ってデータベースに反映させます。
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コマンドでデータベースにアクセスし、確認します。
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」というファイルを使用するようにします。
class UsersController < ApplicationController active_scaffold :user layout "activescaffold" end
標準レイアウトの追加
コントローラーで指定した、レイアウトファイルを作成します。app\views\layoutsの下に、activescaffold.erbを作成し、サンプル3のように記述し、保存します。
<!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のような画面が表示されれば、ひとまず完成です。
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
2/4 |
RailsアプリからDB2にアクセスするための基礎知識
DB2 9.5の無償版 Express-Cを導入|Ruby実行環境を整える|Railsの導入|ibm_dbドライバもパッケージから導入できる|データベースの作成
・プロジェクトの作成と設定
プロジェクトの作成|データベース接続の設定
ActiveScaffoldプラグインの導入|モデルの作成とテーブルの作成|コントローラの作成|標準レイアウトの追加|サーバの起動と動作確認
カラム追加用スクリプトとデータベースへの反映|関連付けの作成|組織表の作成とユーザー表の修正
・組織コントローラの作成
関連付けの追加
・アプリケーションの実行・動作の確認
・次回、実践編は……
DB2でさくさく実現するRESTfulなDBアプリ |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
|
|