Perl QA Hackathon 2013に参加してきました

以前こちらでも予告しておいた通り、4月12日から14日までイギリスのランカスターで開催されたPerl QA Hackathonに参加してきました。今回のイベントも多くのスポンサーさまに支えていただきました。運営チームのみなさまおよび企業団体スポンサー(cPanel, Dijkmat, Dyn, Eligo, Evozon, $foo, Shadowcat Systems Limited, Enlightened Perl Organisation, Mongueurs de Perl)のみなさま、そして昨年に引き続き個人スポンサーとして寄付をいただいたSyohei Yoshida (@syohex)さま、ありがとうございました。おかげさまで大変有意義な時間を過ごすことができました。

また、今回のQA Hackathonでは、ランカスターでのHackathonにあわせて東京でも一日Hackathonが行われたので、こちらにもリモートで参加しました。会場をご提供くださったFreakOut Inc.さまにもあわせて感謝いたします。

さて、今回のHackathonではいろいろと興味深い出来事がありました。私が何をしたかはあとから書くとして、まずはHackathon全体としてどのようなことが行われたかを簡単に紹介しておきます。

Lancaster Consensus

まず、今回のHackathonのひとつのハイライトとして、CPANモジュールのインストールに必要な各種モジュール、サービス (toolchain) にかかわっている人たちが今後開発やサービスを継続していくにあたって確認しておきたいさまざまな項目を1日約2時間ずつ議論しました。その成果はランカスター・コンセンサス (Lancaster Consensus)という形でまとめられています。詳細については議論をリードしたDavid Golden氏の記事に注釈付きで詳しく説明されていますが、いささか長いので、ここでは多くの方に影響がありそうなところだけ要約しておきます (特殊なことをしているモジュール作者やtoolchain開発者向けには別途全訳を用意するのでしばしお待ちください)。

追記: ランカスター・コンセンサスおよびオスロ・コンセンサスの翻訳をperldoc.jpにアップしておきました。

  • 今回の合意で、今後toolchainモジュールがサポートするPerlのバージョンは2003年9月にリリースされた5.8.1以上とすることが決まりました (念のため、Perl 5 PortersがサポートするPerlのバージョンは直近の安定版2つのみです。2013年4月時点ではPerl 5.16.xとPerl 5.14.xの2つですが、近々リリース予定のPerl 5.18が出た時点でPerl 5.14.x系列のサポートは終了します)。お仕事の関係でどうしても5.6.x系列を使い続ける必要がある方は CPXXXAN (読み方についてはこちらの記事をどうぞ) と呼ばれる過去のバージョン専用のCPANを使うことで対応するモジュールをインストールすることはできますが、ExtUtils::MakeMakerやTest::Moreをはじめとするtoolchainの根幹をなす各種ツールが、今後メンテナンスの手間を軽減するため、Perl 5.8で導入された機能や、Perl 5.8でコア入りしたモジュールを積極的に利用していくようになることも予想されますので、可能であればこの機会により新しいPerlへの移行をご検討ください。
  • 「特定の状況以外では実行してほしくないテスト」を指定する環境変数がより細かく定義されました。特に現在AUTOMATED_TESTINGという環境変数を利用しているCPANモジュール作者の方は、(1) CPAN Testers以外には実行してほしくないテストなのか、(2) ユーザからの入力を求める(実行中に処理が止まりうる)コードが含まれるテストなのか、(3) 長い時間がかかったり、不確実な外部リソースを利用する必要があるのでインストール時にはスキップしてもいいテストなのか、(4) リリース時のみ実行すればいいテストなのか、(5) 開発時のみ実行すればいいテストなのか、を判断したうえで、それぞれ AUTOMATED_TESTING、NONINTERACTIVE_TESTING、EXTENDED_TESTING、RELEASE_TESTING、AUTHOR_TESTING という環境変数を適切に設定ないし処理することが求められます。
  • 今後CPANにアップロードするモジュールは、メインのモジュールとディストリビューション (tarball)の名前を適切に対応させることが求められるようになります。また、大文字小文字の区別がない環境で問題を起こさないよう、ディストリビューション登録時のチェックも大文字小文字の区別なしに行われます。
  • PAUSE IDの登録は現在手作業で行われていますが、今後しかるべき対策をとったのちに自動化される予定です。また、モジュールのアップロードやRTへのバグ報告などを含めて、まったく利用実績のないIDについては、しかるべき手続きをとったのちに削除されるようになる見込みです(なお、過去にモジュールをアップロードしたことのあるIDについてはこの自動化で削除の対象になることはありませんのでご安心ください)。
  • CPANにアップロードされているディストリビューションのうち、一定の条件を満たす古いバージョン (それより新しい安定版が3つ以上ある、等)については、しかるべき手続きをとったのち自動的に削除されるようになる予定です。何らかの事情で旧版が必要な方は前述のCPXXXANやBackPANからダウンロードしてもらうようになる見込みです。
  • 昔はCPANモジュールの登録時にはあらかじめ名前空間やモジュールの種類を登録しておくことが推奨されていました (この登録も手動で行われていたため、不適切な名前で登録しようとすると管理者側からより適切な名前が提案されるなどの教育効果がありました)。今後この名前空間などの登録(およびそれにともなう人的作業)は廃止される見込みです。新しくCPANモジュールを登録する前にPerlコミュニティからの意見を聞いてみたい方は、PrePANなどをご利用ください。

