Active Recordのその先へ ~RailsでMongoDBを使う~
1. はじめに
最終回の今回は、Active Recordが対象とするRDB(リレーショナル・データベース)ではなく、最近話題のNoSQL(Not only SQL)をRuby on Rails(Rails)で使用する方法を解説します。NoSQLデータベースにはさまざまなタイプがありますが、今回はドキュメント指向データベース(Document-oriented Database)の1つである「MongoDB」を取り上げます。
MongoDBは、C++で記述された、オープン・ソースの非リレーショナル・データベースです。BSONと呼ばれる、JSON(JavaScript Object Notation)に似た"ドキュメント"形式で、データを管理します。高速に動作し、簡単にスケール・アウトが可能であることから、性能が要求されるシステムに向いているとされています。
2. RailsでMongoDBを使うための設定
まずは、RailsでMongoDBを使うためのセットアップ方法を説明します。今回、環境を作るために使用したソフトウエアは、表1と表2の通りです。
表1: 使用したソフトウエア Rails側
項目 | 内容 |
---|---|
OS | Windows XP Professional SP3(32bit) |
Ruby | ruby 1.8.7(2010-08-16 patchlevel 302) [i386-mingw32] (RubyInstaller for Windows) |
Rails | Ruby on Rails 3.0.0 |
その他 | DevKit-4.5.0-20100819-1536 |
表2: 使用したソフトウエア DB側
項目 | 内容 |
---|---|
OS | Redhat Enterprise Linux 4 WS(64bit) |
DB | MongoDB 1.6.3(64bit) |
MongoDBのインストールは、MongoDBのWebサイトから配布パッケージ・ファイルをダウンロードし、任意のディレクトリに展開します。ログを出力するフォルダと、DBを格納するディレクトリを作成し、画面1のようにmongodコマンドを使って起動します。
画面1: MongoDBの起動
# mongod --logpath ログ・ファイルまでのパス --dbpath DB格納ディレクトリまでのパス MongoDB starting : pid=21599 port=27017 dbpath=/usr/local/mongodb-1.6.3/db 64-bit db version v1.6.3, pdfile version 4.5 git version: 278bd2ac2f2efbee556f32c13c1b6803224d1c01 sys info: Linux ofc-n1.10gen.com 2.6.23.17-88.fc7 #1 SMP Thu May 15 00:02:29 EDT 2008 x86_64 BOOST_LIB_VERSION=1_33_1 [initandlisten] waiting for connections on port 27017 [websvr] web admin interface listening on port 28017
次に、Railsアプリケーションを作成します。RailsでMongoDBを利用するためには、Active Recordではなく、専用のO/Rマッピング・ライブラリを使用する必要があります。Active Recordは使わないため、Active Recordをスキップする"-O"オプションを付けて、プロジェクトを作成します(画面2)。
画面2: Railsアプリケーションの作成
> rails new Railsアプリケーション名 -O
作成したRailsアプリケーション内にあるGemfileを開き、必要なgem(Rubyのライブラリ)を記述します。MongoDB用のO/Rマッパーとして、mongo_mapper、mongoidといった複数のライブラリがありますが、ここでは、mongoidを使用した例を示します。
Rails 3に対応したmongoidは、まだベータ版ですが、Active Modelに対応しています。設定ファイルやソースのひな型を生成するジェネレータがそろっており、mongo_mapperよりも使いやすいと考えます。
mongoidをインストールするためには、リスト1に示した2行を、Gemfileに追加します。
リスト1: Gemfileに追加する設定
bson_extは、RubyのMongoDBアダプタを高速化するC拡張ライブラリです。bson_extをWindowsにインストールするには、インストール時にコンパイルする必要があります。このため、ここではDebKitをインストールしました。DebKitを動かすため、mingw32版のRubyを使用しました。
bundlerを使い、mongoidとbson_extをインストールします。作成したRailsアプリケーションのフォルダに移動し、画面3のように、bundle installを実行します。
画面3: bundlerによるインストール
> bundle install Fetching source index for http://rubygems.org/ (略) Installing bson (1.0.4) Temporarily enhancing PATH to include DevKit... Installing bson_ext (1.0.4) with native extensions Using bundler (1.0.2) Installing mongo (1.0.7) Installing will_paginate (3.0.pre2) Installing mongoid (2.0.0.beta.17) (略) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
これで、RailsからMongoDBにアクセスするために必要となるライブラリのインストール作業は完了です。
次に、RailsからMongoDBに接続するための設定を行います。画面4に示したコマンドを実行し、MongoDBに接続するために必要な設定ファイルを生成します。
画面4: mongoid用設定ファイルの生成コマンド
> rails g mongoid:config Mongoid config not found. Create a config file at: config/mongoid.yml to generate one run: rails generate mongoid:config create config/mongoid.yml
上記のコマンドを実行すると、設定ファイルとして、config\mongoid.ymlが作成されます(リスト2)。host:に、MongoDBのホスト名またはIPアドレスを設定して保存します。
リスト2: config\mongoid.yml
RailsからMongoDBに接続するための設定は、以上で完了です。RailsコンソールかRailsアプリケーションを起動して、エラーなく起動することを確認します。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Railsでデータベースを扱うためのライブラリActive Recordについて学んでみた
- Active Recordの使い方
- SoftLayerでMongoDB環境を構築してみよう
- Custom User Dataを利用してユーザーに管理者属性を追加しよう
- Active Recordのバリデーションやコールバックについて深く掘り下げてみた
- 実践「Heroku」をセットアップしてサンプルアプリを動かそう
- RailsでAction Controllerについて学んでみた
- MongoDB Realmを利用したCRUD機能を実装しよう
- ドキュメント指向データベースと列指向データベース
- Rubyを使ったエンタープライズ・インテグレーション