RubyKaigi 2023参加レポート

こんにちは！先日RubyKaigi2023にオフライン参加してきました！
![IMG_9610.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571510/b6f79ab4-74e4-c893-2eb9-e9838ec5d537.jpeg)

今年は長野県松本市での開催となり、Official Partyなど様々なイベントも企画され非常に盛り上がっていました。講演や現地の様子などをレポートしたいと思います！

# Day1
## Matz Keynote
Rubyの誕生から今までのコミュニティーの成長過程を語ってくれました。
ここまで大きなコミュニティーになるには、様々な努力や運命があったのだなと感じました。
いいものを作れば人は集まるが、それだけではなくMarketingも大事だという話が非常に印象に残りました。
また、静的型付け/動的型付けの話にもなり、将来的にはChatGPTなどの技術で動的型付け言語でも、型宣言しなくても、型推論ができるようになるのではないかという話もしていました。
![IMG_9456.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571510/43706b7e-8501-6998-30b4-28a0b39a5acd.jpeg)

余談ですが、RubyがRubyという名前になる以外に、候補としてCoralやTishなどがあったらしいです。

## RuboCop's baddest cop
https://rubykaigi.org/2023/presentations/gsamokovarov.html#day1

Rubyの色々な書き方（括弧を付けずにメソッドを呼び出すことなど）による、cultural problemを解決するための話。実際のRubocopのPRを見ながら、RubocopがRubyの色々な書き方をどのように解析しているかを説明してくれました。

## Develop chrome extension with ruby.wasm
https://rubykaigi.org/2023/presentations/3yUma%E2%82%8Brb.html#day1

RubyでChromeの拡張機能を作るためのフレームワークを作ったよという話。
ruby.wasmを使ってChrome拡張機能をRubyで書くことができるようになったが、結局JSだけで書くのとコード量や読みやすさは変わらない。なのでこのJSの部分をフレームワークにして、リクエストを全部フレームワークに流すことでコード量を減らせるようにしたというもの。

https://github.com/aaaa777/unloosen

## "Ractor" reconsidered
https://rubykaigi.org/2023/presentations/ko1.html#day1

RactorというRuby3.0で導入された、マルチコア上でRubyを並列実行する仕組みについての話。Ractorはガーベージコレクションではシーケンシャルのものよりも遅くなってしまったらしく、これによりあまり使われずフィードバックがないので改善されないというループに陥ってしまったという話がとても印象的でした。

スライドは以下から閲覧できます。
https://www.atdot.net/~ko1/activities/2023_rubykaigi2023.pdf


## Power up your REPL life with types
https://rubykaigi.org/2023/presentations/tompng.html#day1

