こんにちは!先日RubyKaigi2023にオフライン参加してきました!
今年は長野県松本市での開催となり、Official Partyなど様々なイベントも企画され非常に盛り上がっていました。講演や現地の様子などをレポートしたいと思います!
Day1
Matz Keynote
Rubyの誕生から今までのコミュニティーの成長過程を語ってくれました。
ここまで大きなコミュニティーになるには、様々な努力や運命があったのだなと感じました。
いいものを作れば人は集まるが、それだけではなくMarketingも大事だという話が非常に印象に残りました。
また、静的型付け/動的型付けの話にもなり、将来的にはChatGPTなどの技術で動的型付け言語でも、型宣言しなくても、型推論ができるようになるのではないかという話もしていました。
余談ですが、RubyがRubyという名前になる以外に、候補としてCoralやTishなどがあったらしいです。
RuboCop's baddest cop
Rubyの色々な書き方(括弧を付けずにメソッドを呼び出すことなど)による、cultural problemを解決するための話。実際のRubocopのPRを見ながら、RubocopがRubyの色々な書き方をどのように解析しているかを説明してくれました。
Develop chrome extension with ruby.wasm
RubyでChromeの拡張機能を作るためのフレームワークを作ったよという話。
ruby.wasmを使ってChrome拡張機能をRubyで書くことができるようになったが、結局JSだけで書くのとコード量や読みやすさは変わらない。なのでこのJSの部分をフレームワークにして、リクエストを全部フレームワークに流すことでコード量を減らせるようにしたというもの。
"Ractor" reconsidered
RactorというRuby3.0で導入された、マルチコア上でRubyを並列実行する仕組みについての話。Ractorはガーベージコレクションではシーケンシャルのものよりも遅くなってしまったらしく、これによりあまり使われずフィードバックがないので改善されないというループに陥ってしまったという話がとても印象的でした。
スライドは以下から閲覧できます。
https://www.atdot.net/~ko1/activities/2023_rubykaigi2023.pdf
Power up your REPL life with types
irbのメソッド補完をしてくれるkatakata_irb開発したよという話。
Ruby3.0から使えるコードに型定義情報を提供するRBSという仕組みと、irbが既に持っているdo,endでインデントする機能を使って実現しているらしいです。とても便利そうでした。
具体的な仕組みは以下のQiitaにまとまっています。
https://qiita.com/tompng/items/bca1e40976ec4f2a71c8
Official Party!
今年は数年ぶりにOfficial Partyも開催されました。ホテルの会場を貸し切った立食スタイルで他の参加者たちと交流することができました。
Day2
How resolve Gem dependencies in your code?
apt, homebrew, bundlerなどのパッケージマネージャーたちが各ライブラリの依存関係をどうやって解決しているかを説明してくれた。
普段使っているbundle update
の深掘り解説がありとても勉強になった。
Build a mini Ruby debugger in under 300 lines
デバッグの時によく使うbindingがどう動いているか実際にコードを見ていき、必要最低限のデバッガーを作成したよという話。
Fix SQL N+1 queries with RuboCop
rubocopとDBを繋ぐことで、rubocopで自動的にN+1クエリを見つけ、自動修正までさせるツールを作成したよという話。ISUCON(総合格闘技)用に作成したらしいです。
スライドは以下から閲覧できます。
https://speakerdeck.com/sue445/fix-sql-n-plus-one-queries-with-rubocop
Hacking and profiling Ruby for performance
パフォーマンスチューニングの話。スローコードをCRubyレベルでトラック、プロファイルする方法について話してくれました。
ISUCON上位のチームほとんどがGOを使っているのにもかかわらず、Rubyを使うという熱意をすごく感じました。
Optimizing YJIT’s Performance, from Inception to Production
元々MATLABのコンパイラであるJITの研究開発をしていた人が作ったRubyのコンパイラYJITの紹介。Ruby 3.3とYJITの組み合わせでものすごく速くなるということは理解できました。
Day3
Ruby Committers and The World
Rubyコミッターたちがステージに集結して討論会をしてくれました。トピックが用意されていて、
- JITと最適化の話
- Garbage Collectionの話
- Parserの話
- 型の話
- スレッドの話
- 他のRuby実装について
などについてMatzをはじめとするすごい人たちが議論してくれました!
型の話などコミッター方達の意見が聞けてとても良い経験ができました。また全編英語で議論が進み、自分の英語力の無さと、この世界で仕事をするには英語力は必須だということを再認識しました。
討論会の最後には写真撮影会も開かれました。
Build Your Own SQLite3
マイコンなどの組み込みシステムにも搭載できるPico Ruby上でSQLite3を使えるようにし、マイコンで直接データの蓄積を可能にしたよという話。
実際に活用例として、キーボードにこのシステムを搭載し、自分のキー入力を蓄積し分析することで、プログラミングの時に最適なキー配置を見つけようという試みを紹介していました。結果として、Vimの移動キーであるhjklが人差し指の一番押しやすい位置に配置されるようになったというオチでした。
Ruby + ADBC - A single API between Ruby and DBs
大量データの読み書きにもRubyを使いたいという話。
ADBC(Arrow DataBase Connectivity)というDBにアクセスするためのapiを利用している。このADBCは大きな列指向データに最適化されているらしいです。今後はActive Record経由でこれが利用できるようになるとのことでした。
Let's write RBS!
Rubyのコードに型定義情報を提供するRBS 3.1の新機能の紹介でした。
rbsファイル同士の重複を消してくれるrbs subtract
という機能や、rbsファイルのパースやシンタックスエラーを見つけてくれるrbs parse
という機能をデモを通して説明してくれました。
発表スライドは以下から
https://speakerdeck.com/pocke/lets-write-rbs
まとめ
今回技術系のカンファレンス自体初めての参加でした。Rubyのコアな部分の話が多く、公演中に理解が追いつかないことだらけでした。しかし、コミッターの方達のRuby愛や技術に対する熱意を目の当たりにし、Rubyを使った開発に対するモチベーションが上がりました!
また、公演だけでなく、企業ブースや懇親会を通して同世代のエンジニアたちと交流することができ、とてもいい刺激になりました!