Protocol Buffers 使ってみた

Google が発表した素敵な素敵な Protocol Buffers 。
個人的にはかなり良い印象、以下チュートリアル終了までの流れ。

インストール編

$ cd ~/src
$ curl -O http://protobuf.googlecode.com/files/protobuf-2.0.0beta.tar.bz2
$ tar xvfj protobuf-2.0.0beta.tar.bz2
$ cd protobuf-2.0.0beta
$ ./configure --prefix=/opt/google
$ make
$ sudo make install
$ cd python
$ export PATH=/opt/google/bin:$PATH
$ sudo /opt/local/bin/python setup.py install
$ cp ../editors/proto.vim ~/.vim/syntax
$ protoc --version
libprotoc 2.0.0
$ cd /tmp
$ mkdir protobuf
$ cd protobuf

proto 作成編

$ vim addressbook.proto
package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;
}

Python でお試し編

$ protoc -I=. --python_out=. addressbook.proto
$ ipython -cl
>>> import addressbook_pb2
>>> person = addressbook_pb2.Person()
>>> person.id = 1234
>>> person.name = "僕の名前はヒゲです"
>>> person.email = "hige@example.com"
>>> phone = person.phone.add()
>>> phone.number = "555-4321"
>>> phone.type = addressbook_pb2.Person.HOME

シリアライズ/デシリアライズ編

>>> person.SerializeToString()
'\n\x1b\xe5\x83\x95\xe3\x81\xae\xe5\x90\x8d\xe5\x89\x8d\xe3\x81\xaf\xe3\x83\x92\xe3\x82\xb2\xe3\x81\xa7\xe3\x81\x99\x10\xd2\t\x1a\x10hige@example.com"\x0c\n\x08555-4321\x10\x01'
>>> tmp = addressbook_pb2.Person()
>>> tmp.ParseFromString('\n\x1b\xe5\x83\x95\xe3\x81\xae\xe5\x90\x8d\xe5\x89\x8d\xe3\x81\xaf\xe3\x83\x92\xe3\x82\xb2\xe3\x81\xa7\xe3\x81\x99\x10\xd2\t\x1a\x10hige@example.com"\x0c\n\x08555-4321\x10\x01')
>>> print tmp.name
僕の名前はヒゲです

Pickle みたいに Python 限定じゃないのが魅力

かなり面白いので、もっと調べてみます:^)