Active Recordのその先へ ~RailsでMongoDBを使う~

2010年10月27日(水)
朝倉 慎一

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アプリケーションを起動して、エラーなく起動することを確認します。

株式会社日立ソリューションズ

技術開発本部 Rubyセンタ所属
1973生まれ。入社後、グループウェア、Webアプリケーションサーバなどの技術サポート業務に従事。現在は、RubyおよびRuby on Railsを中心にしたビジネスを推進中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています