RubyKaigi 2024に参加できて本当に良かった

RubyKaigi 2024に参加してきました。

今回参加までに紆余曲折あったので、一時は参加を諦めていたんですが、何とか無事参加することが出来ました。

2011年に初参加して以来休まず参加していたので、ついに連続参加が途絶えるのかと思ってましたが、無事連続参加を達成できて嬉しい限りです。

今回はそういう事情もあってか、コミュニティとの繋がりを強く感じることができたRubyKaigiでした。

色々思いが溢れてしまって、技術的に楽しかったこと、自分が嬉しかったこと、参加前の事情とか全部書いてたらえらい分量になってしまいました。気が向いたら目に付いたところだけ読んでくださいw

参加前

そもそも何があったかというと、大体去年の12月ぐらいから咳が止まらなくなり、更に年明けぐらいに高熱が出た上で咳が出続けている状態でした。

余りに咳が酷かったので、喉に傷が付いた後胃酸が逆流したりして声帯の近くに潰瘍みたいなのが出来て、まともに喋ることが出来なくなりました。

一番酷い時は、水飲むだけで苦痛だったし夜は寝れないし微熱が続くしということで、休職しようかと思ってたぐらいです。

大体その状態が2ヶ月半ぐらい続いて、本当に最悪の場合は咽頭癌の類かもしれんしこれはRubyKaigiまでに回復するか分からんぞ、ということで一旦参加を諦める覚悟をして、予定を立てるのを止めました。

その後、病院で検査した結果悪性腫瘍の可能性はほぼ無いということが分かって、そこからちょっとづつ状態が回復しました。多少心理的要因もあったのかもしれません。回復傾向になるまでは、かなり精神的にもキツかったですね。

3月後半ぐらいから概ね喋れる様になったんですが、体調がまだ不安定だったのでそこでもまだ参加は決めてませんでした。

4月前後で、Asakusa.rbの花見があって、久しぶりに人とちゃんと喋ってみて、なんとか乗り越えられたので、この辺りから行けそうだなという気になってきました。

その後、RubyKaigiのタイムテーブル解説回が4月の後半にあって、行くかどうかも決めてないのに参加したんですが、kaneko.yさんとかtagomorisさんがすげー楽しそうに自分のトーク内容をアピールしてくるので、これは行く覚悟を決めるしかないなと思い、その翌日に予定を立て直しました。

後は、悪化しないことを祈って当日へ、という感じです。

沖縄は飛行機の本数も宿も多いので、4月の終わりに予約を取っても割と何とかなったのが幸いでした。

参加中

今回、そういった事情もあってTwitterを見てくれてた人達からは、えらく体調を心配されると共に「来られて良かったですね」と声をかけていただきました。

会う人、会う人に言われたもんだから、同じことばっか喋ってるなwと思ってしまった。

でも、本当に嬉しく思いました。ご心配をおかけしましたが、ちゃんと楽しむことができましたし、コミュニティの皆さんと交流することが出来て良かったです。ありがとうございました!

その他のハイライトについては、続きで書いていこうと思います。

Day0

会場近くのVAMOSで、MNTSQさんにビールを奢ってもらいつつ、kwappaさん、ryopekoさん、森田さん、makimotoさんといった面々で飲んでました。その後、福岡のjimrockさんと合流して、jimrockさんの昔の知り合いがやってたというお店にタクシーで行き、とても地元民向けっぽいお店で二次会という感じ。

この後も大体毎日イベントの合間にビール飲んで話したりする場としてお世話になった。

煮付け(アカマチだっけ?)がすごい旨かった。後グルクンの雲丹焼きが酒を吸い取る力を持っていた。

kwappaさんと自分の仕事上の立ち位置とか、自分の中途半端さみたいなものについて話が出来たのが良かった。

ryopekoさんと同じホテルだったので、最後にコンビニで缶ビール買って延長戦したのも楽しかった!

Day1

1日目が自分にとって一番セッションが濃かった気がしている。

キーノート

とにかく、ぺんさんのキーノートが圧巻で芸術的でめちゃくちゃカッコ良かった。1000人入るホールに埋まっている聴衆が全員「ん?え?何?」ってなってる空気感を感じることって人生で早々無いだろうなと思いましたね。

使える技術の一つ一つは理解できなくはないが、それをやろうとする発想力・想像力の幅の広さが全然違うんだなということを実感した。自分もそれなりにはRubyで悪さをするタイプですが、次元が違う。TRICK 2025の開催も決まったし、来年が楽しみです。人生で一回ぐらいは応募してみたいがはてさて……。

