RubyKaigi 2021 参加レポート（というより所感）

# はじめに

今回RubyKaigiに初参加してきましたので参加レポート（というより所感）をアウトプットさせていただきます！

https://rubykaigi.org/2021-takeout

# 筆者について
#### Rubyスキル

- 初めてComputer Software業界に入ったときに研修でRubyを少し使ったくらい
- Ruby on Railsの研修を3ヶ月みっちりしたくらい
- 業務ではまだ毛が生えた程度

#### 経歴

2021年に転職をし入社するまでRuby on Railsをするとは思ってなかったのでそもそもRailsが初になります。主にJavaとかGoなどのコンパイル言語が主な経験になるのでRubyやPythonなどのインタプリタ言語自体の開発経験が初になります。

その上でのRubyKaigi参加となるのでお手柔らかに見ていただければと思います！

# 特に印象に残った発表
- [TypeProf for IDE: Enrich Dev-Experience without Annotations](https://www.youtube.com/watch?v=uNttp63ELoE)
- [The newsletter of RBS updates](https://youtu.be/AwuSHC6j-48)
- [Ruby, Ractor, QUIC](https://youtu.be/9da7QccHXV4)
- [[JA] Matz Keynote / Yukihiro "Matz" Matsumoto @matz](https://www.youtube.com/watch?v=QQASprf5EGw)

> ※YouTubeの動画リンクにつながっていますので良ければ御覧ください

## TypeProf for IDE: Enrich Dev-Experience without Annotations

https://www.youtube.com/watch?v=uNttp63ELoE

こちらはIDE (VSCode) での静的型付け(TypeProf)のお話になります。

僕はJavaやTypeScriptをよく使用していたのでわかりますが、型を書くのって結構ストレスなんです。新しいNode Module Libraryを入れるときも型が対応していないとTypeScriptでは使えないですし、どうしても使いたい場合は自分で書くという辛さがあります。（大抵のライブラリには型は書かれていますが）

なので最近の流行？トレンド的には別で定義ファイルを自分たちで書いておいてそのファイルをもとにTSの型を生成するというフローを入れるようなライブラリが増えてきています。（[Prisma](https://www.prisma.io/)とか[OpenAPI](https://github.com/OpenAPITools/openapi-generator)とか）

Rubyの静的型付けに対する考えとしては `型は手動で書かない` をポリシーに開発されているようで、過去のそういった苦しみや課題をうまく取り入れて開発を進めているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134845/9bceec58-1695-8b4d-a83b-008cedffccd9.png)

Rubyはインタプリタなので実行しないと型というかオブジェクトがわからないので、型を決めるためには実行（どこかで使用していること）が必要とのことです。

方針としては書かないけど、RBSで型を明示することができるとのことでVSCodeの`Go to definition`をクリックすると型定義が作成されるらしい！（これはかなり便利そう）

全体的な話を見た上での感想としては、VSCodeの`Go to definition`で型定義が簡易に作れるのに全ファイルを走査してすべての型ファイルをGenerateしないのはやはり型は必要なときに使うというポリシーで無駄な管理コストを省くためなのかなーと思いました。（でも結局ライブラリに依存するから全生成しちゃったほうが良いような。。。）

少し残念だったのは`TypeProf for IDE`では規模の大きいRubyファイルを解析するとレスポンスが最悪10分かかることがあるよう（対応としては長い処理の場合は打ち切りにする）で、Railsとかで使おうとすると大丈夫なのかなーとかまだ実用的ではないのかもと思いました。

## The newsletter of RBS updates

https://www.youtube.com/watch?v=AwuSHC6j-48

### そもそも RBS とは

RBS はRuby版の型言語といったところですね。

- Ruby 3.0 から同梱されている
- Ruby 2.6 でも `gem install rbs`で使用できる

### そもそも RBS Collectionとは

https://github.com/ruby/gem_rbs_collection

https://qiita.com/jnchito/items/bf8c6c2e1dd6cff05f4e#gem%E3%81%AE%E5%9E%8B%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%92%E3%81%99%E3%82%8B

### RBS v2からの新機能

- Bounded type parameters
    - これはいわゆるクラスレベルでのジェネリクスの機能になるようです。
    - 入力値に推論してくれて特定の型を返す汎用的な機能の作成に役立ちそうです。
- Generic Type Aliases
    - こちらも構造情報に型情報を流すことができるようになる

### 感想

rbs collectionが以前より簡単に導入できるようになったようでセットアップが簡単なのが便利そうです。今までは導入のためにハードルが高かったようです。

個人的にはRBS v2のジェネリクス機能が楽しみですね。早く型使いたい。。。

## Ruby, Ractor, QUIC

https://youtu.be/9da7QccHXV4

### そもそもRactorとは

Rubyにおける並列実行可能な仕組み、Goroutineが近い

### Ractorの前に近年のRealTime通信技術について

#### 現状

- WebRTC
- WebSocket

#### これから

- WebTransport
    - HTTP/3から
    - use UDP
    - QUICを使用する

### QUICとは

https://quic.tech

- 現状のTCP/IPでのパケット損失を解決するための新しいプロトコル
- 現在のChromeやFirefoxなどのブラウザで既に使用されている

### 感想

噂のQUICとRactorで実装したとのことです。そもそもQUICに対して聞いたことはあるけど、よく知らない状態だったのでこの機会に知れてよかったです。データの中身のHeaderとpayloadの仕様を知れたり、Rubyでのデータ処理方法の実装例を知れました。

結果としては残念ながらRubyの純粋なコードのほうが早く、Ractorを使うと85倍も遅くなるようです。同じマシンでの実験のため原因がメモリ差などではないのが少し残念ですが、これからのRactorの動向に期待したいですね。

#### Ractor 関連

https://rubykaigi.org/2021-takeout/presentations/tagomoris.html

https://rubykaigi.org/2021-takeout/presentations/vinistock.html

# 終わりに

今回初めてのRubyKaigiの参加となりましたが、Rubyが性能向上、静的型付けの対応、並列実行の強化など生まれ変わろうとしていることがわかりました。
また、今回Rubyが初なのでRubyの言語としてのポジショニングというのがより深く理解できて参加してよかったと思っています。

新しい静的型付けのツールやRactorなど業務でなくてもツールとして活用できればと思いました！

末筆ではありますが閲覧頂きありがとうございました！