RubyKaigi 2023 参加報告とちょっとエモい話

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

今回は長野県の松本での開催でした。

全体的な感想

今回は、会場のスポンサーブースの数や来場者が去年より格段に多く、かつてのRubyKaigiが戻ってきたことを強く感じました。

4, 5年ぶりぐらいに会う人も沢山居て、会う人会う人に「うおー、久しぶりです!」って言って回ってた気がします。 久しぶりに会う人と直接近況をやり取りできるのは、とても嬉しいことですね。

自分はあんまり写真撮らないタイプなのですが(食べ物と酒は除く)、今回は割と多くの #rubyfriends 写真を撮った気がする。 それぐらいはしゃいでいたと言えるのかもしれない。

(撮った写真を了解無く上げるのは、ちょっと気になったので写真は割愛)

とにかく、色々な人にまた会えたのが嬉しかった。そういうRubyKaigiでした。

セッションについて

今回は、パーサー周りのトークが妙に多く、世は正に大パーサー時代という感じでしたね。(RubyKaigiのトークって結構テーマが集中する傾向にあると思う)

mameさんやsoutaroさんと廊下で話していて、開発者体験を向上させて新しい言語に置いていかれない様にするためには、昨今LSPを避けては通れないというのは感じますし、そうなってくると絶対に必要なのが記述途中の不完全なソースコードを上手く扱う方法です。そりゃパーサーについて考える機会も増えるわな、という感じですね。

もちろん、その延長で別のRuby実装や別言語で書かれたRubyのためのツール(rubyfmtなど)のメンテナンス性の向上にも繋がるし、ホットなトピックになるのも自然という感じでした。

という訳で、今回聞いたのは、この辺りです。

Matz Keynote

今回は歴史の話がメインって感じでしたが、Ruby30thの時にも結構聞いた感じがするので、個人的にはもうちょっと未来の話が聞きたかったですね。 終盤の、ISO規格どこいった?!辺りの話は爆笑しましたがww エンジンかかってきたMatzの方が面白いのは間違いない。

The future vision of Ruby Parser

今回の主役の一人と言える、kanekoさんによるparser実装の話。 bisonというparser generatorをRubyで実装しなおしたlramaというプロダクトで置き換えるという非常にカッコいいことをやってるのが印象的です。 LALRパーサーのgenerator記法を少し拡張するだけで、やれることが大分増えるというのはスマートで良いなと思いました。 今回YARPの方の話は聞いていないのですが、YARPはRubyで手作りしたparserということで、結構スタイルの違いを感じますね。

なんと今回のRubyKaigi中にbisonへの置き換えを実際に達成して、kanekoさんは「牛殺し」の称号を獲得していましたw

"Ractor" reconsidered

キーノートでMatzが話していた、benefitをいかに提供するかということに繋がる話でした。 Ractorを実際に使ってみる上で、現実的に性能が上がる見込みが強くならないと、利用者が付いてきてくれずフィードバックが得にくくなって、改善も進みにくくなる、という問題にいかに対処するかという話が中心だったと思います。 特にRactorが複数あるとそれぞれのGCが競合してしまう問題は非常に辛い問題だと思いました。 改善すればかなり効果がありそうに思います。

後、M:NスレッドプロジェクトのMaNyにも触れていましたが、これも期待感があります。 一方で、やらなきゃいけないことのリストが半端なかったので、うおー大丈夫なのか……って感じもありました。

Power up your REPL life with types

ぺんさんによるkatakata_irbの紹介。 これについては、とにかく入れるだけで便利になるので、まず試してみようの一言ですね。

利用者側にとって簡単なのがとても素晴らしいなと思いました。

Lightning Talks

今回、CFPに応募したんですが、落ちてしまったので悔しかったというのが一番の感想ですね。 vim関係の話は大倉さんが話していたので枠が無かったというのもあったらしいですが、自分でもパンチが弱いなという感じだったので仕方ない。

Learn Ractor

実は寝坊してしまって、後半ちょっとしか聞けてない。 enumerationがあればRactorで並列化できる可能性を考えてもみても良い、という話だけ記憶に留めておきました。

Implementing "++" operator, stepping into parse.y

kanekoさんの発表に並ぶ、今大会ベストトークの一つ。 トークの流れがよく練られていてめちゃくちゃ面白かったですね。 それぞれのプロセスが、別々のジャンルの人間に刺さる様になっていて、私とモリスさんなんかはlocal_variable_setで爆笑していました。 parse.yのアクションからbinding呼んでlocal_variable_setを使うというのは、全然考えたことがなくて、やられたーと思いました。

アフターパーティでnobuさんが楽しそうにしおいさんと話していたのも、良い光景でした。

RubyGems on the watch

Maciejさんによる、RubyGemsセキュリティインシデントに間する発表。 リリース前のgem情報をGitHubから収集してbrandjackingを行う例とか、アップロード失敗を利用してCDNに悪意あるコードをキャッシュさせるとか、改竄コードが入る余地というのは現実としてあるということが理解できる話でした。 身につまされる内容というか、OSSの世界においては利用するコードが正しいかどうかをちゃんとチェックする責任は利用者にあるし、不用意な信用を前提にして行動をしてはいけないということを肝に銘じておきたい。

