Protocol BuffersのRuby版を作ってみた

http://code.google.com/p/ruby-protobuf/

先週あたりにPerl on App Engineが発表されたので、グーグルの人に「Ruby版も欲しいっす」って言ったら「何はともあれProtocol Buffers」と言うお返事。ということで、何はともあれ作ってみた。

ホントはprotobuf-rubyというのがすでにGoogle Codeに登録されてるんだけど、なんか初っ端から4人もいるし、Wiki見ても計画だけ妙に細かいし、開始2週間経ってるのにコード一本もないしで、時間かかりそうだなーと思ってまぁ自分でやった*1。実はもうちょっと待ったらここから素晴らしく完成度の高いのが出てくるかも。

こっちはまだ作り初めて一週間なので全然機能足りないけど、とりあえず

  • 運がよければ.protoから.rbを生成できる(正規表現ベースの適当パーサーです。あとで作り直す)
  • 他のProtocol Buffersでシリアライズしたデータをそれなりに読み込める(bytesはたぶん無理。まだテストしてないです)
  • データをなんとなくシリアライズして他のProtocol Buffersに食わせられる(bytesは謎)

あたりがぼんやり可能。

RubyForgeに上げたのでインストールは

sudo gem install ruby_protobuf

するだけ。よかったら試してください。*2

今後はバグ修正とかリファクタリングを除けば

  • 仮実装がたくさんあるので直す(入力値の範囲チェックが-∞〜+∞になってたり・・・)
  • Python版を参考に足りないAPI追加
  • Racc使ってprotoファイルを真面目にパース

とかやる予定。

盆明けにはなんとか形にしたいと思ってるけど、そもそも欲しいのはProtocol BuffersじゃなくてRuby on AppEngineなんだよな。仮にProtocol Buffersが動いたら、次はなにをやればいいんだろう・・・。

まぁ、それはこれが正しく動いてから考えればいいか。

*1:あと、公開されてるAPIが感覚的にイヤだった・・・

*2:要は人柱