Tech Sketch Bucket of Technical Chips by TIS Inc.

RubyのODM Mongoidを使いこなす①

Pocket

この記事はeXcale Developer's Blogから移転されたものです。


eXcale開発チームの泉谷(@syguer)です。
今回はにRubyのODMであるMongoidについて紹介します。
eXcaleではデータベースとしてMongoDBを採用しており、MongoDBのデータをオブジェクトとして扱う際にMongoidを使っています。
MongoidはAPIが非常に直感的でわかりやすく、データをオブジェクトとして扱うことができるので重宝しています。
本記事では、そんなMongoidの使い方について解説します。

※注 本記事ではMongoDBそのものの使い方については説明しません。MongoDBについてはMongoDB公式サイトを参照してください。


eXcaleでは期間限定でサインアップキャンペーン実施中です。
キャンペーン内容についてはこちらを参照してください。


Mongoidとは

MongoidはRubyのObject-Document-Mapper (ODM)です。
ODMとは皆さんご存知であろうObject-relational mapping(ORM)と同様のニュアンスのもので、MongoDBで扱われるデータであるドキュメント(BSON※1)とオブジェクトのマッピングを行うためのツールです。
MongoDBで提供されているRuby APIを使ってデータを直接扱うこともできますが、ODMを使うことによってデータをオブジェクトとして扱いやすくなります。

本記事公開時点の最新バージョンはv3.1.6です。

公式サイト
http://mongoid.org/en/mongoid/

ソースリポジトリ
https://github.com/mongoid/mongoid

以下、本記事では環境として下記を使用します。
・Ruby 2.0.0-p451
・MongoDB v2.4.3
・Mongoid v3.1.6

※1 Bin­ary JSONのこと。JSONをバイナリにシリアライズしたもの。


基本的な使い方

インストールはgemを使います。
以下のコマンドを実行します。

インストールが完了したら早速モデルを定義してみます。
今回は名前とemailをフィールドに持つユーザーモデルを例とします。

モデルはクラスとして定義します。
まずMongoid::Documentをincludeし、その下にfieldを定義して行きます。
fieldにはtypeを指定することができます。使用できるtypeは以下になります。

  • Array
  • BigDecimal
  • Boolean
  • Date
  • DateTime
  • Float
  • Hash
  • Integer
  • Moped::BSON::ObjectId
  • Moped::BSON::Binary
  • Range
  • Regexp
  • String
  • Symbol
  • Time
  • TimeWithZone

CRUD操作

基本となるCRUD操作について解説します。
以下のサンプルプログラムを見てください。

特に説明がいらないほど直感的に操作ができることが分かると思います。
実行結果は以下の様になります。

正しく更新、削除ができている様子が見えます。


設定ファイルの書き方

先程のsample.rbの中でloadしていたMongoidの設定ファイルの書き方について解説します。

Mongoidの設定は、yamlというフォーマットで記載します。
yamlについての説明は割愛しますが、ここではインデントでレベルを区分けするということだけ覚えていてください。
以下が基本となる設定例です。

一番上のレベルに環境を書きます。この環境は設定ファイルを読み込む際に使います。
続いてsessionsの中に設定を書いて行きます。
この例では"default"というセッションを記載しています。そしてセッションの設定としてdatabase名とホストの設定を記載しています。

以上が基本的な設定ですが、シンプルすぎてかえってわかり辛いかもしれません。
以下により実践的な例を記載してみます。

この例では環境ごとに使用するデータベースを変えています。
また、本番環境では認証を使っています。


レプリカセットを使う場合

MongoDBはレプリカセットを用いることが多いと思います。
その際の設定ファイルの書き方について解説します。
以下が設定例です。

大げさに設定例としましたが、レプリカセットを使うために特別な書き方をする必要はなく、hostsにレプリカセットのノードを並べるだけで実現できます。
また、レプリカセットを使用する際のオプションとしてconsistency設定することができます。
consistencyオプションが取る値は:eventualまたは:strongです。前者を設定すると参照のクエリについてはレプリカセットのステータスがsecondaryのノードにアクセスするようになります。後者を設定すると常にprimaryのノードにアクセスするようになります。デフォルトは:eventualです。
万一primaryのノードが切り替わっても、自動で対象ホストを切り替えてくれます。


最後に

いかがだったでしょうか。
Mongoidを使えば簡単にMongoDBのデータをオブジェクトとして扱う事ができます。
今回は基本的な使い方の紹介にとどめていますが、他にも便利なクエリが多数用意されていますので、公式ドキュメントを参照してみてください。
次回はMongoidを使う際に役立つTips等を紹介したいと思います。

エンジニア採用中!私たちと一緒に働いてみませんか?