この記事は DeNA Advent Calendar 2019 の6日目の記事です。
こんにちは、 @karupanerura です。
DeNAの 国際学会派遣制度 を利用して The Perl Conference 2019 in Pittsburgh (以下、TPCiP)に参加してきたので、今回はその様子をレポートします。
場所はアメリカ、ペンシルバニア州のピッツバーグです。
TPCiP
TPCiPはもともとはYAPC::NAとして開催されていたPerlの国際カンファレンスです。
そもそもYAPCとはYet Another Perl Conferenceの頭文字を取った略称なのですが、 これは現在の O’Reilly Open Source Convention (OSCON)が当時はThe Perl Conferenceとして開催されていたことから、 それとは別にもっと気軽に参加できる草の根的なカンファレンスとして始まったものとされています。
そういった経緯のなか、YAPCはPerlコミュニティに長く参加しているひとにとっては親しみのある名前である一方で、 Perlコミュニティにあまり参加したことのない人にとっては分かりにくい名前であることも事実でした。
そのため、2016年のYAPC::NAからYAPCはThe Perl Conferenceとして広く告知することになりました。
詳しくはこの記事に書いてあります: http://www.yapcna.org/yn2016/news/1397
TPCiPには、前職の同僚であり新卒の同期でもある @kfly8 と行ったのですが、 彼の 参加レポート もありますので併せてお読みいただけると良いかと思います。 実際、蓋を開けてみたらかなり聞きに行ったトークはかぶっていたので、あまり紹介できる発表が無いのが残念です。
なお、TPCiPは6/16-6/21という5日間の日程で行われましたが、色々バタバタしてた結果、レポートするまで半年近く経ってしまいました。 アドベントカレンダーという良い機会ですので、いい加減レポートしなければとなんとか書くことにしました。
ハッカソン
さて、日程は全部で5日間でしたが、その前後1日づつはハッカソンとハンズオンが行われていました。
自分は終始ハッカソンで自分のモジュールをメンテナンスしたり、 つたない英語ながらハッカソンに参加していた他のひとの相談にのったりしていました。
写真は撮り忘れましたが会場のホテル内で行われ、コーヒーが無限に提供されたり簡単な朝食やおやつが出たりなど、至れり尽くせりな環境で開発ができました。 会場にはPerl本体のコミッターや著名CPANモジュールの作者の人がたくさんいたので、もっと英語力とコミュ力が自分にあればもっと交流ができたのにそれが十分にできなかったのが心残りです。
本編
受付の近くにはこんな感じで看板が置いてありました。
まずは受付をして名札をもらいます。
なお、アイコンのほうが目にされる機会が多いと思うので、アイコンの缶バッヂは自分で付けました。 suzuri で作ったものを持参しています。
本編でも朝食や無限コーヒーなどが提供されました。
こういう感じの大きな部屋でキーノートなど全員参加できるセッションが行われました。
これがセッションが始まると3つに分割されて、それに1つ他の部屋が加わっての計4トラックで発表が行われます。
休憩時間の雰囲気はこんな感じです。
初日の終了時にはお酒も振る舞われての簡単な交流会がありました。
Keynote
Perlのメンテナンスマネージャーの Sawyer X がPerlのこれまでとその未来について語るセッションでした。
Perl 5: The past, the present, and one possible future by SawyerX
より良いIDEサポートや、より良い静的解析、セマンティックな書き換え、並行処理やOOのやりかたのより良い標準的な方法の作成、などなどのビジョンを語り、意見を聞かせて欲しいと呼びかけていました。 Perlは TMTOWTDI の文化ですが、その中でより簡単にベストプラクティスを見つけられるように言語が進化していくのは望ましい未来だと思います。
セッション
特に面白かったセッションを3つ紹介します。
Testing Across The Language Barrier with FFI::Platypus
Perlにlibffiを使ってFFIを提供する FFI::Platypus とそれをどのような場面でどのように使っているかという話でした。
F自動生成したVarnishのVCLをテストするのが目的です。柔軟な処理が記述可能なVCLをテキストベースでテストするのは厳しいでしょう。しかし、VarnishのVCLはCにtranslateされるのでFFIで呼び出すことが可能です。
さらに、
Test2::Tools::FFI
の提供するlibt2t.so
とt2t/simple.h
を用いればCでTest2のAPIを触ることができるため、
FFIだけでは扱いづらいようなCの世界での状態をチェックするテストも書くことができるようになります。
かなりアグレッシブで面白いプロジェクトだと思いました。
Mocking the Filesystem in Perl
これはファイルシステムをモックするモジュールを作った話です。
網羅的なファイルシステムのモックの難しさを説き、
Perlの CORE::GLOBAL
パッケージを用いた組み込み関数の上書きや
Overload::FileCheck
を用いたファイルテスト演算子のモックについて説明していました。
モックしたケースでエラー時の呼び出し元のファイルや行が本来の呼び出し元ではなくモックするモジュールになってしまうと困ります。
Perlのgoto
はサブルーチンに対しても使うことができるのですが、goto
でサブルーチンに飛ぶとコールスタックを消費せずにサブルーチン呼び出しが行えるため、モックするようなケースでgoto
を用いるとその問題を回避できるというhackです。
しかし、それが5.16未満の古いPerlではうまく動かないケースがあったため困ったようでした。
goto is cool!
なお、Overload::FileCheckの作者がどのようにXSでOPを上書きしてhackができるのかを解説した"Overloading Perl OPs using XS"というトークもありましたがこちらも面白かったです。
Speeding Up Perl Test Suites
Perlのテストの高速化の話です。テストを高速化するために、DBサーバーを起動するのをやめてMockしたり、並列化をしたり、プロファイリングをしていくとよいという感じの話がなされました。
その中でスピーカー自身も Test2::Aggregate を作った話をしていました。 これはすべてのテストコードをうまく結合して1つのソースコードにして実行する仕組みです。
もちろん、副作用のあるテストなどでは本来とは異なる結果になってしまう場合がありますが、開発中の簡易的な確認には十分使える面白い手法だと思います。 小さなテストケースが無数のファイルに分割されているケースで効果が高いそうです。
また、一緒に行った @kfly8 のセッションもありました。
DIPをちゃんとやろうと考えると型付きのインターフェース定義は必須です。 そのために彼は自ら新しく、Perlでインターフェースを定義する Function::Interface を作ったという話でした。
LT
Perlのコードで歌詞を書いた歌を作って弾き語りする人がいたり
Perlの歌の替え歌を作ってカラオケする人がいたり
かなり自由な空間でした。
そんな中で、 @kfly8 に触発されて自分も拙いながらLTで発表をしました。
特にJSON::Typesについてはあまり知られていなかったようでその後の懇親会や休憩時間などでいくつか質問を受けました。
懇親会
懇親会はディナークルーズという形式で行われました。 適当にまとまって船着き場に向かいます。
中はこういう雰囲気です。
夜景がキレイでした。(ぶれっぶれ)
懇親会では corgibytes のCTOである M. Scott Ford さんや DateTime 作者の Dave Rolsky さんらと話していました。
日本のPerlコミュニティの様子や日本文化について聞かれたり、自分がLTした内容についてこういうケースはどうなんだと相談を受けたり、 corgibytesのステッカーをもらったりしました。
感想
英語が一番の壁ではあったものの、総じてセッションはディープな話が多くて面白いカンファレンスでした。 また、みんなPerlに対して現実的な問題としっかり向き合いつつも未来に向けて前向きに考えていたように感じました。 もっとちゃんと交流できたらもっと理解できてもっと楽しめたと思いますが、それでも拙いながら一定の交流が出来たのは自分のなかでは小さな前進となったと思います。
きっと楽しいので、日本のPerl Mongerのみなさんもぜひ行ってみて欲しいです! ぼくもまた行くのでぜひ一緒にいきましょう!
謝辞
なお、会中は Bruce Gray (Util) さんにご飯に誘ってもらったり各所で気を掛けて頂き、そのおかげでTPCiPを大変楽しく過ごすことが出来ました。 この場を借りて感謝します。
また、誘ってくれたkfly8、支援してくれたDeNA、そして同僚の各位に感謝します。
ありがとうございました。
最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。