irbのメソッド補完をしてくれる[katakata_irb](https://github.com/tompng/katakata_irb)開発したよという話。
Ruby3.0から使えるコードに型定義情報を提供するRBSという仕組みと、irbが既に持っているdo,endでインデントする機能を使って実現しているらしいです。とても便利そうでした。

![IMG_9475.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571510/0d47cc98-10b9-ce36-0632-46433085ba5a.jpeg)


具体的な仕組みは以下のQiitaにまとまっています。
https://qiita.com/tompng/items/bca1e40976ec4f2a71c8



## Official Party!
今年は数年ぶりにOfficial Partyも開催されました。ホテルの会場を貸し切った立食スタイルで他の参加者たちと交流することができました。
![IMG_0717.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571510/171494a2-36c1-6663-affe-e31fc1b3c70e.jpeg)
![IMG_0716.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571510/478c14ea-f19a-80e1-a4ab-4d0bfd88b0a0.jpeg)



# Day2
## How resolve Gem dependencies in your code?
https://rubykaigi.org/2023/presentations/hsbt.html#day2

apt, homebrew, bundlerなどのパッケージマネージャーたちが各ライブラリの依存関係をどうやって解決しているかを説明してくれた。
普段使っている`bundle update`の深掘り解説がありとても勉強になった。

## Build a mini Ruby debugger in under 300 lines
https://rubykaigi.org/2023/presentations/_st0012.html#day2

デバッグの時によく使うbindingがどう動いているか実際にコードを見ていき、必要最低限のデバッガーを作成したよという話。

## Fix SQL N+1 queries with RuboCop
https://rubykaigi.org/2023/presentations/sue445.html#day2

rubocopとDBを繋ぐことで、rubocopで自動的にN+1クエリを見つけ、自動修正までさせるツールを作成したよという話。ISUCON（総合格闘技）用に作成したらしいです。
スライドは以下から閲覧できます。
https://speakerdeck.com/sue445/fix-sql-n-plus-one-queries-with-rubocop


## Hacking and profiling Ruby for performance
https://rubykaigi.org/2023/presentations/osyoyu.html#day2

パフォーマンスチューニングの話。スローコードをCRubyレベルでトラック、プロファイルする方法について話してくれました。
ISUCON上位のチームほとんどがGOを使っているのにもかかわらず、Rubyを使うという熱意をすごく感じました。

## Optimizing YJIT’s Performance, from Inception to Production
https://rubykaigi.org/2023/presentations/maximecb.html#day2

元々MATLABのコンパイラであるJITの研究開発をしていた人が作ったRubyのコンパイラYJITの紹介。Ruby 3.3とYJITの組み合わせでものすごく速くなるということは理解できました。

# Day3
## Ruby Committers and The World
https://rubykaigi.org/2023/presentations/rubylangorg.html#day3

Rubyコミッターたちがステージに集結して討論会をしてくれました。トピックが用意されていて、
- JITと最適化の話
- Garbage Collectionの話
- Parserの話
- 型の話
- スレッドの話
- 他のRuby実装について
などについてMatzをはじめとするすごい人たちが議論してくれました！
型の話などコミッター方達の意見が聞けてとても良い経験ができました。また全編英語で議論が進み、自分の英語力の無さと、この世界で仕事をするには英語力は必須だということを再認識しました。
討論会の最後には写真撮影会も開かれました。
![IMG_9570.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571510/25737ee2-42b6-899c-70dc-2dba84db136d.jpeg)


## Build Your Own SQLite3
https://rubykaigi.org/2023/presentations/hasumikin.html#day3

マイコンなどの組み込みシステムにも搭載できるPico Ruby上でSQLite3を使えるようにし、マイコンで直接データの蓄積を可能にしたよという話。
実際に活用例として、キーボードにこのシステムを搭載し、自分のキー入力を蓄積し分析することで、プログラミングの時に最適なキー配置を見つけようという試みを紹介していました。結果として、Vimの移動キーであるhjklが人差し指の一番押しやすい位置に配置されるようになったというオチでした。

## Ruby + ADBC - A single API between Ruby and DBs
https://rubykaigi.org/2023/presentations/ktou.html#day3

大量データの読み書きにもRubyを使いたいという話。
ADBC（Arrow DataBase Connectivity）というDBにアクセスするためのapiを利用している。このADBCは大きな列指向データに最適化されているらしいです。今後はActive Record経由でこれが利用できるようになるとのことでした。

## Let's write RBS!
https://rubykaigi.org/2023/presentations/p_ck_.html#day3

Rubyのコードに型定義情報を提供するRBS 3.1の新機能の紹介でした。
rbsファイル同士の重複を消してくれる`rbs subtract`という機能や、rbsファイルのパースやシンタックスエラーを見つけてくれる`rbs parse`という機能をデモを通して説明してくれました。

発表スライドは以下から
https://speakerdeck.com/pocke/lets-write-rbs

# まとめ
今回技術系のカンファレンス自体初めての参加でした。Rubyのコアな部分の話が多く、公演中に理解が追いつかないことだらけでした。しかし、コミッターの方達のRuby愛や技術に対する熱意を目の当たりにし、Rubyを使った開発に対するモチベーションが上がりました！
また、公演だけでなく、企業ブースや懇親会を通して同世代のエンジニアたちと交流することができ、とてもいい刺激になりました！