本日・明日と、東京工業大学大岡山キャンパス (東京都目黒区) でYAPC::Asia 2009 Tokyoが開催されます。本ページでは、1日目のレポートを随時掲載していきます!
※今回のレポートは全セッションを回れておりません。ご了承ください。
Welcome
会場設営トラブルにより、20分遅れで開始されました。JPAの牧さんより、開催のあいさつ、スポンサーへの謝辞が述べられ、今回のYAPCのテーマになりうるのではないかとして、3つの"C"、「 Community」と「Corporate」 、それを「Connect」できればと言及しました。
Richard Diceさん「基調講演:Where Perl can go and how to get in there ‐Perlの未来、その行程-」
はじめに
自己紹介の後、DiceさんよりPerlコミュニティに対する謝辞が述べられました。
YAPC::ASIA 2009のスタッフ、TFP、JPA、そしてPerlコミュニティの皆様、
あなた達のおかげ、あなたたちのためこそに頑張れる。
進化的開発モデル
次に「進化的開発モデル」について説明がありました。
ソフトウェアの機能は時間とともに増える。
そして徐々に安定していく。
「安定した状態にあるシステム」というのは生物学者達によれば、「 それはすでに死んでいる」状態である。
具体的に言うと、既に問題が解決していたり、開発者の興味が他へ移ってしまったり、コストの問題であり、あるいはこれらの複合条件だったりする。
しかし、本当に問題が全て解決しているのかといえば、そういうこともありえるが、だいたいは時間と共に分野自体が変化していくもので、分野が変化したのに、プロダクトが変わらないのは危険であると述べました。そして、Perl開発の弱点もそこにあるということでした。例えばCPAN開発のパラダイムというのは、必要に迫られた人が作り、それを他の人が使う、しかし必要に迫られない場合、あるいはコストがかかり過ぎる場合、問題は解決されないということです。それは「いつか」では遅く、「 Perlを使って XXX をするには?XXX を最初に実装した人が勝つ」と述べられました。また開発に誰も興味が無いというのは、実際には興味がある人と開発に参加できる人がうまくマッチングされていないのでは?という疑問を提示されました。
オープンソースと関連団体
Diceさんは成功しているオープンソースプロジェクトとしてMozillaとeclipseを挙げ、Perlには直接的な収益モデルは少ないが、例えばこれからのマルチコアCPUの時代には並列プログラミングの理解が必要だが、一般的なプログラマはこのあたりは疎い人が多い。しかしperl6はそのあたりが得意なので、マルチコアの価値を高めるためにperl6を売り込めるということでした。
Perlの今後
例えばコアPerl上にたくさんのCPANモジュールを追加してパッケージ化を図るエンタプライズ版Perlの企画もある。
将来的には企業、戦略的パートナー、開発者、コードアーティスト、教育者、起業家の連携を深めることが必要だと述べられました。
田中洋一郎さん「Webエンジニアのためのmixiアプリ開発ガイド」
Perlはあまり詳しくないとおっしゃる田中さん。本気か冗談か、「 YAPCがPerlのイベントだと初めて知った」と話し、会場の雰囲気を和らげてらっしゃいました。このような普段Perlにあまりゆかりのない方のセッションを聞くことができるのは、今回のYAPCから始まったコーポレートセッションのお陰だと思います。
セッションの内容は、今注目を集めているOpen Social技術を利用したmixiアプリの紹介でした。mixiには他に、法人向けにmixiの情報を提供するmixi Connectや、OpenIDの実装であるmixi Open IDがあるということが説明されました。
mixiアプリについて、mixiの持つ貴重なソーシャルグラフデータを開発者に提供すること、そして、ユーザに対して常に新鮮な体験を提供するという開発者とユーザの両側面からのメリットが説明されました。さらに、モバイル向けにRESTful Protocolも開発をしているということで、こちらも大変期待できそうな内容でした。
その後、話はmixiでOpen Socialをどう実装したかという紹介に。通常はOpen SocialではShindigというPHPの実装使うことがほとんどなのですが、mixiではPerlでこれらのAPIを最実装しているそうです。また、Shindigに関してはJavaの実装を用いており、ガジェット関連においてのみ使っているという説明がありました。
さらに、mixiアプリを作る上での注意点も説明されました。それによると、mixiアプリは負荷がかかりやすくなるため、エコに取り組む必要があるとのこと。ライブラリの動きまで熟知し、負荷を下げる必要があるとアドバイスを下さいました。
最後に、mixiアプリは多くの開発者が参加することが成功の必要条件であることを訴え、多くの開発者の参加を呼びかけていました。
Songhee Hanさん「「モダンPerl入門」の入門」
どのようにモダンPerlを実装に利用していったのかが、Songhee Hanさんによって紹介されました。
Tokuhiro Matsunoさん「Plack/PSGI」
当初の予定を変更してのセッションで、miyagawaさんとtokuhiromさんという、日本においてPerlを語る上でなくてはならないお二方のセッションとなりました。この日本を代表するお二方が熱く語る、PlackとPSGIとはいったいどんなものなのでしょうか。
一番重要な点でお二人が強調していたのは、PSGIが仕様であり、Plackはその1つの実装に過ぎないということです。PSGIはサーバとアプリの間の中間プロトコルであり、PythonのWSGIやRubyのRackと同類のものとなります。
PSGIにおいて、リクエストはハッシュリファレンス、レスポンスは配列リファレンスで扱われます。これは従来のHTTP::Engineとは違い、仕様の上でも実装の上でも軽量化ができる利点があると説明がありました。また、なぜこのようなPSGIが必要なのかという点については、各WEBフレームワークでアプリに求めるAPIが違い、その度にアプリケーションを実装するのは理にかなってない、ということが述べられました。
また、PlackはPSGIの実装であり、plackupという簡単に作ったアプリを試すことができるコマンドがついていることが魅力的です。このコマンドは実行に用いる実装をコマンドラインで変更することができ、実際にCatalystのアプリケーションをMojoやAnyEventで動作させるデモを見せて頂きました。また、ここでもmiyagawaさんが、セッション前まで壊れていたデモをいきなりその場で修復するという荒技を見せ、歓声を浴びていました。
PSGIやPlackに関しては、今後Perl6やCatalyst、Google App Engineなどへ採用を求めて声をかけていく予定もあるとのことで、今後非常に楽しみなプロトコルです。
Takatsugu Shigetaさん「シックスアパートフレームワーク」
TypePad開発シニアマネージャの重田さんよりTypePadで使われているフレームワークについての説明がありました。
TypePadで使われているフレームワーク
大まかに次のようなフレームワークで構成されています。
Model→MT::Object
View→MT::Template
Controller→MT::App
TypePad::Object
ちなみに「TypePadはMTでできている」というのは都市伝説とのことでした。共通のモジュールを使ってはいるものの、別物だということです。
ArcheTypeについて
Catalystの上にArcheTypeを導入し、共通部分についてはここで吸収し、さらにその上でVoxやTypePadのそれぞれの固有の機能を実装しているということでした。Catalystを使う理由については、URIからAPIを呼び出すような処理を使う際にCatalystは便利だからということでした。以前は独自のフレームワークを使っていたそうです。
開発環境について
ドキュメント管理にMediaWiki、Kwiki
ソース管理にSubversion
バグトラックにFogBugz(実績時間の管理もできて便利だということでした)
ソースレビューにReview Board
コミュニケーションにはIRC/Jabberなど
オープンソース
同社のオープンソースの取り組みについてはcode.sixapart.comを気軽にみていただければとのことでした。ソースについてはgithubでも公開中です。MovableType Open Sourceを始め、これからも積極的に貢献したいということでした。
質疑応答
「CPANのバージョンアップにはどのように追随しているのか?」という質問に対しては、まずバージョンアップしても大丈夫かどうか確認した後、RPM化し、次回のバージョンアップで更新されるようにしているとのことでした。
「 海外との分散開発において気を付けている点は?」という質問に対しては、最も重要なのはコミュニケーションで、逐一情報を流すようにしている。ときどき事の重要さが伝わらなくて苦労することがあるが、そういうときには具体的な数字を明示してから伝えるようにしているということでした。
「 シックスアパートには英語力がないと入社できないか?」という質問に対しては、「 読み書きができれば、おおよそ大丈夫」ということでした。
Masanori Wadaさん「Yet Another BPM Framework "Kailas"」
親子で登場した和田さんが紹介したのは、ビジネスプロセス管理フレームワークであるKailasという自社開発のソフトウェアです。和田さん親子は、二人で鎌倉にあるwaditという会社を経営されてます。普段は恐らく見ることができないであろう、湘南モノレールがすぐ側を通っている、オフィスの写真も公開されていました。
和田正則さんは、60歳とのことですが、年齢をまったく感じさせない熱意のあるトークで、会場の関心を集めていました。Subversionも普通に使いこなせるとのことですので、我々も負けていられません。
Kailasの名前の由来は、チベットの未踏峰「カイラス山」だそうです。これから親子で、未踏の地に足を踏み入れるのだという決意が感じられます。Kailasの紹介の中で正則さんが強く訴えていたのは、既存のエンタープライズ開発において、ITが人を支配してしまっている、ということです。これを人間中心の考え方に戻し、ITで人が幸せになれるようなプロダクトを、Kailasは目指しています。
Kailasの背景には、H.A.サイモンの意思決定プロセスという理論的なバックボーンがあるらしく、正則さんが詳細を語って下さいました。また、Kailasを実際に使ったデモが紹介されました。KailasはjQuery UIを使って直感的なインタフェースを提供しており、WEBアプリケーションにも関わらずドロッグ&ドロップで簡単にGUIでプロセスを開発できます。デプロイもワンタッチで、ドロッグ&ドロップしただけのプロセスがそのままWEBアプリとして動いていました。
最後に正則さんは、Perlコミュニティは非常に素晴らしく、うらやましいと語り、「 Perl魂をエンタープライズに注入すれば、エンタープライズの諸問題を解決できる」とPerlコミュニティに対し、強くエールを送ってらっしゃいました。
Tadashi Matsudaさん「高速なテンプレートエンジン"MobaSiF::Template"」
株式会社ディー・エヌ・エーの松田唯史さんによる、高速なテンプレートエンジンMobaSiF::Templateについての発表です。
MobaSiFというのは、携帯向けのシンプルなオープンソースのフレームワークです。MobaSiF::Templateはその中のMTemplateをベースとしています。既にCPANで公開中です。
MobaSiF::Templateはとてもシンプルで、基本機能として分岐とループと修飾子があります。機能が少ない分非常に高速です。
その理由は、binary templateとXSを使っているからです。binary templateでは先程の分岐、ループ、そして表示などの各処理を全てバイナリで表現しています。
とにかく速いので、この機能で事足りる場合には是非検討してくださいとのことでした。ソースコードはgithubでも公開中です。
Daisuke Komatsuさん「プラコアではCatalystをこう使っています。」
株式会社Plugin and Core(通称:プラコア) の小松大輔さんの発表です。最初に事例として、イラスト素材.comとマンガ市場DLの紹介があり、その後、Catalysの構成について説明がありました。
ユニークだと思ったのはServiceクラスを独自に作って、ビジネスロジックについては、全てこのServiceクラス中に記述しているということでした。Serviceクラスでは、Proj::Classをuseすると自動的にMoose→utf8 になるようにしているとのことです。また単体テストは、このServiceクラスを対象にしています。
他のモジュールとしては、Catalyst::Model::MultiAdaptor、FormValidator::LazyWay、それからPseudoRequestを利用しているということでした。
Hideo Kimuraさん「modern Catalyst」
Kimuraさんのセッションで語られたのは、PerlのWEBアプリケーションフレームワークであるCatalystの、最新情報についてです。Perlで最も主流のWEBフレームワークの解説というだけあり、非常に多くの聴講者が熱心に耳を傾けていました。
まず、CatalystがMooseへの対応を行っていることに関して触れられ、その後よくある問題であるPluginに関する注意であったり、ヘルパメソッドやRoleを使った拡張方法、さらには最近話にあがることが多いCatalyst::Controller::ActionRoleに関する解説がありました。
また、ディスパッチャーに関して、今後利用されなくなるであろうdefault :Privateやindex :Privateなどに関する基本的な情報や、$c->goや$c->visitのような知っていると便利なTipsが紹介されていました。
さらに、Catalystを使う上での重要なドキュメントとして、Catalyst::Manual::ExtendingCatalyst、Catalyst::Manual::CatalystAndMoose、そして洋書であるDefinitive Guide to Catalystなどを紹介。最終的には午前中のセッションにもあったPSGIについても触れ、Catalystの情報のキャッチアップに大変役立つ20分間でした。
Tatsuhiko Miyagawaさん「Event programming fun with AnyEvent and Coro」
Miyagawaさんのセッションは、イベントプログラミングを簡単に記述できると言うAnyEventの紹介です。Miyagawaさんが、他人のモジュールのセッションを行うのは久しぶりとのことでした。さらに、AnyEventの作者は素晴らしいコードを書く方だとおっしゃっていて、MiyagawaさんのAnyEventに対する評価の高さが伺えました。
まず最初に触れられたのが、POEとの比較です。POE::Componentが250ものモジュール数を持つのに対し、AnyEventのモジュール数は35程度。一見すると、POE::Componentの方が充実しており、いい状態のように見えますが、Miyagawaさんによると、POE::Componentのモジュールが多いのは再利用性が低いためであり、決していいこととはいえないのだということでした。
その後、話はAnyEventの実際の使い方に関するものへ移りました。TimerやI/Oなど基本的な事項の解説があり、その後例としてMiyagawaさんが作成したというAnyEvent::Twitter::StreamやAnyEvent::ReversHTTPといったモジュールが、実例として紹介されていました。
他、ラッチ処理を実現するcondvarのbegin、endであったり、AnyEventのイディオムである「my $w; $w = ...」の解説などがあり、さらにショートカットとして便利なAE::*にも触れられていました。最後に結論として、POE::Componentのコードを量産するのはもうやめにし、今後はAnyEventを利用しようと、参加者全員に呼びかけていました。
Naoya Itoさん「Perlで圧縮」
株式会社はてなの伊藤直也(id:naoya)さんより、Perlでの圧縮技術についての発表がありました。
今回は主にテキスト圧縮の分野についての話でした。
CPANの圧縮ライブラリ
CPANの圧縮ライブラリにはCompress::*系があります。符号化まで含めて一気通貫で、汎用的に使えるそうです。
その中で下記のライブラリが代表的で使えそうなものとして紹介がありました。
Compress::Zlib オーバーヘッドが小さいので高速。これを使っておけば間違いない。ただし短かいテキストには向かない。
Compress::Bzip2は処理時間を少し犠牲にしても、zlibより高い圧縮率を得たいときに使える。やはり短かいテキストには向かない。
Compress::LZMA::Simpleは符号化は低速だが、圧縮率は非常に高い。
Compress::LZOは圧縮率は高くないが、非常に高速。頻繁に更新されるデータや、複合のオーバヘードを極力小さく押えたいときに使える。
Compress::PPMdはDmitry Shkarin氏によるPPMd(以前の文脈から次の記号の出現確立を予測するモデル)のバインディング。
以下、個人的な見解と前置きした上で、汎用的なテキスト圧縮にはzlibやLZMAを、整数列の圧縮には、速度重視ならpack、圧縮率重視ならδ(デルタ)符号やゴロム符号を実装する方法が向いているとのことでした。
最後には、現在発売中のWeb+DB Press vol.52の"Recent Perl World"というコーナで、データ圧縮についての記事を書いているので、興味のある方は読んで欲しいということでした。
Cristina Nunesさん「Booking.com & Perl」
ポルトガルのリスボンからいらしたCristina Nunesさんによる発表です。今回は彼女の勤務先であるBooking.comとPerlの関係についてのお話です。Nunesさんは、2007年からBooking.comに開発者として勤務しています。
現在、Booking.comで使われているPerl関係の技術は次のようなものです。
Perl 5.88
Class::DBI(frozen version)
HTML::Mason
HTML::Template
よく人から「どうしてPerlなのか?」という質問をされることがあるそうですが、シンプルで使い易いからと答えているそうです。
さらに運用面の技術としては、
Apache + mode_perl
MySQL
memcached
git
などが挙げられました。
なおgitについてはcvsから移行中ですが、まだデザイナーがgitに対応できないことがあるので、全員が使っているわけではないとのことです。
将来的には、Perlやそのモジュール、そしてApache、mode_perl、MySQLなど全体的にバージョンが古いのでアップグレードして行きたいということでした。
次にインフラについて説明がありました。
Booking.comでは、現在Webサーバーが100台以上、MySQLサーバーが100台以上、データセンターには総勢700台以上のサーバーが稼動しているそうです。
スタッフについて
Booking.comのスタッフは国際性豊かで、スライド中の国旗の数を数えてみると10ヶ国以上ありました。驚いたのは、そのスタッフの中に、下記のGreat Perl Hackerも含まれていることでした。
Rafael Garcia-Suarez
Elizabeth Mattijsen
Abigail
Philippe Bruhat
Yves Orton
Flavio Glock
Jouke Visser
次にBooking.comのオープンソースの支援ポリシーについてですが、同社は既に50,000米ドルをThe Perl Foundationに寄付していて、さらにPerlのオフィシャルgitレポジトリのホスティングも行なっているそうです。
最後に現在Booking.comでは、世界中に25のオフィスを展開し、1900人の従業員を抱え、70ヶ国約17,000のホテルの予約を24の言語で可能にしているということです。
Gosuke Miyashitaさん「ペパボでのPerlの使い方」
株式会社paperboy&co.(通称:ペパボ)の宮下剛輔さんと伊藤洋也さんのお二人によるセッションでした。
30 days Alubumでの事例
まずペパボが展開する「30 days Alubum」というオンラインアルバムサービスで使われているジョブサーバの事例について伊藤さんより説明がありました。
ジョブサーバーとは主に画像処理を請け負うサーバで、内部ではGearmanやTheSchwartzなどが使われています。Gearmanは同期処理をTheSzhwartzは非同期処理をそれぞれ担当しています。また実際の画像処理ではImage::Imlib2という非常に高速なライブラリを使っているとのことでした。
ホスティングサービスの裏側
次に「ロリポップ」を始めとするペパボのホスティングサービスで使われている技術について、宮下さんより説明がありました。以下のようなツールを利用しているそうです。
Sys::Statics::Linux (プロセス管理)
Archer (Perl製のデプロイツール)
HTTP::Engine
Any::Moose
Data::ObjectDriver
Kwalify
Func (Python製のシステム管理フレームワーク)
qpsmtpd (Perl製のSMTPデーモン)
qpsmtpdについては、プラグイン+フック機構なので、小さいコードで機能追加しやすいということでした。ただしドキュメントは日本語、英語ともに少ないようです。
Yusuke Kawasakiさん「Corporate Perl in Recruit, OpenSocial and Emoji」
石橋さん、川崎さんの2名で担当されたセッションでした。
まず、最初に石橋さんは、リクルートさんの複雑なDB設計をAPI化して整理して、利用価値を高めるという発表をされました。昔のER図だとスクリーンに映し出されたのは、テーブル定義がたっぷり詰まった2枚に渡るドキュメント。これを毎日二人で睨んで、必要なものを地道に抜き出していった、と当時の苦労を振り返っていました。
また、インフラや開発体制についても触れられていました。特に開発においては、アジャイル開発を実践しており、ペアプログラミングとテスト駆動に力を入れられているとのことでした。さらにこのアジャイル開発は経営陣から声がかかるほどうまく回っており、今後は全社規模でアジャイルに取り組めるようにするのが課題であると締めくくっていました。
次に、川崎さんより絵文字についてのお話がありました。日本のケータイの絵文字のコードポイントは、キャリア間によって違うそうで、これを扱うためのUnicode::Emoji::E4UとEncode::JP::Emojiが紹介されました。Googleの定義する絵文字のコードポイントもケータイの3キャリアとは異なるということでしたが、これらのモジュールでそこもカバーされているそうです。
また、リクルートさんはOpenSocialにも力を入れているようです。そして、オサピー(osapi)と呼んでいる、使いやすいAPIを搭載したOpenSocialのサービスを間もなく展開するとのことで、これは大変楽しみです。なお、リクルートさんのOpenSocial実装もShindigをPerlで大部分書き直しているということで、さすがPerlのイベントであると感心させられました。
最後に優勝者には賞金が出されるMashup Awards 5についての告知があり、国内でも最大規模といえるこの開発コンテストに多くの人が参加してもらいたいと、参加者を募っていました。
ライトニングトーク
Goro Fujiさん「Moose Hacking Guide」
Mooseのコードリーディングのための、基礎知識を解説して下さいました。Devel::NYTProfをコードの呼び出し関係を見るために使うTipsなどが紹介されました。
Shunichiro Fujiwaraさん「Perl で Salesforce」
Salesforceとはなんなのか、そしてそれをPerlで使うためのノウハウが解説されました。安定性の確保には、ジョブキューを使うのがいいと薦めていました。
yuki kimotoさん「Webアプリケーションフレームワーク Mojoの紹介」
Mojoについて、Catalystとの比較も含めてとてもわかりやすい語り口で説明して下さいました。オールインワンの特徴を生かし、レンタルサーバでも動作させられるそうです。
Tokuhiro Matsunoさん「Test::TCP」
TCPサーバのテスト方法について解説されました。TAP出力の同期と空きportの探索を問題点としてあげ、それらを解決するモジュールを紹介していました。
Daisuke Muraseさん「通知マニアのための im.kayac.com」
HTTPリクエストでJabberメッセージを送れるという、便利なWEBサービスの紹介でした。iPhoneにも対応中だそうで、デモではiPhoneに通知メッセージが送られていました。
Yusuke Wadaさん「miyagawanize」
「紫のモノ」でmiyagawaさんに近づくためのスクリプトの発表でした。デモでは、dankogai氏から始まってオバマ大統領やアイドルグループまで色んな人物が次々とmiyagawanizeされ、会場からはその度に盛大な拍手が巻き起こっていました。
kamipoさん「nginxやlighttpdでMogileFSしてみた」
MogileFSの効果的な利用法を考えるセッションでした。今回の結果は失敗だったとのことでしたが、まだまだ考える価値のある分野だと感じました。
Kazuho Okuさん「Server::Starter - a superdaemon to hot-deploy server programs」
ホットデプロイを安全に行うためのモジュールの発表でした。デモでエラーのあるスクリプトをデプロイしてもシステム障害とならないことが説明されると、感嘆の声が上がっていました。
Yuval Kogmanさん「nothingmuch」
dieとevalを組み合わせて例外処理をすることの問題と、try {} catch {}についての発表でした。時間切れで最後が聞けなかったのは残念でした。
懇親会
ライトニングトークの後に、懇親会が開かれました。
※ブラッシュアップする前にあったメモ書きは、a geek born in Tomakomai へ移しました。