昨夜詳解 Objective-C 2.0が届いてたので、週末はObjective-C漬けになろうと思ってたんだけど、何故かMerbを弄るのにはまってしまった。ということで遅蒔きながらMerb+DataMapperをいろいろ調べた。

ちょっと触ってみた感触としては、良いね。基本はRails+ARで書くのとそんなに変わらない。良くわかんないけど勘で「Railsだったらこうだよな」で書いても大概のものは動いた。ふむ。あとはパフォーマンスがどうなるかだけど、こればっかりはまともなアプリ書いてみないとわかんないな。前に頼まれて作ったとあるイベントの管理システムを試しにMerb化してみるか。FastladderをMerbに移植してみるとか(ry。いいからバグ修正しろって怒られそうなのでやめとこう。ていうか忙しくて止まってたもろもろの修正はやくコミットしないと。

DataMapperは結構気にいった。モデルがそのままスキーマの定義になるのはわかりやすいなぁ。複数DBも簡単に使えそうな印象だけど、Merbでどうやるのかちょっとわかんなかった。調べてみるか。

それにしても、サイトのサンプルコードと最新版の仕様が全然違うのにはちょっと泣けた。Getting Startedに書いてある通りにやろうとしたら、まずインストールするgemの名前からして違うとか!サンプルに書いてあるモジュールも存在すらしないし!えー。日本語の最新の情報が楽に手に入るようになるまでは時間かかりそうだし、APIリファレンスとソース読みつつ試行錯誤するしか無いか。

一応試しに書いてみたコードを曝しておこう。

require 'data_mapper'

DataMapper::Database.setup({
  :adapter => 'sqlite3',
  :database => 'dm_test'
})

DataMapper::Database.setup(:second_database, {
  :adapter => 'sqlite3',
  :database => 'dm_test2'
})

class Rabbit < DataMapper::Base
  property :name,   :string
  property :color,  :string

  # pの出力が見にくかったので
  def inspect
    "<#{self.class}:#{self.id},#{self.name},#{self.color}>"
  end
end

Rabbit.auto_migrate!

rabbit = Rabbit.new
rabbit.name = 'Jitterbug'
rabbit.color = 'orange'
rabbit.save!

Rabbit.create({:name => 'Mokha', :color => 'chestnut'})

puts "default database"
p Rabbit.all
p Rabbit.first(:name => 'Mokha')

puts "-----"

DataMapper.database(:second_database) do
  Rabbit.auto_migrate!
  Rabbit.create({:name => 'Tango', :color => 'white'})
  puts "second database"
  p Rabbit.all
end
$ ls
rabbit.rb
$ ruby rabbit.rb 
default database
[<Rabbit:1,Jitterbug,orange>, <Rabbit:2,Mokha,chestnut>]
<Rabbit:2,Mokha,chestnut>
-----
second database
[<Rabbit:1,Tango,white>]
$ ls
dm_test dm_test2 rabbit.rb

ちなみにコード中のはうちのうさぎ達の名前。一匹だけダンスつながりじゃないのは俺が名付け親じゃないから。


ジルバの写真で和むがいい。