kanekoさんのセッション

また、自分が参加を決めたkanekoさん、tagomorisさんの両名の発表が1日目にあったので、それもバッチリ聞けたのが良かった。

kanekoさんの発表は技術的にも面白かったんですが、特に凄いなと思ったのがプロジェクトのゴールというか行きたい未来をちゃんと見据えていて、そのために必要なブロックをちゃんと切り出して分かり易い問題に落としていることだと感じました。今回の発表は明確に到達可能な未来が見えていて、それに向かうチームが育ったことをアピールするという目的もあったのかなと勝手に思っています。

ちなみに、自分はRubyのParserのスタンスとしては、処理系の基盤はParser Generatorで生成するべきだと思っていて、kanekoさんの説明に納得している立場です。Rubyは結構APIファーストなデザインで作られている言語だと思っていて、これはRubyを使う人に負荷をかけずに処理系の内側を柔軟に変えられる様にする意図があるのだと思ってますが、一方でAPIファーストで何かを追加しようとした時に文法が収集付かなくなる可能性もありそうだと感じていて、安全にメンテ可能な確かな基盤として、明確な文法基盤がある方が今後のメンテにとって有効なんじゃないかと考えています。

一方、MatzがASTのAPIとしてはPrismを採用するつもりと言っていて、それについても自分は賛成です。Prismはエコシステムの対応状況をかなり意識して作られているというか、現実的な今のユースケースを既にある程度解決している所に優位性があります。RubyPrize受賞の時のKevinさんのプレゼンを聞きましたが、既にParser関連の野良gemの大半を置き換えることに成功しています。Rubyのエコシステムの中で便利に使える共通のASTインターフェースが、処理系の中でメンテされるのであれば、それだけで十分役割を果たしたんじゃないかなあと思うところです。

という訳で、今の自分にとっての理想的な共生関係は、Lramaが処理系のパーサーを担ってそこからCに限らず色々な実装のパーサーを生成可能になっていて、Rubyレベル(もしくはC拡張レベルも?)でパース後のASTを扱うインターフェースはPrismが生み出したAPIでコントロールできる、という状態が良いなと思っています。まあ、一Rubyユーザーによる勝手な妄想ですがw

yujiyokooさんのセッション

初めてRubyKaigiで見た時からファンで、毎回実機のゲーム機と自作のプレゼンツールで発表自体がデモになっているというクールな発表です。 今回はWiiのモーションセンサーをドリキャスに移植して釣りコンのモーションでスライドが操作できる様になってた所が最高に変態だと思ったポイントです。 情熱とロマンを感じますね。

後になって会場でyujiyokooさんとお話しする機会があり、同じ靴(ジャングルモック)の愛用者であることが分かり嬉しかった。相変わらずジャングルモック仲間が多いRubyKaigi。

tagomorisさんのセッション

話は変わって、tagomorisさんのNamespaceですが、これは直近のRubyの中でも一番自分に刺さるキラーコンテンツでRefinements以来のワクワク感があります。

今の理解では処理系内部のクラス・定数構造の基本形をroot namespaceでfixし、main namespace、sub namespaceと段階的にcopy on writeでクラス構造を複製しつつ変更を反映させるという構成だと理解してます。

今回は実装の詳細まで降りる時間が無かった様なので、想像でしかないんですがRubyの定数参照は非常にややこしいのでその辺りの解決と、クラス構造を複製した時に思わぬところから参照が残っていて変更が伝播しなかったり、GCで消されて死ぬというのが難しそうだなと思っています。後、今後の展開で気になったのはObject Shapeとの関係かな。必要なものがコピーされてれば、後は内側で勝手に解決されそうな気はするけど、本当か?という気もする。

Namespaceは、Railsで真面目にモジュラモノリスの区分けを行う上で非常に役に立ちそうです。RDBを共通化しつつコンテキストごとにモデルを区切っても明確に範囲が限定できるはず。また、fluentdの様なプラグイン構造を持ったアプリケーションを作る上では依存ライブラリの衝突は現実的に発生しうる問題で、特にサイレントに微妙に壊れた時が一番困るが、それを解決できそうです。他にはRailsを部分的にアップグレードして影響範囲を確認したり、bindingを引っ張り出して遊んだりしてみたいですね。UnboundMethodを引っ張り出すのは流石にメソッドエントリが一致しないので使えなさそう。