Revisiting TypeProf - IDE support as a primary feature

typeprofで開発者体験を上げるために、本当に必要だったものは当初の想定と結構違っていたという話でした。 LSPでの利用を重視してv2を作っているということでしたが、最近自分もLSP周りの整備を行ってtypeprofも触ってみましたが、もっと良い体験が得られるなら期待が高まります。

Multiverse Ruby

この話は個人的にかなり興味深いトークというか、Rubyのマニアックな挙動を利用して現実的に役に立ちそうな可能性に繋げるというのは、とても好きなジャンルの話ですね。 loadの第二引数に匿名モジュールを渡すことで、load先のクラス・モジュール定義が匿名モジュールの名前空間の中に定義されるという挙動を利用して、namespace分離を行えないかという内容の話でした。

実際問題として、他から参照を制限できるnamespaceやgem間での名前の衝突や同一gemの複数バージョン利用などを考えると、現状のRubyで対応できないけど、役に立ちそうなことはいくつかあるので、Rubyのこれからのnamespaceを考える上で一石を投じる発表だったと思います。

モリスさんがこんなブログを書いていたので、そちらも参考になると思います。 https://tagomoris.hatenablog.com/entry/2023/05/15/174652

Optimizing YJIT’s Performance, from Inception to Production

今回、gihyoさんのレポートとして私がこのキーノートを担当することになったので、詳しくはそちらで書くとして、どうでもいい小話が一つ。 Shopifyで頭文字Dが流行ってるんだろうか?w

Ruby Committers and The World

今回はShopifyさん仕切りで、アジェンダがしっかりしていたのと英語メインで進行していたのが今迄との違いです。 別に今回のが悪いという話ではないのですが、進行を無視してコミッタがプロレスを始めて、おもむろにnobuさんがパッチ袋引っ張り出してくる、みたいな展開が無かったのが、例年のThe Worldファンとしてはちょっと物足りなさを感じました。 まあ、どっちが良いという話ではないのですが。

Build Your Own SQLite3

picoruby上でSQLite3を動かすために、VFSレイヤーを自力で実装して必要な関数を全部マッピングしていくという発表でした。 この実装力は本当に凄い。そして、SQLite3が動くキーボードが完成していました。 hasumikinさんにキーボードを借りる時は注意した方がいいかもしれませんw 裏でSQLite3が動いているかもしれないw

Ruby JIT Hacking Guide

今回とても楽しみにしていたRJITに関する発表です。 RJITってrubyのiseq情報とcfpを受け取って、rubyアセンブラを書いて実装を置き換えることで高速化する、みたいな機構だと認識しているんですが、iseq情報を利用して悪い方向に書き換えて、見た目と違う挙動を実現できるのでは、と考えていました。 見込み自体は正しかったので、これを使って来年のRubyKaigiまでに何か作りたいと思ってはいるのですが、まだ実現可能性が何も見えていないので、本当にやれるかどうかは完全に不明です……。

Parsing RBS

soutaroさんによるキーノートで、error tolerant parserをどうやって作るかという話が順序立って説明されていて勉強になりました。 LSPのedit notificationを使って変更チャンクを認識して、そこで制御可能な形でparserの処理を打ち切ってエラー処理に持っていくというのは、とてもスマートだなと思いました。 steepのLSPも最近ある程度触っていて、rbsを書く機会もちょっとづつ作ろうとしているので、開発体験の向上に期待しています。

まとめ

今年は、自分の中でも多くのセッションを聞いたRubyKaigiになりました。 体調が比較的安定してたというか、睡眠破綻が余り起きなかったおかげだろうか。

Leaner Drink upについて

今回は、久しぶりに日本酒の選定をさせてもらいました。Leanerさんとは直接関わりがあった訳ではないのですが、コミュニティの友人の中の人から声をかけていただいて、それなら協力させてもらいますという感じでやらせてもらうことになりました。

まあ、要するにコミュニティ繋がりのただの酒好きのオッサンということです。

とは言え、それなりに長くRubyコミュニティで活動していたこともあってか、多くの友人や日本酒好きが参加してくれて、好評をいただくことができました。

いやー、趣味を曝け出してる感じはちょっと怖いところもあるし、全てちゃんと味を確認してから選べている訳ではないので、不安も少しありましたが、上手く終わって良かったかなと思います。

Leaner様からも感謝の言葉をいただきました。こちらこそスポンサー業の一部とはいえお手伝いできたことを嬉しく思います。

エモい話

今回、去年のRubyKaigiより久しぶりに会ったRubyistが遥かに多く、そのおかげで熱量の高い話も結構やれたかなと思っています。

