ぱいぱいにっき

Pythonが好きすぎるけれど、今からPerlを好きになりますにっき

YAPC::Hakodate 2024に行ってきました #yapcjapan

お疲れさまです! ブログ書くまでがYAPCということでやっていきます。

yapcjapan.org

前夜祭

前夜祭ではガラナを受け取って早速北海道に来た感が出ておりました。この後アンカファレンスという形で会が始まり、序盤はmoznionさんやpasta-kさんの話を聞いてたんですが、目線が合ってしまい私も壇上に上がることに。AIとか色々重いテーマでしたが、わりかし今自分が他人と話したいことが話せてよかったかと思います。文芸的プログラミングのくだりとかまさにそうですね。

そのあとは基本的には後ろで話したり(声がもし大きかったらすみませんでした)、別室に移動してきた人と話していました。

懇親会が終わり、たまには知らない人についていこうかなと思ってたら、結局ホテルに帰ってセコマのホットシェフを食ってました。知らない人の飲み会について行くスキルなのか度胸なのか身につけたいですね。

本編

バスに乗る前に爆速で食べた海鮮丼

当日の会場であるはこだて未来大学は市街地から離れたところにあるため、事前に購入しておいたバスチケットでの移動となります。その出発時間が早いのですが、函館朝市の場所が乗り場である函館駅から近くて助かりました。おかげで余裕が20分しかなかったものの、シュッと食べて「とにかく函館に来て海鮮食ったぞ!」という気分は味わえました。もちろん味も良かった。

会場に到着

会場のみらい大ですが、地上から入ったところが3階っていうのは、大学や高専あるあるの構造ではありますが、非常に綺麗かつでかい箱に吹き抜けと釣り廊下を駆使した構造で非常に面白かったです。入ってすぐのフロアに体育室的なものがあるのは、雪が降っても外に出ずに移動できるような工夫でしょうか。普通ああいう建物は他の大学だと独立した建物になってがちだと思ったので。

またブースも色々回って各社色々やっているなあという感じ。弊社もまた出したいなあ。

さてそうこうしているうちに本編が開始しました。ここからは私が聞いた各トークの感想について簡単に紹介してきます。

Perlで始めるeBPF: 自作Loaderの作り方

speakerdeck.com

eBPFは聞いたことはあるものの、まだ具体的に何に使うのかというのがわからない状態で話を聞きました。システムコールカーネル内でトラップして解析するような用途に使うのかなと思ったのですが、もっと広範囲に使える、つまりカーネルモジュール全般を作れる機構であることがここで初めてわかった気がします。

私はPerlはわりかしよく書いている方なのでpack/unpackが来ると興奮します。前回の私のパスキーを実装する発表でもやった感じですね。Perlは意外とバイナリに強いんだなあ(本当かな?) ここではELFのパースに使ったり、syscallでロードする時の引数を作ったりする時に大活躍。

このトークでは最初から「知らなかったを聞く」ができて大変良かったですね。

2024年秋のPerl

これがないとYAPCが始まらない、と私は思っているcharsbarさんの定番トークです。私は新機能が提案されるPPCsや前のバージョンとの差分を出しているperldeltaをちょいちょいウォッチしているんですが、海外の方でのPerl開発の微妙なニュアンスや進行中の状況などがキャッチアップできて、非常に実用的なトークです。

今回の話だと、やはりcpanmのhttps対応どうするかの話がありましたね。私自身もどうなるんだろうと注目していますが、どうなるんでしょうか(どうなるんでしょうか以上が何も言えない)。

PerlPerlによるPerlのための言語サーバーを作る

現代ではVSCodeをはじめ様々なエディタで使われるLanguage Server Protocolの概要について説明しつつ、PerlのLSPをPerlで実装する話でした。

