RubyKaigi2023に参加してきました！！

## RubyKaigi初参加！
昨今オンラインでのイベント開催が多い中、RubyKaigiにオフラインで参加してきました！
https://rubykaigi.org/2023/

## 到着
今年の開催は松本！
![IMG_0759.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485238/234f8022-e01d-cd11-523c-07d14380b440.jpeg)

松本駅内でも横断幕が張ってあって、Welcomeムードがすごかったです！！

会場に到着すると階段にもRubyKaigiのデザインが！！
![IMG_0699.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485238/474b1e3c-3609-9f13-1f04-5afa0c8487d8.jpeg)

５時起きで眠かった自分を会場が優しく包み込んでくれました(?)

## Day1
### Matz Keynote
RubyKaigi最初のセッションはMatzさんによるkeynote.

https://rubykaigi.org/2023/presentations/yukihiro_matz.html#day1

Rubyの誕生から現在に至るまでのお話をしていただきました。
文章を読んでRubyの遍歴については理解していたつもりだったけど、当時の背景や考えも併せてストーリーを聞くのはとても興味深かったです。

・良い名前が大事(当時の名前の候補にはTishもあったみたい...)
・コミュニケーションによってコミュニティが出来上がっていく
・リーダーシップ、ビジョンを示していくことの大切さ(Ruby3x3)

などなど。
Rubyができた初めの頃は「Rubyを使ってお金を稼ぎたい人」ではなく、「まだビジネスでは活用できないけど、書いていて楽しい」という人たちをターゲットに。
その人たちがどんどん開発に加わってくれて次第に機能が充実していった。途中はマーケティングの話を挟んだりと、まるでスタートアップの企業の話を聞いているのかなと錯覚している気持ちになりました。

### Develop chrome extension with ruby.wasm

https://rubykaigi.org/2023/presentations/3yUma%E2%82%8Brb.html#day1

unloosen (Ruby + wasmでChrome extensionを作るフレームワーク)の紹介でした。
去年のkeynoteでの発表を見て、WebAssembly上でRubyを動かすアプリケーションが増えると思っていた発表者のSawaiさん。

しかし、実際はそのようなアプリケーションはあまり出てこず、Sawaiさんはその原因をWebAssemblyでRubyを動かすまでのハードルの高さが原因にあると考えました。

そこで作られたのが、RubyでChrome拡張を書くためにフレームワークunloosen.

https://github.com/aaaa777/unloosen

実際に動かしているデモを見させてもらったのですが、管理するファイルを少なくしつつ、少ないコード量、シンプルな構文で拡張機能の開発が実現できていて面白かったです。

また、Sawaiさんが大学生だったこともあり、企業様からのお声がけ待っておりますと、さらっと就職活動をしていたのが微笑ましかったです。(強い)

### "Ractor" reconsidered

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

Ruby3.0から導入されたRubyでの並列プログラミングを可能にするための機能であるRactor。
ただ、現在Ractorはまだ広く使われていないみたいで、Ractorにどのような課題があり、その課題に対してどのようにアプローチしているのかという内容でした。

発表資料

https://www.atdot.net/~ko1/activities/2023_rubykaigi2023.pdf

下記も併せて読むとなんとなく分かってくる。

https://techlife.cookpad.com/entry/2020/11/20/110047

https://techlife.cookpad.com/entry/2020/12/26/131858

クオリティとパフォーマンスが低い→みんなに使われない→使われないからフィードバックを得られない。→フィードバックが得られないと改善がしにくい→改善されないと使われない
と言う負のループになってしまっていると言う言葉が印象的でした。

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

対話形式でRubyを実行できるirb。現状でもコマンドの補完は聞いているのですが、正規表現での判別のため誤った補完や、メソッドチェーンでは補完がイマイチ。

そんな正規表現で行われている補完を、型の情報を使った補完に変換できたらすごい便利なんじゃね！と言う発表でした。
そこで実装されたのが、katakata_irb

https://github.com/tompng/katakata_irb

不完全なコードの補完
→irbはインデントレベルで既に同じことを行っている。doやendごとにインデントレベルを増減させて保持。それと同じようにカッコやendを補完してあげればいけそう。

補ったコードをRipperでパース。RBSで型を推論していくことでメソッドチェーンでも適切な型情報を得る、と言う流れでした。

メソッドチェーンでも適切に補完が動くだけでなく、スコープの範囲やifの分岐によって変数の型が変わったとしても適切に推測ができていたりと、とにかくすごい。。

デモを見ながらテンションが上がりました！

### Official Party
夜はRubyKaigiのOfficial Partyに参加させていただきました！
![IMG_0717.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485238/993fc72e-7f27-4d63-ae99-a6dd38ca4260.jpeg)

大体５００人くらいいたのかな？
たくさんの人と話で色々な繋がりができました！


