��������Ruby��Ĥ⤢��Ȥ����Τˡ���������Ƕ�Ruby�����񤤤Ƥʤ�faultier�Ǥ�����Ф����㤢��ϥӥ���ͤƵס���Ramaze�����ͷ��Ǥߤ뤫���Ĥ��Ǥˤ����ø�NoSQL�֡���ˤ��äƤߤ뤫���ߤ����ʴ�����Ramaze+MongoDB+Candy��ͷ��Ǥߤ뤳�Ȥˤ��������ʤߤ˼���ǤϺ�Cassandra���֡���ʤΤ����ɤ⡢Cassandra�Ϥ���ä�ͷ�ӤǻȤäƤߤ�ˤϥ����С����ڥå�����ʡ��Ȥ��פ��ĤĿ������Ƥ��顢Heroku��MongoDB���Ȥ���餷���ΤǤ�������äƤ�MongoDB�����ꡣ
�Ȥꤢ��������Ƥߤ�
apt��õ������mongodb�Υѥå������⤢�������ɡ�2010ǯ5��30�������Ǥ�1.2.2�ȼ㴳�С�����󤬸Ť������θ奪�֥������ȥޥåѡ��򿧡���Ƥߤ��Ȥ���1.4�Ϥ���ʤ���ư���ʤ��ä��ꤷ���Τǡ��ܲȤΥ���������ǿ��ΥС��������Ȥ��Ƥ��롣����ѥ���ѤߤΥѥå������ʤΤ�Ÿ������Ŭ���ʤȤ����֤��Ȥ�������OK���긵�δĶ���Ubuntu 10.04��64bit�ʤΤ�Linux 64bit�äƤ�Ĥ���������ɡ�OSX 32/64 bit�Ȥ�Windows 32/64 bit�Ȥ��⤢�ä���
$ mongo MongoDB shell version: 1.4.3 url: test connecting to: test type "help" for help >
�դࡣ�Ҥä��Ҥä������Τ������塼�ȥꥢ���Ȥ��ˤ������̤���礳���礳�����äƤߤ����ɤ����ȻȤ���褦����
Ruby����Ȥ�
Ruby��driver��gem���饤�󥹥ȡ���Ǥ���Τ����̤�gem install mongo�Ȥ���롣��¸�⥸�塼���bson�ƤΤ����뤱�ɤʤ󤸤�����Ȼפä�������ɡ�Ruby�Υ��֥������Ȥ�MongoDB��BSON���֥������Ȥ˥��ꥢ�饤������⥸�塼������̤Υѥå������ˤ��Ƥ���餷������ǡ�bson��C��ĥ�����äơ����ä�������Ƥʤ��Ȥ���ʥ�å��������Ф롣
rb(main):001:0> require 'mongo' **Notice: C extension not loaded. This is required for optimum MongoDB Ruby driver performance. You can install the extension as follows: gem install bson_ext If you continue to receive this message after installing, make sure that the bson_ext gem is in your load path and that the bson_ext and mongo gems are of the same version. => true
�ޤ���������γ�ȯ�Ķ������̤ˤɤä��Ǥ⤤��������ɡ������Ф��֤��Ȥ��Ϥɤ����Ȥ���������bson_ext������Ƥ�����
# coding: utf-8 require 'mongo' con = Mongo::Connection.new # ���⥪�ץ������ꤷ�ʤ��� localhost��28017�ݡ��Ȥ˷Ҥ� db = con.db('candy') udons = db.collection('Udon') udons.insert({ 'name' => '�֤ä���', 'type' => '�䤿�����ɤ�', 'price' => 350 }) udons.insert({ 'name' => '����', 'type' => '���������ɤ�', 'price' => 300 }) udons.insert({ 'name' => '����', 'type' => '���ޤ������ɤ�', 'price' => 400 }) p db.collection_names #=> [ 'system.indexes', 'Udon' ] p udons.count #=> 3 p udons.find_one #=> {"_id"=>{"$oid"=>"4c0273712e119e3fd7000001"}, "name"=>"�֤ä���", "type"=>"�䤿�����ɤ�", "price"=>350} p udons.find('price' => {'$gte' => 350}).count #=> 2
����ʴ����Ǥ����äȻȤ������ۡ������Ȥ�MapReduce�Ȥ���Ƥߤ褦���Ȼפä����ɤޤ�����Ϥ���������
���֥������ȥޥåѡ�
�֤ä��㤱mongo-ruby-driver�����Ǥ⽽ʬ�����Ǥ��뤷��O/R�ޥåѡ��Ĥ�������Relation����ʤ����顢O/D�ޥåѡ�������̵���Ƥ⤤�����ʤȻפä����ɤ⡢Ramaze�Ȥ��ǻȤ����Ȥ�ͤ������äѤꤢ�ä����������ʹ��פ��Ƥ��д�¸�Υإ�ѡ��Ȥ��Ȥ������ʤΤǡˡ���Ǥ�����äȸ��Ƥߤ��顢�빽��������������ɡ��ɤ��AR�äݤ������ʤ����ʤ�Ȥ�����������äȲ��ʤΤǤ�ä������Τ�������������MongoMapper��Mongoid��ActiveSupport�Ȥ�validation�ѤΥ饤�֥��Ȥ�������㤦��Rails�ǻȤ���ʤ餤��������ɡ��Ȥ�����Rails��AR������˻Ȥ��Τ����ꤷ�Ƥ�äݤ��ơ�ActiveModel�äƤΤ��������͡��Ƕ�Rails�������Ƥʤ��Τ��Τ�ʤ��������Rails��Model��ݲ���ή��ʤ󤫤ʡˡ�Ǻ�ޤ������ġ���ActiveSupport������ʤ����ߤ����ʤ��ġ�
�Ŀ�Ū�ˤϰ����κǸ�ˤ��ä�Candy���ɤ����˸��������ʤˤ����֥������ActiveRecord��DataMapper�Υߥ顼����ʤ��פä�README��Ƭ���������Ƥ뤷��mongo-ruby-driver�ʳ��ˤϰ�¸���Ƥʤ��Τ���Ũ���Ȥ�����Candy::Piece��include��������ȥ���ץ롣
# coding: utf-8 require 'candy' class Udon include Candy::Piece end kamaage = Udon.new kamaage.name = '���ޤ���' kamaage.type = '���ޤ������ɤ�' kamaage.price = 350
���ʤߤˡ�������ꤷ�ʤ���Ф����localhost��28017�ݡ��Ȥ˷Ҥ��ǡ�candy�Ȥ����ǡ����١�����Udon���쥯�����˥����������롣�Ĥޤꤳ�Υ����ɤ��ȡ�������Υ����ɤ�Ʊ���ǡ����١�����Ʊ�����쥯����󤫤��äƤ��뤳�Ȥˤʤ롣�����Candy���饹��Udon���饹�Υ��饹�᥽�åɤǻ���/�ѹ��Ǥ��롣Candy���饹�����ꤹ������ƤΥǥե��������ˤʤ뤷�����饹�᥽�åɤ����ꤹ��Ȥ��Υ��饹�Υǥե��������ˤʤ롣Ramaze���ä��顢model/init.rb������Ǥ����񤤤Ȥ���
# coding: utf-8 require 'candy' Candy.host = "mongdb.example.com" Candy.port = "24423" Candy.db = "udonapp" require __DIR__('udon') Udon.collection = 'menrui' # ���饹̾����ʤ����쥯�����̾�ˤ��������
����save�᥽�åɤϤʤ����ʤ󤫤����ݥꥷ���餷���ơ����֥������Ȥ�������¨��ȿ�Ǥ���롣method_missing�ǥեå����ƿ�������򤫤��Ƥ�Τǡ��⤷validation�Ȥ����������ϡ��㤨��price�������Ǥʤ���Фʤ�ʤ��ơ�1000��Ķ����褦�ʤ��⤤���ɤ����ä��㤤���ʤ��ݥꥷ���ˤ���Ȥ����顢����ʴ����Υ᥽�åɤ����䤷�Ƥ�롣super���Ρ�
class Udon include Candy::Piece def price=(val) raise '���ʤϿ������äĤäƤ����' unless val.kind_of?(Integer) raise '�������襢�ۤ�' unless val < 1000 super end end
���ʤߤ˥Х�ǡ������Ȥ����顼�ϥ�ɥ�󥰤Ȥ�named scope�Ȥ��δ�ñ�ʼ������Candy�Υɥ�����Ȥ˺ܤäƤ�ΤǸ��Ƥߤ�Ȥ����Ȼפ����ޤ��㴳���ݤǤϤ��뤱�ɡ���ľ����ʤΤǤ�����ʡ��Ȼפä������Ф餯�����ͷ��Ǥߤ褦��
�ĤȤ���������ޤǽ񤤤�������̿Ū�ʤ��Ȥ˵��դ���������ɡ�Candy��1.9�Ϥ���ʤ������ܤ餷���������Heroku�ä�Ruby 1.9�Ϥ��ä��ġ�¿ʬ�㤦��͡ġ������󡢤ޤ������礦�ɼڤ�Ƥ륵���Ф��ӥ�ɤ������Ȥ������Ȥꤢ�������Υ����Ф�ư������Ф������ġ