Chiba.pm #1
   2012/10/20
\ちば!/
About Me
• Hideaki Ohno
 • Twitter : @hide_o_55
 • Hatena: id:hide_o_55
 • github: hideo55
 • PAUSE: HIDEAKIO
ArangoDB
client for Perl
What s ArangoDB?
• マルチモデルDB
 • ドキュメントDB
 • グラフDB
 • KVS
• Geo indexによる位置情報検索
ArangoDB.pm

• Collection/Document/Edge/Indexの
 操作

• Simple Query
• ArangoDB Query Language
使い方とかは
ドキュメント嫁
  なので
ArangoDB.pm
 を作った際の
  工夫とか
ところで、
次のコードを
 見てくれ
こいつをどう思う?
my $users = $db-
>collection(‘users’);

my $cursor = $users->by_exampe({
  active => 1
});

while( my $doc = $cursor->next ){
  # do something
}
すごく・・・長いです・・・

my $users = $db-
>collection(‘users’);
どうするか?
エイリアス?
No!
• 省略しても最短1文字まで
• 下手に省略すると逆に読みづらい
AUTOLOAD
No!
• メソッドが存在する場合は
 AUTOLOADが呼ばれないため、
 コレクション名に制限ができる

• オーバーヘッドが大きい
overload!
こうなった

my $users = $db-
   >(‘users’);
なぜoverloadか?

• 長いメソッド名を完全に省略できる
• ハッシュアクセスっぽく見せかけられる
なぜoverloadか?

• 長いメソッド名を完全に省略できる
• ハッシュアクセスっぽく見せかけられる
• 単純に演算子オーバーロードが好き
他の言語ではどうしてるか

• Ruby
 • [] 演算子をオーバーロード
 • database[ my_collection ]
• Python
 • __getter__を利用
• PHP/Node.jsは・・・    (自主規制)
Module::Installから
 Module::Buildに
  移行してみた
感想

• ACTION_* で色々hookできて便利!
• M::InstallっぽいDSLが欲しければ
 M::B::Functionsを使えるので安心

• M::Installに比べて変なハマり方はしづ
 らい
参考
• モダンPerlの世界へようこそ:第23回 
  Module::Build:MakeMakerの後継者を目指
  して

 • http://gihyo.jp/dev/serial/01/modern-
    perl/0023

• Module::Build で let's `make love`
 • http://perl-users.jp/articles/advent-
PP
•   極力PurePerlでも動くように、XSが使えない場
    合はPP版をロードするモジュールを採用

•   HTTP::Parser::XS
    • H::P::XS::PP
•   Data::Util
    • Data::Util::PurePerl
•   PPでもOK、XSが使えれば更に高速に
使いやすさ重視
•   Ruby版だと

    •   db[ collection ].add_index( hash ,{   on => [ id ] })

•   Perl版

    •   $db->( collection )->ensure_hash_index([ id ]);

    •   インデックスの種別は定まったものなのでそれぞれ別メソッドに

    •   必須パラメータはオプションのハッシュに入れず独立した引数に
今後の予定

• ArangoDB 1.1 APIに対応
• オブジェクトを作らずにデータを返す
 RAWモード
FIN

Chiba pm#1 - ArangoDB for Perl