こちらもeBPFの話と同様、技術的要素の入り口として捉えるのにぴったりな発表だったかと思います。LSPは言語関係の機能以外にもエディタに依存しないエディタの拡張を作るのに使える気がするので、何かしらやってみたい気持ちはあります。しかしやりたいことが多すぎるんだな。

perl for shell, awk, sed programmers

speakerdeck.com

私の発表です。現代においてPerlを使う場面としてsedawk, シェルスクリプトの代わりにPerlを使うのはどうかという提案の発表でした。

この発表をする背景について説明します。最近シェルスクリプトがWebプログラミング界隈で昔よりも多く見る気がしますが、それは2つの背景があるかと思います。

  • JVM言語やGo, Rust, TypeScriptなどコンパイルを要する言語によってWebサーバーを記述するようになったため
  • Webの世界でも分業が進み、SREやプラットフォームエンジニアリングの分野でアプリケーション記述言語に依存しないシェルスクリプトが採用されている

シェルスクリプトはどの環境でも入っており、またポータビリティがあるとされている理由から採用されていると私は考えていますが、これらのメリットは実は正しくないのではないか、Perlの方が適しているのではないかというのがこのトークの骨子です。

もちろんRubyPythonJavaScript等をアプリケーション記述言語として用いているのであれば、そちらを採用するのは私は良いかと思います。しかしコンパイル言語のようなそのような適当な手段がないケースでの選択肢にPerlはまず上がることがないと思いますが、選択肢に上げていいんじゃないかなと。シェルの文法とPerlの文法どちらが詳しいですか、どっちがあなたの慣れている言語に似ていますか、などなど言いたいことはたくさんあるのですが、とにかくPerlも忘れないで!っていう話でした。

これでPerlについて一人でも注目していただける方が増えると良いかと思います。この後の懇親会でも僕のトークを聞いてない方にさらりと概要を説明したら「確かに〜」というフィードバックをもらえたので、聞いてもらったら何割かの人はためになるとは思う話をできたかと思います。でもカンファレンスって時間が限られているから、自分が知っているか、隣接領域、もしくは仕事に役立ちそうな話、自分の周りの人が話題にしているような話に行っちゃいがちですよね? それは常識的な行動だと思うので、それに抗って「いかにPerlを書いていない人にPerlの話を聴きに来てもらえるか」っていうのがなんか今後の課題だなあと思っています。

言語ドキュメントを翻訳し、未来に向けて更新し続ける技術 ~perldocjpを例に~

perldoc.jpで公式Perlドキュメントを翻訳している白方さんのトークです。Perlっぽくpodで段落ごとに区切って翻訳して行くのはなるほどな〜と思いました。

ちょうど仕事でLLMとかいじってて段落で区切ってベクトル化するとかやってるんですが、これに向いているドキュメントとそうでないドキュメントがあるように感じます。多分公式ドキュメントなんかは向いているかと思います。コンテキストがちゃんと段落で区切られているとかそういう傾向があるとは思っています。そういった性質があるから段落ごとに翻訳でうまいこといけるんだなあとか、一人で考えていました。

令和最新版Perlコーディングガイド

speakerdeck.com

アナグラさんの発表でしたが、自分がこのテーマでも発表したかったとは思ってましたが、このトークでよかったなあと思いました。そもそも実際にはてな社でガンガン最新記法を採用していっているのが良いですね。Perlも部分的に新しいキーワードを有効にできるなどの機能があるので、そういうやり方に向いているとは思います。

