Slide 1

Slide 1 text

ì   なういProtocolBuffersの話 相模原PHP勉強会 2014/01/22

Slide 2

Slide 2 text

自己紹介 ì  ちょびえです   ì  h*ps://twi*er.com/chobi_e   ì  h*ps://github.com/chobie   ì  仕事   ì  六本木らへんでWebサービスに携わっています   ì  主にサーバーサイドがメイン   ì  OSS   ì  PECL  Sundown,その他libuv,  libgit2  extension等   ì  あとFluentLoggerのPHP版書いてたりします

Slide 3

Slide 3 text

Protocol  Buffersってなんぞ? ì  GoogleがOSSとして公開した自己叙述形式の ポータブルなバイナリフォーマット   h*ps://code.google.com/p/protobuf/  

Slide 4

Slide 4 text

php版ができました h*ps://github.com/chobie/php-­‐protocolbuffers   IRC:  #php-­‐protocolbuffers  on  freenode     現在PECL登録の調整中

Slide 5

Slide 5 text

なぜPHP版を作ったのか ì  もともと複雑なObjectを扱っていたけど他言語 とやりとりするときに仕様書とか書くのが面倒 くさかった   ì  既存のPHPのProtocolBuffersライブラリは遅すぎ て使い物にならなかった   ì  数件なら気にならないけど万単位だとキツイ

Slide 6

Slide 6 text

使い方 git  clone  h*ps://github.com/chobie/php-­‐protocolbuffers.git   cd  php-­‐protocolbuffers   phpize   ./configure   make  &&  make  install   #  あとはphp.iniにextension=protocolbuffers.soを追加すれ ばOK

Slide 7

Slide 7 text

使い方 package  net.chobie.Example;   message  Person{    opZonal  string  name  =  1;    message  Phone{opZonal  string  number  =  1;}    repeated  Phone  phone  =  2;   }   こんな感じの定義ファイル(message.proto)を作って protoc  -­‐-­‐php_out=php  message.protoすれば出来上がり  

Slide 8

Slide 8 text

使い方 setName(“chobie”);   $raw  =  $person-­‐>serializeToString();   echo  $raw;   $p2  =  Person::parseFromString($raw);  

Slide 9

Slide 9 text

主な用途 ì  多言語間で使う為のメッセージフォーマット   ì  phpのserialize/deserializeの代替

Slide 10

Slide 10 text

Pros ì  独自の記述言語から多言語に対応したメッセー ジを作れる   ì  バイナリフォーマットなので小サイズ   ì  小サイズなのでserializeが高速、少メモリ

Slide 11

Slide 11 text

Cons ì  特定の操作が苦手   ì  子メッセージの特定データを持つものを削除す る場合O(n)になりがち   ì  ポータブルなフォーマットなので苦手な表現あ り   ì  Key-­‐value的なのは苦手   ì  バイナリを見ただけだと何のデータか分かりづ らい

Slide 12

Slide 12 text

MessagePackとの比較 ì  MessagePackのIDLは多言語でサポートしている わけではない   ì  PHP版はもちろん対応していない   ì  速度差はそこまで変わらない   ì  エクストリームな使い方すると顕著だけど   ì  なんかアプリ作る時はProtocolBuffersのが楽   ì  inserZon_pointで好きなコードを埋め込めるのが 強力    

Slide 13

Slide 13 text

ProtocolBuffersの利用例 ì  Android  Market  API   ì  Google  RealZme  bidding  protocol   ì  Riakのバイナリ通信プロトコルとして   その他色んな所で使われています

Slide 14

Slide 14 text

Ext書くとPHPアプリ開発が捗る ì  適材適所   ì  綺麗にまとめておけばHipHop移行もそこまで苦 じゃない   ì  PHP  ext開発楽しいよ!   ì  Libgit2とか誰か手伝ってくれると嬉しい