MagLevは、GemStoneによって開発されたSmalltalk VM上のRuby実装だ。GemStoneのSmalltalk製品であるGemStone/Sには数十年もの実績があり、特に成熟した分散処理と永続化機能を備えていることで知られている。
2008年にMagLevへの取り組みがアナウンスされてからも、チームはずっと開発に励んでいた。しばらくはプライベートアルファの状態だったが、それももう終わりだ。ついに、MagLevの公開バージョンが登場した。これにはGitHubでホストされているMagLevのソースコードも含まれている。
MagLevを試してみるためには、まずソースコードを取得しよう。
git clone git://github.com/MagLev/maglev.git
続いて、MegLevのソースディレクトリで以下を実行する。
./install.sh
後は指示にしたがえばよい。
MagLevを動かすには、以下を実行する。
rake maglev:start
すると、システムが起動するはずだ。取り急ぎRubyコードを実行するには、maglev-irb
を使うとよいだろう。これは共通のMagLevバックエンドに接続する。 maglev-ruby
と maglev-gem
も利用可能だ。
examplesディレクトリを調べると、Avi Bryant氏が最初のMagLevデモで紹介した hat_trick が見つかるだろう。これは永続化機能を見せるためのサンプルだ。一方のirb
インスタンスで用意したオブジェクトを、もう一方のirb
インスタンスからアクセスすることができる。
このデモを実行するには、MagLevと2つのmaglev-irb
インスタンスを起動すればよい。オブジェクトを作るために、一方のmaglev-irb
インスタンスで以下を実行する。
Maglev.persistent do Maglev::PERSISTENT_ROOT[:stuff] = ["hello world"] end Maglev.commit_transaction
次に、もう一方のmaglev-irb
インスタンスに切り替えて、以下を実行する。
Maglev::PERSISTENT_ROOT[:stuff]
すると、文字列 "hello world" が返ってくるはずだ。
もちろん、これは永続化機能のごく単純なデモにすぎない。詳しくは、MagLevのpersistence APIのドキュメントを見てみよう。
もう少し複雑なサンプルとしては、永続化機能を使ってRubyのPStoreを実装したものがある。 これはGemStoneの永続化機能を使うと、ORMを扱う必要なく、簡単にすべてのオブジェクトグラフの永続化が実現できることを示している。
MagLev上ではまだRailsはサポートされていないが、Rack と Sinatra の動作サンプルは利用可能になっている。
進捗を追いかけるには、公開されている MagLevのTracを見ればよい。互換性について確認したければ、RubySpecsのパス数を示したグラフがある。詳細な結果が見たければ、こちらのリンクを見てみよう。
MegLevのライセンスについて、詳細情報はまだ公開されていないようだが、おそらくGemStoneはGemStone/Sのようにフリー版を提供するだろう。GemStone/Sの場合、WebフレームワークのSeasideをバンドルして、4GBのデータまでフリーで提供されている。
最近、NoSQLデータベースが話題になっているが、GemStone/Sは数十年もの実績のある成熟したソリューションだ。そして、MagLevはこうした機能をRubyに密に統合したものだ。どうだい、MagLevを試してみる気になったかい?