特にTwitterでも話をしたんですが、kaneko.yさんから「Asakusa.rbでお世話になった頃から憧れのRubyistの一人でした、コミュニティで近くに居てくれたおかげでこれだけの成果が出せる様になったんです」という感じの事を言われて、本当にメチャクチャ嬉しかったんですよ。こんなに嬉しいことは無いんじゃないかと思うぐらい。ぶっちゃけ泣きそうになったし、これ書いてても涙出そうなのを堪えている。 自分から見たら、kanekoさんはとっくにRuby界のHeroの一人でこちらこそ憧れてるRubyistの一人だった訳で、そのことを伝え返すこともできて嬉しかった。 とは言え、そういう過去の自分に乗っかっているだけでは駄目で、何かしらの良いアウトプットを出していける自分でありたいなという思いも強くなりました。 コロナという非常に大きなコミュニティの分断があった後でそういうことがあったので、直接思いを伝える機会があるなら逃してはいけないなと本当に実感した訳ですね。

そういうことがあったので、その後の夜中にemori.houseの面々と飲んだ後、今回スタッフではなく一般参加していたぷぽさんに対して、今迄の感謝と我々が如何にRubyKaigiというイベントを楽しんでいるかということ、そしてその楽しみを今迄スタッフとして支えてくれていたぷぽさんが今年めちゃくちゃ満喫しているのを本当に嬉しく思っている、ということを語るのに繋がった訳ですね。これも気恥ずかしい話ではありますがw

その他のちょっとした話としては、自分のライブラリを使ってくれてるという人が何人か声をかけてくれたことも嬉しかったことの一つです。あんまり代表作と言えるほど大きなものが作れていないので、こういうちょっとしたことでも嬉しく思います。

コロナ過を経て、もしかしたらもう会わない人も一杯居るのかもしれないなと思ったし、今回のRubyKaigiで会えても次に会えるとは限らないということが、以前より遥かに現実的な問題になっていて、そのせいかちゃんと写真という記録を残したり、言える時に感謝の思いは伝えた方が良いなと思うことしきりなRubyKaigiでした。

ちょっと話は変わるのですが、Kaigi後に書かれたいくつかのブログの話を見たりKaigi中に自分もそういう話をしていたりということもあって、憧れの捉え方や自分が何者だと考えているかについて、人それぞれの色々な考え方があるのだなと実感しました。

今回のRubyKaigiでは、そういう自分の立ち位置の変遷や、周りの人達の変化の話や、考え方の違いというものに触れる機会がとても多かった様に思います。 CTOという立場からの変化、人生ステージの変化など、自分がRubyコミュニティに居場所を見つけて10年以上も経った訳で、自分にも周りにもそういった変化を感じている中で、久しぶりに会った人が一杯いたことで自然とそういう話が増えた気がします。

私は、昔から所謂「強い」エンジニアに憧れがあり、自分もそうなりたいと思っていたし、それが生きていく上で重要なポイントの一つでもありました。結果的にそれなりの適性があったので、ある程度のアウトプットは出せたと思うし、そういった友人も沢山できました。

一方で、今もずっと自分はそんな大した人間ではなく普通のプログラマだと思ってるのですが、Kaigi終了後にばったり遭遇したSTORESの藤村さんと話した時に「自分もそう思うけど、状況証拠的に何かしら逸脱したところが自分にあると認めざるを得ない」って感じのことを言っていて、その話に「めっちゃ分かるわー」と強く共感しました。普通それなりにエンジニアを抱えている会社のCTOなんかにはならないんですよねw

つまり、自分にはある程度は「強い」エンジニアとしてやっていく資質があったとは言えるのでは、と最近思える様になりました。ただ、そこに満足してしまうと自分の成長が止まってしまう可能性が高いので、より高い技術力に対する飢えはずっと持っておきたいところですが。

という感じで、自分はそういうコードを書いて「強く」なることが好きで何とかやれていると思うし、これまでの人生の中でRubyKaigiやRubyコミュニティに居る「ギャングスター」にストレートに憧れることが出来たのですが、RubyKaigiって世界でも稀に見る程にヤバイ人達が登壇しているスーパーなイベントでもある訳で、大体登壇している人達ってのはある種の変態ばっかりなんですよ。そう簡単に真似できるもんじゃない。(お前が言うなという話かもしれませんが)

なので、RubyKaigiで受けた刺激はあくまで刺激として受け取って、気にせず自分の人生のための活動をすること、自分なりのやり方でコミュニティに恩を返すのも大事なことなのだと思います。目立つヒーローばっかりが人間じゃない。

自分も、最近Rubyという言語と直接的に強く関わっていないこともあって、自分は最近ちゃんとやれてんのか?と思うこともたまに……という感じだったしw

そんなこんなで、この辺りのことを考えることに繋がったんですが、まあそれなりに経験も積んだおっさんになったので、自分としては、落ち着いて今回のRubyKaigiで受け取ったクソデカ感情というやつを次のRubyKaigiにぶつけられる様に活動していこうと思っています。

一言で言うなら、やる気は出てるぞ!ってことです。(頭が着いていかない可能性があるが……)

まずは、RJITで遊ぶぞ!

最後に

自分の観測範囲でも数名コロナ陽性反応と共に発熱している人がチラホラと出てきています。 幸い、自分は今のところ喉が痛いだけです。これは連日酒を飲んでは色々な人と話し続けてたので当然と言えるのですが、とりあえず時間を見つけて検査は受けに行こうと思っています。 皆様も体調にお気をつけください。