その他の成果

その他、各参加者の成果については下記のページにまとめられています。まだすべての成果が網羅されているわけではありませんが (ごめんなさい、私もまだ書いていません)、Devel::Coverチーム、Test::Builderチーム、DBI/DBDチームなど、それぞれが数人のグループに分かれて、いかにもHackathonらしい議論と実装に取り組んでいました。

http://2013.qa-hackathon.org/qa2013/wiki?node=Achievements

また、個人的なプロジェクトとしては、CPAN->grepの作者でもあるDavid Leadbeater (dg)氏のperl in JavaScriptが興味深い成果をあげています。

私の作業報告

私は予告通りもっぱらCPANTSの整備をしていました。これについてはまだ作業中の部分が多く、本番サーバには変更を反映できていませんが、期間中30件強のコミットを行い、メトリクスを2増8減して、都合14件のチケットを閉じられる状態にしておきました。また、CPANTSの改善の一環として、PAUSE作者のAndreas Koenig氏に(PAUSE内で行っている).pmファイルのpackage名やバージョン情報を取得するコードを独立させられないかを相談したり(氏にはCPANのインスタントミラーの最新事情についても教えていただきました)、Module::ExtractUseの作者であるThomas Klausner氏に連絡をとってYasutaka ATARASHI氏のパッチを取り込んでくださるようお願いしたり、Test::KwaliteeやModule::CPANTS::Analyseのメンテナ氏と相談してModule::CPANTS::Kwalitee以下のメトリックスのうち、ローカルにインストールする必要のないものや、インストールに問題があるものなどを別ディストリビューションにわける相談などをしていました。これらの作業は現在も継続中で、それぞれ以下のリポジトリで開発やテストを行っています。

また、サテライト会場でのHackathonでは、h2xsの置き換えを念頭において開発を進めていたモジュールの整備をしてgithubに公開しました。

これらのモジュールについては、もう少し開発を進めてCPANにリリースするなりなんなりした時点であらためて記事を用意しようとおもいます。

そのほか、DBICのメンテナである ribasushi 氏から SQLite 3.7.15 以降 ORDER BY の機能強化が行われたことによる潜在的な問題点の指摘を受けたので調査と対応を行いました。これについては項をあらためて説明します。

その他

例によって日中のハック以外にもさまざまな出来事がありました。特にお世話になった方を中心に紹介しておきます。

  • 昨年もいろいろ気を遣ってくださったWendyさんとLizさんから、昨年話題になったドイツにあるPerl村のワインをおみやげとしていただきました。リュックひとつの旅だったため中身は帰りの飛行機に乗る前の日に飲んできてしまったのですが (コルク抜きを探してさんざん歩き回ったのですが、いざ開けようとしたらスクリューキャップだったことに気がついたという)、ラベルははがして持ち帰り、次のOSDC.TWのスライドにネタとして埋め込みました。
  • 最終日の夜にはmst氏も現れ、9月に来日するという話や、Shadowcat Systemsをつくった理由などをうかがいました。OSDC.TWのスライドには同じくQA Hackathonのおみやげとしていただいた氏のコースター?(名刺?)の写真も載せてあります。
  • 2日目の夕食後にはCPANTS仲間でもあるdolmen氏がランカスターに持ち込んでいたChartreuse VerteをOslo.pmのSJN氏、Joakim氏といっしょにいただきました。
  • Git::*モジュール仲間ということで、Git::Repositoryの作者であるBooK氏に誘われて、同じくGit::Subというモジュールを書いているdolmen氏といっしょに記念撮影。どこかで見かけることがあったら苦笑してください。

ほかにも、NY.pmのJames Keenan氏や、DuckDuckGoのGetty氏など、いろいろな方にいろいろなお話をうかがいました。もちろん全員とお話できたわけではありませんでしたが、今回は毎朝各自持ち時間1分以内で進捗報告をする時間が用意されていたおかげもあって、前回よりもかなり多くの方の顔と名前を一致させられたようにおもいます。

来年はフランスのLyonが会場とのこと。今回のHackathonの反省をもとに、今回よかったこと、足りなかったことの整理がもう始まっています。参加申し込みが始まるのはずっと先の話ではありますが、興味を持たれた方はぜひperl-qaのメーリングリストや、irc.perl.orgの#perl-qaに参加してみてください。