YAPC::Hiroshima 2024 参加記 / Perlを書いていなくてもYAPCは楽しめるのか

2024/02/15

普段はRubyを書いて暮らしていますが、YAPC::Hiroshima 2024(2024/2/9, 10)に参加してきました。"YAPC" の名を冠するイベントの参加は2回目で、かつて参加したYAPC::Asia Tokyo 2015トートバッグは実家で大いに活用されていることが先日判明したところです。

"Perlを書いていなくてもYAPCは楽しめるのか" ?

冒頭に書いた通り、普段はRubyやRustばかりで、Perlを書くことはほとんどない暮らしをしています。「YAPCはなんでもありの異種格闘技戦」とは聞いていたのですが、そうはいっても "Perl Conference" 。逆張りするところではないな、と思って多少の下準備をしていきました。

予習会の開催

YAPC::Hiroshima 2024 非公式予習会

所属する企業として「予習会」イベントを開催しました。

イベントの最大のねらいはYAPCフレンズを事前に増やしてから広島に行くこと、でした。要するに広島でぼっちになるのを避けたかったというだけ。"顔見知り" が何人かいるだけでも懇親会がグッと楽しくなることは分かっていたので、ちょっと仕込みをしておきたかったのです。

結果的にこの作戦は大成功で、本番の懇親会でのコールドスタートを回避できたのはもちろん、そもそも予習会自体の懇親会がめちゃくちゃ盛り上がってYAPCが超楽しみになる状態を作れました。行く直前になってちょっと面倒になるやつ回避!

そして個人的な裏テーマに「Perlの現場での使われかたを知る」がありました。あるプログラミング言語を本気で使い込むことでこそ見えてくる良い点や微妙な点というものがあるわけですが、Perlにおけるその感覚を少しでも得たかったのです。Perlを手足のように使う猛者たちの話を聞けたことで、この点も大満足でした。

最新の処理系のビルド

プログラミング言語のカンファレンスに参加するなら最新の処理系は手元に揃えておこうと思っていて、Perl/perl5rakudo/rakudoのHEADをそれぞれビルドしていました。READMEやINSTALLを読むだけでもけっこう学びがあって、Perl 5では奇数のマイナーバージョンは開発版扱いで -Dusedevel をつけないとビルドできないとか、Rakudoには複数のバックエンド(MoarVM, JVM, JavaScript)があるんだとか、処理系のつくりの一端が見える気がします。

個人的にはビルド中に miniperl の文字が見えたのが少し感動で、もしかしてこれが miniruby の元ネタ!? と一人で盛り上がってました。奇数マイナーバージョンが開発版なのもそうだけど、ところどころに "聖地" を感じる。

なじみが薄いプログラミング言語に処理系の方面から接近してみるというのは個人的にはちょっと新しい試みだったけれど、これで理解度が確実に上がったセッションもあったので、もう少し洗練させたい手法のひとつです。

印象に残ったセッション

下準備はこれぐらいにしておいて、ここからは本編の話を。

rakulangで実装する! RubyVM

YARV互換のVMをRakuで作るという内容で、これがめちゃくちゃ面白かったです。パースやバイトコードへのコンパイルをRuby(RubyVM::InstructionSequence.compile)に投げつけて、バイトコードの評価器だけを作るのはおいしいところをつまみ食いできていてすごく楽しそう。

正直YARVの命令にはあまり詳しくないので、セッションが終わった後にいろんなプログラムを ruby --dump=insns に投げて観察していました。disasmの結果をパースするのはバイトコードを処理するよりもむしろ大変そうとも思ったけれど、正規表現で押し切れるのはPerl/Rakuならでは(?)という気もする。

発表ではそれなりの分量のRakuのコードが登場しましたが、現代風になって読みやすくなったPerl、的な印象でした。とはいえPerlと呼ぶにはPerlから遠すぎたからこそ、RakuはPerlでは無くなったのであろうことを考えると、プログラミング言語開発の難しさを感じますね……。

RubyプログラマーとしてもYARVやCRubyについて改めて勉強する良い機会になりました。自分でもVM作ってみたい。

2024年冬のPerl

そろそろリリースされそうなPerl新機能を紹介するという定番セッション(?)らしいのですが、Perlという言語の開発の進め方が垣間見えて面白かったです。ある機能の実装を進めるのに、プロが担当したらすぐできるようなことでも、新しく参加した人にアサインしてサポートしながら進めている、という話を聞いて、開発の持続性にも相当気を払っているんだな、と感じいってました。

Cache-Control: max-age=86400

キャッシュバスターズの発表。最近キャッシュについて考えることが多くて、id:onkさんの 「キャッシュは麻薬」という標語からの脱却 を読んで楽しみになっていました。sli.doに書き込まれていた「キャッシュは酒、強い人もいる。使いすぎると崩壊する」でウケてた。

個人的には「使いすぎ」がまずいのではなく、誤った使い方は少量でもまずいという気持ちで最近います。しかし、CPUのL1/L2/L3 cacheは透過的だし多段でややこしいけれど、それを指して「麻薬」と呼ぶことはまずないわけで、何の性質がこれを「良いキャッシュ」たらしめているのか知りたいところです。全然セッションの感想ではなくなってしまった。

VISAカードの裏側と “手が掛かる” 決済システムの育て方

同僚の三谷さんの発表。ベストトーク。

クレジットカードのシステムはきっちりかっちりしたプロトコルの上で正確無比なやりとりがなされている、というイメージを見事に覆すトークでした。Visaがこの雰囲気で9兆USD/年を取り扱っているの、謎すぎます。本当にどういうこと??

業務の話がそのまま面白い話になる、というのは素晴らしいものですね。いざCFPを前にすると「何も話すことがない……(何も話すことがないわけではない)」になりがちですが、事業の話がtechの話としてしっかり通用する面白さを備えている、というのは勇気づけられます & 良い職場だなと思っています。

My Favorite Protocol: Idempotency-Key Header

こちらも同僚のohbaryeさんの発表。ohbaryeのオフィシャルな読みが「おーばらい」であることを司会の方の前説で初めて知りました。

Idempotency-Keyは比較的シンプルなコンセプトだし、ひとまず動くものを実装するのもそう難しくないプロトコル、という程度の認識でいました。質疑応答での鋭い質問「Idempotency-KeyのストレージをメインのRDBMSと同居させるとロングトランザクションになるうるし、別にしたら別にしたで分散トランザクションの諸問題が顔を出すのでは」に対して、想定質問だと言わんばかりにスライドを取り出し適切な回答を返すのを見て、レベルがとんでもなく高い場に来たな…… と横でうなずくばかりでした。

いわゆる付録/補足スライドを発表の真ん中に入れてしまって、発表中には超高速でめくっていく手法はとても良かったです。この類のスライドって後でアップロードしても気づかれにくいものですが、これなら存在は確実に認知してもらえる。真似したい。

思い出


RubyKaigi 2017以来の広島。台風直撃とカープ優勝が思い出深い

広島は都市の中に広い空があるのが良い

そしてRubyKaigi 2024へ(3次会の様子)

書き疲れてきたのでこの辺で。自分が参加する次のおっきなカンファレンスはRubyKaigi 2024になると思います。沖縄で会いましょう!