更には、ドラスティックなDSLを実現するのにも使えそうです。一定の処理領域内なら組込みクラスを弄っても変更内容を閉じ込められる。この辺りRefinementsに近いところもある。Namespaceだと変更内容はNamespace全般に伝播するので、Refinementsより便利なこともある一方で、Refinementsはスコープがより限定的なのが逆に良い点になるケースもあります。状況に応じて使い分けていきたい。(Refinementsはモジュールの探索チェーンの動きがちょっと特殊なので、Namespaceの実装時のエッジケースになりそうな気もするがw)

一方で、セッション中でも語られていた様に、gemのエコシステムにおいて古いバージョンが維持される逆向きのインセンティブが発生する懸念は理解できるし、それに関連してbundlerとの統合についても懸念する意見をTwitterで見ました。コミュニティにとってより良い機能にするためには、考えることが色々ありそうで、この辺りの意見交換では自分も貢献できそうに思いました。

参考: サプライチェーンアタックの対策について以前のRubyKaigiで登壇されていたMaciejさんのツイートからのスレッド

こんな感じで実用的かつRubyの柔軟さの幅を広げることもできそうということで自分の中では一石二鳥の機能だと思っていたんですが、Day3のMatzのキーノートで4.0の目玉になる可能性が高まっており、注目度も一気に爆上がりで思ってたよりもっと凄いことになりましたね。

という訳で、今回参加の決め手になった2人のセッションはちゃんと聞けたし、考えることも色々できて本当に良かった。アピールしてただけのことはある。

懇親会

Official Partyのチケットはギリギリで間に合ったので、参加できました。インドア派の自分でもあの会場は最高だったなー。沖縄の海辺でパーティってのは絵になる。

海風で髪がえらいことになってますが、こういう髪質なんですよww

Official Partyは色々な人に挨拶して回って、2次回はアルパカさんとNamespace期待度高いっすねーという話で盛り上がっていたと思う。この辺りから酔っ払ってて細かいことを覚えていないw

Day2

キーノート

Day2のキーノートについては、今回余りRubyKaigiらしくはなかったというか、良いトークだったしKaigi on Railsだったら諸手を上げて喜んでたトークなんですが自分がRubyKaigiのキーノートとして期待する内容とはちょっと違ってた感じですね。個人的には、もっとFiberやFiber SchedulerとFalconの深いところが聞きたかった。まあ、余りハードなトークばかりを求めるのも違うとは理解していて、単に自分の好みの話ですが……。

ydahさんのセッション

Day2で特に印象に残ったのは、ydahさんのLramaの記法拡張に関するトークです。自分は去年のRubyKaigiやKaigi on Railsの参加のKaigiEffectとしてjoker1007/tree-sitter-rbsというものを実装していました。要はシンタックスハイライトに使えるRBSのParserなんですが、これはtree-sitterというParser Generatorを使って実装していて、tree-sitterはJavaScriptDSLBNFに近いコードを記述することでParserを生成します。JavaScriptDSLであることの利点は、JSの関数の組み合わせなので関数で再帰化できるし、パラメーター化もできるし、パターン化もできるということです。

これを自分で触って実感していた後に、Lramaのparameterized ruleの話を聞いて、comma区切りのlistパターンをまとめる例などを見ると、あーこれやったことあるやつだとダイレクトに理解することができました。いやー予習してて良かった。genericの様なタグ付けをしていたら型推論が欲しくなるのも理解できるし、最終的な言語非依存のParser出力のためにはCと結合したアクション記述だと不都合も多い訳で、描いている未来にも納得感はありました。

という訳で、自分の理解度が多少高かったのもあり、とても面白く聞けました。実は自分がそう感じたのには、もうちょっと理由があったのですが、それはDay3で分かります。

午後セッション

後、午後の前半ブロックは疲れていてホテルで仮眠を取ったら思ったより寝てしまい、すっ飛ばしてしまって聞けなかった……。特にhasumikinさんのPico RubyからLramaを利用する話が気になってたんですよね。というのも上記の様にtree-sitterを触ってたこともあり、Lramaから吐いたCのパーサーをtree-sitterのカスタムパーサーとして利用できれば、エディタ界隈はシンタックスハイライトのためのパーサーをメンテしなくて良くなるのでは?とか考えたことがあったからです。それで利用する側としてのLramaの使い方に興味があったんですが、残念ながら動画待ちという感じになってしまった。

LT