## Day2
### スタンプラリー
2日目からブースを回るスタンプラリーが始まったので、休憩時間にちょこちょこ回って、無事全部集められました！
各ブースで知らなかったサービスを知ったり、会社の情報を知ったりと、とても面白かったです。
お菓子屋ステッカー、コースターとか充電器とか、いろんなものもらいました。

写真うまく写ってないのですが、右下の可愛いRubyのピンバッチをもらえました！
![IMG_0733.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485238/755c4b80-56ce-1eb1-3614-4a023a3ed42e.jpeg)

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

題名にもあるように、300行程度でデバッガーを作ってみようというプレゼンでした。(実際は180行くらいだった記憶)

https://github.com/st0012/mini-debugger

スライドはこちら
https://github.com/st0012/slides/blob/main/2023-05-11-rubykaigi/Build%20a%20mini%20Ruby%20debugger.pdf

実際の動作はリポジトリのデモ動画を見ていただくと早いのですが、Breakpointが設定できて、step, nextなどのコマンドも動作する最小限のデバッガをわかりやすく解説してくれました。

デバッガの中身をあんまり考えたことがなかったのですが、実装を読んでみるよ意外とシンプルで、自分でも作ってみようと思った記憶があります。




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

https://github.com/sue445/rubocop-isucon

ISUCONに特化したRubocopで、 N+1のクエリを検出して、その整形までをできるようにしたというものでした。
N+1を検知するのは簡単だけど、それをオートコレクトするのが大変ということで、いくつかのサンプルケースとともに知見を共有してもらいました。

オートコレクトの仕方を考えすぎて、クエリを見た時にオートコレクトをどのようにしようかとまず考える癖ができたというsue445さんの言葉が印象に残ってます。w

この辺りも検出したクエリを、最近流行りのChat　GPTに渡して整形して返してもらうみたいなのと接続させたら、もっと強力なgemになりそうだなとぼんやりと考えておりました。

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

タイトル通り、Rubyコミッターたちの公開トークのお時間でした。
![IMG_9570.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485238/1f985511-5e85-f139-f971-43b8f037f6ce.jpeg)

なんとなく一番前に座ったので、皆さんの表情が間近で見れてよかったですw
英語が早くて結構置いていかれたのですが、GC,Ractor,YJITなどの注目トピックに関しての今後の開発に関して議論していました。

Ruby3.3だけでなく、Ruby4も見据えた将来的な話もあり勉強になりました。

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

マイコン上でPicoRubyを使ってSQLite3を動かすというものでした。

https://github.com/picoruby/picoruby

SQLite3はシングルファイルデータベースで、かつ軽量な点から組み込みシステムでも使いやすいのが特徴みたいでした。

PicoRubyはマイコン上で動くシェル環境みたいなもの？
そのPicoRubyを使ってirbを起動して、sqlite3 gemを通して、データベースの作成、読み込み、書き込みを実際にデモで見せていただきました。

マイコンにマウントしたSDカードをPCにマウントして、作成したDBをPCの方で読み込むということもしていました。

近年流行りのIoTと掛け合わせれば、例えば設置している電子機器内のデータを通信させるのではなく、その機器内で持っておくことでネットに接続できない状況でもデータを蓄積させておくことができるなど、色々使い道がありそうということをおっしゃってました。

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

https://speakerdeck.com/pocke/lets-write-rbs

最近リリースされたRBS 3.1の新機能を紹介と、RBSを使った開発のデモを見せていただきました。

紹介されていた新機能は rbs subtractというもので、二つのファイルを引数で指定してあげればそのファイル同士で重複して書かれているRBSの定義を片方から消すことができるというものでした。

RBSを大きいRubyのアプリケーションに導入するためには自分で書いていくのは結構きついので、大体を自動生成させる必要があります。
ただ、Generaterも完璧ではないため、不完全な定義を生成してしまうことがあります。

生成させたrbsと、自分で書いていた別ファイルのrbsに重複があった場合に、dumplication errorになってしまいますが、subtractを使えば自動で、よく書かれている方の定義を残して、もう一方の重複した定義を自動で消すことができます。

加えて、rbsファイルのsyntaxを調べるparseコマンドも紹介されていました。

あくまで簡潔で楽しいRubyの書き方を残しつつ、静的型検査の仕組みを導入するためのRBS、今後どのように普及していくか楽しみです。

## まとめ
RubyKaigiに参加したのは今回が初めてだったのですが、発表者の方達のRubyに対する愛が共通して伝わってきて、感動しました。
発表を聞くだけでなく、他の会社の方と一緒にご飯を食べたり、ブースを回って色々な話をしたりと、オフライン参加だからこそ生まれる人との繋がりも感じることができました。

セッション中は理解できないことばっかだったのですが、調べならがレポートを書いてたらやっとなんとなく内容が分かってきましたw

つよつよなエンジニアの方々に触れ合ってとても刺激になりました..!!
もっと精進してまいります!

来年も参加できたらいいなァ！！