10月15日,16日,東京工業大学大岡山キャンパス (東京都目黒区) でYAPC::Asia 2010 Tokyoが開催されます。本ページでは,2日目のレポートを随時掲載していきます。
電車遅延のため,本日のプログラム開始を10分遅らせるとのことです(なお,休憩時間を利用して,すでに本来予定しているタイムテーブルに修正されています)。
※今回のレポートは全セッションを回れておりません。ご了承ください。
gfxさん「How Xslate Works - The next generation's template engine」
Text::Xslateの作者であるgfxさんによるXslateの内部構造を中心としたトークでした。
XslateはXSで書かれているテンプレートエンジンです。非常に高速に動作するように設計されていて、HTMLエスケープは自動で行ってくれる機能により安全性にも配慮されています。また複数の文法をサポートしてることや、エラーメッセージが分かりやすいなど、開発のしやすさにも力をいれているとのことです。
まずはなぜXslateを書いたのかという経緯から。CPANにはよく使われているテンプレートエンジンがたくさんある中が、どれも一長一短で完璧なものがないと感じて開発を始められたそうです。例えばTemplate-Toolkit(TT2)は広く使われていますが、動作が非常に遅くエスケープも自動ではないためXSSを生みやすくなっています。最近開発されたText::MicroTemplateはPurePerlだが高速で、セキュリティ面も配慮されていますが、文法がperlベースのため何でも出来すぎてしまうところがあり、危険なコードもかけてしまうのでテンプレートエンジンとしては好ましくない点もあるとと考えられているそうです。
つづいて基本的な使い方の説明となりました。使い方は簡単で、基本的にText::Xslate->new()->render()で動かせます。newには様々なオプションを渡せるようで、キャッシュの設定などが行なえます。テンプレートの構文はPerl6ライクな記法で、フィールドの参照はドット(.)で行ないます。exampleディレクトリに例をたくさん置いているそうです。
その後内部処理の説明となりました。Xslateではテンプレートを処理する際に、いったん前処理でプログラミング言語風な状態に変換してからパースしているそうです。パーサの実装は手書きで作られていて、オライリー社から出版されているビューティフルコードの「9章 下向き演算子順位解析(ダグラス・クロックフォード)」に掲載されている手法を参考に手書きで実装されたそうです。
質疑応答ではテンプレートをperlコードに落としこむ実装にせずにあえてバーチャルマシン化した理由について尋ねられていました。それに対してperlのインタプリタはテンプレート処理に特化しているわけではないので、文字列の連結処理などにオーバーヘッドがある、Xslateではそのあたりを最適化していて、高速化できていると説明されていました。また他言語への展開についても質問がありましたが、現状perlの実装に深く依存しているため難しいとのことでした。
twitter上でも次は使ってみたいという声があがるなど、今後注目のテンプレートエンジンだと思いました。
なお,今月10月24日売りの『WEB+DB PRESS』にて,Xslateの使い方を執筆したので,読んでみてくださいと述ていました。
Yappoさん「Ajax Application Testing」
このセッションは,JavaScriptをPerlからテストを行うためのモジュールであるJSTAPdについて解説をする物でした。まず,既存のJavaScriptのテストツールとしてJSUnit,Selenium,QUnitのようなものが挙げられましたが,これらはPerlから使うことを考えると少々不便です。続いて,前夜祭のLTで取り上げられたTest::QUnit,t_wadaさんが作成したQUnit-TAPを紹介した上で,Yappoさんが作られたJSTAPdの使い方を細かく紹介していきました。
JSTAPdを使うためには,まず「jstapd -n プロジェクト名」というコマンドでテストスクリプトのスタブを作成します。その後は,-dオプションでサーバを立ち上げてブラウザから結果を確認することができます。また,Perlエンジニアがコードを書きやすいように,JavaScriptにもTest::Moreと使い勝手の近いisやokなどの関数が用意されています。Ajaxのような非同期のテストもできるよう,jstapDeferredというJSDefferedと同じような記述が可能なクラスも用意されています。
作成したテストは,すべてprove -rvのようなコマンドでCLIから実行させることができます。テストするブラウザの切替には環境変数JSTAP_AUTO_OPEN_COMMANDを使うとよいそうです。実装には非同期なPSGIサーバであるTwiggyが使われていました。全体的に使いやすくまとまったライブラリであり,JavaScriptとPerlを使うエンジンは一度JSTAPdを使ってみる価値があると感じました。
最後に,JSTAPdの使い方入門記事を,今月10月24日売りの『WEB+DB PRESS』に執筆したので読んでみてくださいと,紹介してトークを締めくくっていました。
Jesse Vincentさん「Perl5 is Alive!」
正午から行われたセッションは,Perl5の開発責任者であるJesseさんによる大変意義深い内容のものでした。Jesseさんがまず言及したことは,「Perlが死んだと口にする人は,時代にきちんとついていけてない」ということ。証拠としてCPANモジュールの開発が活発なことを挙げ,Moose,Plack,cpanm,AnyEvent,Devel::NYTProfなどをその代表としてあげていました。
その後,話はPerl5.12.xとPerl6の話へ。「5」と「6」はバージョン名ではなく,Perl5とPerl6が言語名であると述べ,これからの時代はもちろんPerl6の時代だが,Perl5の時代でもあるのだと,Perl5の存在意義について明言していました。その中で様々なPerl5.12系列の新機能を紹介し,Perl5の開発の活発さを伝えていました。
Jesseさんはまた,Perl5.10の時代のPerlの開発プロセスをどのように改善したかについても言及をしました。5.10の頃は"pumpking"と呼ばれる開発責任者が,C言語の実装から言語設計,人事やPMまですべてをこなしていたことを問題点として指摘。5.10の時代のpumpkingは何人もリタイアしており,リリースラインも安定しておらず開発に大変時間がかかっていたそうです。Jesseさんはこの問題を仕事を適切に分散することで解決。Perl5の開発プロジェクトは,健全なプロジェクトに生まれ変わりました。
最後に,Perl5.14のリリースに関しても触れました。Jesseさんがpumpkingになってからは,開発版は毎月20日のリリース,安定版は3ヶ月に一度のリリースを維持しており,5.14のリリースに関しても2011年4月20日という明確なスケジュールを掲げていました。5.14に盛り込む機能に関してはまだ募集をしており,アイデアがあればパッチを送って欲しいとしていました。Perlプロジェクトの健全さ感じ取れる,非常に心強いトークでした。