今回実はCFP出してたけど落ちました。まあ想像出来る理由はいくつかあるぐらい穴があったのでそれは仕方がない。

ハイライトとしてはkanekoさんの「bisonは一つしかスタックを提供していない」と言う時の楽しそうな顔ですねw 本当に最高だった。流石に高速過ぎて脳が付いていけてたか怪しいところはあったけどw

DrinkupとRubyKaraoke

今回はちゅらデータさんのDrinkupに参加させてもらいました。沖縄民謡を聞きつつ飲んでRuby Karaokeに向けて音楽モードに気持ちを切り替えるのに相性が良かった。豚の丸焼きという凄いものが登場したんですが、流石に脂も凄かったので余り多くは食べられなかった。オードブルを作ってくれたのが、どうやらエンジニア兼イタリアンのシェフというマルチタレントな方らしく、ローストビーフローストポークなど色々と美味しかった。後やっぱ地元で食べるゴーヤチャンプルは美味いですね。

そこからRubyKaraokeに合流。なんか結果的に序盤しばらく居た部屋は、ある意味で凄く「ちゃんとカラオケ」をやってる部屋だったw 盛り上がり過ぎずそれぞれ好きな歌をちゃんと歌う、という感じで割と居心地の良い部屋になったのが良かった。 上海から来た方と米津玄師を一緒に歌ったり、相生ゆらさんに歌を褒められたのが嬉しかったですね。

その後、久しぶりにお会いしたrisacanさん、nappan23さん、mishmashtanさんと合流して、ヒプマイの一人12役を披露したり、一人オオサカディビジョンやったりしてました。喜んでもらえて良かった。盛り上がってくれるととても嬉しい。

Yuryuさんと「あいつこそがテニスの王子さま」を二人でセリフちゃんと言いながら歌えたのも楽しかった。これは10年ぶりぐらいに歌った気がするw

なんかカラオケキングとか言われてたし、どうも噂に尾鰭が付いてる様な気がしなくもないww

RubyKaraokeの時は歌うのに集中してて全然写真取ってなかったので、写真が全然無かった。もし私の写真があったらTwitterなんかで送ってくれると嬉しいです!

その後、流石に病み上がりで無理し過ぎはまずいだろうとちょっと早めに抜けて、帰っている道すがらに、何故か私の様子を見に来た野生のやんちゃさんが飛び出してきた。たまたま会うだけならまだしも、自分を狙って移動している最中にバッタリ会うとは、これが「スタンド使い同士は引かれ合う」というやつかと実感し、そのまま閉店間際のステーキヒカルに直行。二人で締めのステーキを食べることに成功しました。

この辺りで、もうRubyKaigiに来た元は完全に取れたなと確信している。

Day3

RubyKaraokeから戻った後、入眠障害が発動して睡眠に失敗した結果、午前のセッション時間に活動できないという失態。and the Worldがーーー!!とりあえず、黒曜さんのツイートを追っかけることで当日の話題に付いていくことは何とかできた。後ですれ違った時にお礼も言えて良かった。

実はSTORESさんのRuby Quizの3日目のネタに自分の名前が出てました。当日はネタバレになっちゃうので言及しませんでしたが、この記事が元ネタですね。ちょっと嬉しかったw

アーロンさんのセッション と sekiさんのセッション

Day3はアーロンさんの赤黒木の話が面白かった。昔Haskellを練習している時に赤黒木を書いたことがあったんでパターンマッチと非常に相性が良いということが分かっていたので、実装の流れはイメージしやすかった。そしてObject Shapeの性質である、基本的にキャッシュを残し続けて削除は無い、リードが多いので検索効率が大事、メモリ効率を要求するといった特性が、赤黒木のデータ構造自体が持つ性質と非常に相性が良いことが良く分かる良い発表だった。アルゴリズムを学ぶことのパワーが伝わってくる話だった。適切な知識があれば、より安全に効率よく問題を解決できることというのはしばしばあって、そのために使える材料がコンピューターサイエンスの基礎知識に転がっている。自分もまだまだなところは一杯あるが、改めて大事だなと思えた発表だった。

sekiさんのERBの話ですが、聞いてるとやっぱsekiさんのプロダクトはオーパーツなんだよなーと思えて仕方ないですね。captureの解決策とかクール過ぎるし、今から見ても有用性に対する目の付け所が良過ぎる。binding#local_variable_getの実用的な活用法が見れます。

Matzキーノート

