Acmeモジュール入門

neko_gata_s(shinpei)
2011-12-01

Acmeモジュール入門

ついに今年もAdvent Calendarが始まりましたね!Acmeトラックの初日を担当させていただくneko_gata_sです。最近は新潟県に住んでいます。新潟はとてもごはんがおいしいので、機会があれば是非食べにきてくださいね!

さて、今日は初日なので、特定のモジュールの紹介の前に、Acmeとはなんぞや、というお話から始めてみたいと思います。

Acmeとは何ぞや

Acmeとはそもそも「絶頂」を意味する英単語ですが、Perlの世界ではジョークモジュールの名前空間を意味します。Perlの有用なモジュールがたくさん登録されているCPANの中に、ジョークモジュールがなんの手綱もなしに野放しになっていたらまずいよね、という観点から、ジョークモジュールはAcmeという名前空間におさめよう、ということになりました。それ以来CPANのAcme名前空間には楽しいジョークモジュールがたくさんアップされ、時にはその変態的な実装でPerlHackerを驚嘆させ、時にはそのあまりにくだらない内容でPerlHackerを脱力させているのです。では、Acme名前空間は無用の長物なのか? と問われれば、ぼくたちは力強くNO!と叫ばなければなりません。Acme名前空間には、実用性こそ薄いものの、凄腕PerlHackersのHackが詰まっています。例えば、私が最初に知ったAcmeモジュール「Acme::Bleach」を例にとってみましょう。

Acme::Bleach

これがどのようなモジュールかと言うと、例えば以下のようなコードをbleach.plとして保存して

use strict;
use Acme::Bleach;

print "Perl Advent Calendar 2011";

実行すると、なにも出力されません。???。しかし、実行したあとのbleach.plをのぞいてみると…

use strict;
use Acme::Bleach;
































コードが何もなくなっている! 怖い! なにこれ!

さらに、この状態でさらにもう一度bleach.plを実行してみると、今度は正常に(?)"Perl Advent Calendar 2011"が出力されます。これは、Acme::Bleachの内部で、スクリプト自身を一定のアルゴリズムで書き換えるという黒魔術を利用して実現しています。

まとめ

このように、ある種のAcmeモジュールの中には「技術力の無駄遣い」が詰まっていて、Acme空間は「いかに面白い技術を使ってくだらないことをするか」の競技場となっている面もあります。Acme空間にあがっている「技術力の無駄遣い」をおもしろがるもよし、自ら技術力の無駄遣いでAcme空間に参戦するもよし、どちらにしても、決して「単なる無駄」ではないSomethingがそこにはあるのです。

私が見る限り、PerlHackerの多くは、このAcmeという文化を愛しているように思いますし、Acmeモジュールという形になっていなくとも、YAPC Asia 2011でも多くの「Acme的な発表」があったのは記憶に新しいところだと思います。

私はこういう、ともすればふざけてると見られてしまうかもしれないけれどその芯には技術への愛があるというPerlHackerたちのアティチュードが大好きですし、こういうHackerたちが多く集まっているところもPerlコミュニティの大きな魅力だと考えています。

というわけで、初日は私の考えるAcmeの魅力を語ってみました。明日、あさってはちょっと私用で私はAdvent Calendar書けないのですが、明日はどんな話題でしょうか、楽しみですね!