PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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