MatzのキーノートはやっぱNamespaceへの思いを話してくれたのが熱かったですね。その話題もあってかRuby4が見えてきたかなという印象でした。そして自虐ネタは封印する様にしたらしいw まあガッカリされると言われている理由は分からんではないし、一方でそんなこと言う輩が居るがちゃんと現実を見てから言ってる?みたいなこと言いたくなるMatzの気持ちも分からんではないw

tagomorisさんの仕事の注目度が爆上がりしたのは良いことだけど、これはプレッシャーも凄そうだなーと思う。微力ながら応援しております。(ちょうどこの後の懇親会でJustinと話してた時にそういう話になった)

AfterParty

色々話せて良かったんですが特にハイライトとして覚えているのは、ydahさんと遭遇して話をした時に、ydahさんとkanekoさんの発表の想定リスナーの設定が私(joker1007)だったらしいと聞かせてもらったことです。Kaigi Effectで触発されてRBSのパーサーを書く様な人を狙って話を作れば、面白い話になりそうだし今後の仲間を探すのにも有用だと思ってもらえた様です。実際AfterParty会場でそういったtree-sitterの動きについて理解したことをydahさんに伝えることも出来たし、道理で聞いてて面白かった訳だと思いました。ちゃんと聞きに行けて本当に良かった。

追記: 改めて聞いたらydahさんが金子さんにレビューしてもらってた時にそういう話になったということでした。なので金子さんの方の真の想定リスナーは不明ですw でも近いところにあったのかもしれないなーと勝手に思っている。

後、上の階にあったカラオケ付きのバーカウンターで万葉のkukoさんと念願のカラオケが出来ました。(喉壊してたのにまた歌ってんのかって感じだけどw) 魂のルフランを一緒に歌えて楽しかったー。kukoさんめちゃくちゃ歌上手いし、お酒入ってない時に改めて行きたいなあ。

その後の二次会は、結構人数が居たんですが自分の居たテーブルがやばくて、kateiさん、なるせさん、がちゃぴん先生、ogijunさん、どみにおんさん、という感じでした。LLVM&RubyのコミッターとLinuxカーネル&Rubyのコミッターがそれぞれ自分の仕事はそんなに難しくないですよーってお互いを褒め合っていて、周りが「簡単な訳あるかー!」となってたのが本当にRubyKaigiだなーという感じで楽しかった。

その後、何故か自分がなるせさんにお前はやる気出してコミッタになるんだ!とすげー激詰めされて必死に回避してた気がします。いや、やる気が無いとか無理とかまでは思ってないのですが、心の準備とか覚悟というものがですね……。

まあ、何にせよとてもRubyKaigiらしい懇親会に参加できて最高としか言えない夜でした。

帰りがけの羽田空港で出会った最後のスタンド使いkakutaniさんとのツーショットで締め。出来過ぎだったな。

まとめ

今回、参加自体が自分の中で危うかった経緯もあって色々な人に心配をおかけしてしまいましたが、何とか元気そうな姿が見せられて本当に良かったと思っています。本当に会う人会う人に心配されてたので申し訳なかったw

(実は今もちゃんと回復したとは言えない状態で、喉の違和感や続きそうな痛みには結構注意を払っている状態です。覚悟の上でしたがRubyKaigiでかなりの負荷がかかったことは間違いないので、また状態が悪化しないかしばらく気を張ることになるでしょう。)

また、最近仕事で余りRubyを使わない領域で仕事をしているものでRuby自体とは若干関わりが薄くなっていたのですが、パRailsに関してフィヨルドの生徒の方から今年も沢山の感謝の声を聞かせてもらいましたし、ここ最近での数少ないアウトプットだったtree-sitter-rbsの活動がパーサーギャング団の想定リスナーの材料になったり、これのおかげでVSCodeからneovimに戻れたので本当に嬉しいと万葉のosatohhさんから感謝の言葉を頂いたりしました。

自分としてはちょっとしたことしか出来てないと思ってましたが、ちゃんと誰かの役に立ってたことや伝わっていたことが実感できてとても嬉しかったし、こちらの方こそ感謝しかありません。本当にありがとうございました!

コミュニティの皆さんとの繋がりを改めて実感し、RubyKaigiというのは本当に良いイベントで、自分にとっても大事なものだったなということがよく分かりました。

本当に参加できて良かった。楽しめて良かった。多くのRubyistに会えて良かった。今年もありがとうRubyKaigi!来年も無事参加できます様に!