今のPerlの開発はわりかりアグレッシブになっていると思っています。例えばtrue/falseやtry/catchがこのスピードでデフォルト有効になるとは思ってなかったです。そのスピードで発展していってる言語が、このカンファレンスに来るような人のほぼ全てのPCに最初から入っているってすごくないですか? 今、学ぶべき言語はPerlだと思うんですよね(ポジショントーク

ちなみにこの発表で挙げられなかった新機能で私が一番いいなと思うのは、iteration over multiple valueですね。

for my ($i, $j) (@array) {
    say join(" ", $i, $j);
}

こんな感じで一回のループで2個一気に取れます。それの何が嬉しいの?ってなるんですが、hashで回すときに便利で、

for my ($k, $v) (%hash) {
    say $k . '=>' . $v;
}

こんな感じでkey valueがペアで取れます。ハッシュはリストコンテキストで受けるとk, v, k, v ... のリストで返ってくるので「2個同時に取れる」がハッシュのリスト受けの性質と相まって「キーバリュー同時に取れる」に変化するんですよね。Perlっぽいなあと思います。

WebTransportは未来の技術?

speakerdeck.com

Perl関係じゃないですが、Web API大好きっ子でWebSocketに思い入れがある人間なので聴きに行きました。

やっぱりまだライブラリを含めて発展途上な感じはしますが、クラサバモデルでリアルタイムやる時にWebRTCよりは簡単に、WebSocketよりは早く、かつ切断に強くなるのは良いですよねえ。

CloudNative Meets WebAssembly: Wasm's Potential to Replace Containers

speakerdeck.com

WebAssemblyも気になるので聴きに行きました。そういえば去年から今年の序盤にかけてperlをWASM化するチャレンジをしていました。Emscriptenはいけるけれど、WASIはlongjumpの壁があり、WASIXはコンパイルできるがwasmerで動かないみたいな感じでした。

これを聞くとWebAssemblyで動くかどうかは結構今後の鍵になるかなと思います。質問にあったようにDockerからWebAssemblyにするにはサンドボックスとしては確かに一緒かもしれないが、既存コードのリフトアップには大きな飛躍が必要かと思います。

一方スクリプト言語はとにかくランタイムがWebAssembly化されていれば、コンパイル言語に比べたらワンチャンある気がします。perlのWebAssembly化また頑張るかなあ。ruby.wasmのAsyncifyを参考にすればいけるとは思っています。GCとかもRubyに比べたらシンプルですしね。

Lightning Talks

いやーこれぞLTっていうのがどんどん出てきてよかったですね。勢いって共通項はあるとは思うんですが、それぞれスタイルやテーマが違いつつも、オッと食いつくような奴が見れてよかったです。

moznionさんのPerlRubyと聞いてautoboxのこと思い出したんですけれど、メソッド呼び出しがアローとドットで違うので、あの問題には使えないか〜。

キーノート

speakerdeck.com

本人からLTとキーノートでテンションの差がって言ってたんですけれど、どっちかというとLTの方のテンションによっていたかと思いますが、これはこれで楽しいキーノートでよかったと思います。というかコロナ後のYAPCってコロナ前のしっとりって感じよりは結構淡々時々笑いありっていうスタイルになってませんか。大西さん、とほほさんどちらも笑いがあったかと思います。今後のキーノートはこんな感じになるのかもしれない。

moznionさんとは直接一緒に働いたことはないものの、比較的近くから見ることが多く、しかしスライドでそんな感じだったか〜というのはあります。小切手のくだりは、なんかグッとくるものがあります。こうやって他人の人生を俯瞰して見る、さらに身近な人物というのはなかなか、僕にとっても今までにないキーノートでした。

クロージング

次ある!!!よかった!!!! でもなんか大変そうなのでなんか手伝いたいな。しかしトークもしたいな??? どうすればいいんだーーー〜〜!!!! ところで福岡は好きな街です。今年もなんだかんだ博多に行ったんですわ。

というわけでまた次も会いましょう〜〜! 次のYAPCでもPerlに絡んだ話できるように目指します!

ところでこれは翌日に行ったラッキーピエロで食べたmoznion氏おすすめのチャイニーズチキン2段のり弁当です。ドカ食いセットなのは見逃してください。バーガーを結局食べれてないんですけれど、食べている時に「確かにチャイニーズチキン美味しいんだけれど、最初これでいいんだっけ?」となったのは秘密です。