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

1. はじめに最終回の今回は、Active Recordが対象とするRDB(リレーショナル・データベース)ではなく、最近話題のNoSQL(Not only SQL)をRuby on Rails(Rails)で使用する方法を解説します。NoSQLデータベースにはさまざまなタイプがありますが、今回はドキ

朝倉 慎一

2010年10月27日 20:00

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側

項目内容
OSWindows XP Professional SP3(32bit)
Rubyruby 1.8.7(2010-08-16 patchlevel 302) [i386-mingw32] (RubyInstaller for Windows)
RailsRuby on Rails 3.0.0
その他DevKit-4.5.0-20100819-1536


表2: 使用したソフトウエア DB側

項目内容
OSRedhat Enterprise Linux 4 WS(64bit)
DBMongoDB 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アプリケーションを起動して、エラーなく起動することを確認します。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30