y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

PHPerKaigi 2020 に参加しました

PHPerKaigi 2020 に参加しました。2 月 9 日 (日) から 2 月 11 日 (火・祝) の開催で、会場は例年と同じく 練馬区立 区民・産業プラザ Coconeri ホールでした。参加者同士の交流をテーマにしているカンファレンスで、技術セッションのほかにも様々な企画が用意されており、楽しく 3 日間参加させてもらいました。スタッフ、発表者、スポンサー企業各社、皆様ありがとうございました。聴講したセッションのいくつかについての感想、その他に私が参加した企画などを中心に報告します。
phperkaigi.jp

Deep Module in PHP

speakerdeck.com

プログラムの設計について改めて考えさせられる内容でした。Deep Module という考え方はよく分かったのですが、これを上手く実現するのはなかなか難しそうだという感想を持ちました。発表で示された CakePHP の save() メソッドを例に挙げると、これは引数の $entity が多機能だから実現できているように思います。発表で紹介された教科書は未読なのですが、Deep Module を実践しようとすると、ある程度最初に全体像を見通したトップダウンな設計が必要になりそうだという印象です。

もっと気軽にOSSに Pull Requestを出そう!

speakerdeck.com

OSS への積極的なコントリビューションを後押しする発表でした。テストコードやドキュメントにも改善できる箇所が残っている、未使用変数の除去といった小さな改善でも遠慮せずプルリクエストを送るといった具体的な経験談が紹介されました。私も OSS にいくつかプルリクエストを送った経験はありますが、内容としてはバグ報告とその修正というものでした。紹介された例のなかで、React のドキュメントの "mandatory" が "required" に変更された話は、プルリクエストを送る内容として私があまり想定していなかったもので、特に面白かったです。

PHPer Code Golf

コードゴルフは、要件を満たすプログラムをどれだけ短く実装できるかを競う遊びです。カンファレンス期間中に出題されたので、私も取り組んでみました。問題と優勝者の回答は、優勝した tenkoma さんのブログに記載されています。なお、一般的なコードゴルフとは異なり、コードフォーマッタを通したうえで行数や構文要素の数といった複数の指標で評価されるというレギュレーションでした。
⛳ PHPer Code Golf by pixiv(PHPerKaigi 2020) 上級編の回答について解説 - こもろぐ @tenkoma

私の回答は eval を使うもので、ちゃんと改行、インデントして書くと以下の内容でした。入力の JSON の key を左辺、value を右辺とする代入文を評価していけばよいという発想です。そのまま代入すると各変数がグローバル変数に散らばり扱いにくいので、オブジェクトのプロパティとして解決しました。

<?php
$o = new stdClass();
foreach (json_decode(fgets(STDIN)) as $k => $v) {
    eval("\$o->$k = '$v';");
}
echo json_encode($o);

実際に私が提出した回答は以下のとおりです。私はうっかりレギュレーションを確認せず「普通にコードゴルフ」してしまったので、一行にしたうえで不要な空白や括弧は削っています。$o の定義も削除し、それによる警告は @ で抑制しています*1。当日は、内心「これはもしかすると勝ったんじゃないかな」と思っていたのですが残念でした。

<?php foreach(json_decode(fgets(STDIN))as$k=>$v)eval("@\$o->$k='$v';");echo json_encode($o);

今回のコードゴルフは準備のトラブルもあったようで上記の問題は実質的に 1 時間くらいの勝負だったのですが、意図的でなかったとはいえ、こうした短期戦は日頃の「引き出し」で勝負することになり面白いと思いました。私は (毎年 PHP 関連のカンファレンスに参加していながら!) Web の技術には詳しくなく PHP でコードを書くことも少ないので、parse_str 関数は優勝者の回答を見るまで全く思い浮かびませんでした。

参加者との交流など

セッション会場とは別に、Track C として参加者同士の交流を目的としたスペースが用意されていました。今年はオープンスペースになっていてとても利用しやすく、他の参加者の方と話したり、あるいは単に休憩したりと活用させてもらいました。今年は各参加者の Twitter アイコンを取り込んだトレーディングカードも配布されていて、名刺代わりに気軽に交換できるのも楽しい企画でした。PHPerKaigi には 2018 年の初回から毎年参加していますが、こうした工夫が年々積み重ねられていて、次回も楽しみになります。

*1:文字数の観点では、実行環境では short open tag が有効だったようなので、あと 4 文字削れました。また標準エラー出力が考慮されるかは確認しませんでしたが、もし考慮されないなら @ による抑制も不要なので、さらに 1 文字削れます。