はじめに
今回RubyKaigiに初参加してきましたので参加レポート(というより所感)をアウトプットさせていただきます!
筆者について
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
- The newsletter of RBS updates
- Ruby, Ractor, QUIC
- [JA] Matz Keynote / Yukihiro "Matz" Matsumoto @matz
※YouTubeの動画リンクにつながっていますので良ければ御覧ください
TypeProf for IDE: Enrich Dev-Experience without Annotations
こちらはIDE (VSCode) での静的型付け(TypeProf)のお話になります。
僕はJavaやTypeScriptをよく使用していたのでわかりますが、型を書くのって結構ストレスなんです。新しいNode Module Libraryを入れるときも型が対応していないとTypeScriptでは使えないですし、どうしても使いたい場合は自分で書くという辛さがあります。(大抵のライブラリには型は書かれていますが)
なので最近の流行?トレンド的には別で定義ファイルを自分たちで書いておいてそのファイルをもとにTSの型を生成するというフローを入れるようなライブラリが増えてきています。(PrismaとかOpenAPIとか)
Rubyの静的型付けに対する考えとしては 型は手動で書かない
をポリシーに開発されているようで、過去のそういった苦しみや課題をうまく取り入れて開発を進めているようです。
Rubyはインタプリタなので実行しないと型というかオブジェクトがわからないので、型を決めるためには実行(どこかで使用していること)が必要とのことです。
方針としては書かないけど、RBSで型を明示することができるとのことでVSCodeのGo to definition
をクリックすると型定義が作成されるらしい!(これはかなり便利そう)
全体的な話を見た上での感想としては、VSCodeのGo to definition
で型定義が簡易に作れるのに全ファイルを走査してすべての型ファイルをGenerateしないのはやはり型は必要なときに使うというポリシーで無駄な管理コストを省くためなのかなーと思いました。(でも結局ライブラリに依存するから全生成しちゃったほうが良いような。。。)
少し残念だったのはTypeProf for IDE
では規模の大きいRubyファイルを解析するとレスポンスが最悪10分かかることがあるよう(対応としては長い処理の場合は打ち切りにする)で、Railsとかで使おうとすると大丈夫なのかなーとかまだ実用的ではないのかもと思いました。
The newsletter of RBS updates
そもそも RBS とは
RBS はRuby版の型言語といったところですね。
- Ruby 3.0 から同梱されている
- Ruby 2.6 でも
gem install rbs
で使用できる
そもそも RBS Collectionとは
RBS v2からの新機能
- Bounded type parameters
- これはいわゆるクラスレベルでのジェネリクスの機能になるようです。
- 入力値に推論してくれて特定の型を返す汎用的な機能の作成に役立ちそうです。
- Generic Type Aliases
- こちらも構造情報に型情報を流すことができるようになる
感想
rbs collectionが以前より簡単に導入できるようになったようでセットアップが簡単なのが便利そうです。今までは導入のためにハードルが高かったようです。
個人的にはRBS v2のジェネリクス機能が楽しみですね。早く型使いたい。。。
Ruby, Ractor, QUIC
そもそもRactorとは
Rubyにおける並列実行可能な仕組み、Goroutineが近い
Ractorの前に近年のRealTime通信技術について
現状
- WebRTC
- WebSocket
これから
- WebTransport
- HTTP/3から
- use UDP
- QUICを使用する
QUICとは
- 現状のTCP/IPでのパケット損失を解決するための新しいプロトコル
- 現在のChromeやFirefoxなどのブラウザで既に使用されている
感想
噂のQUICとRactorで実装したとのことです。そもそもQUICに対して聞いたことはあるけど、よく知らない状態だったのでこの機会に知れてよかったです。データの中身のHeaderとpayloadの仕様を知れたり、Rubyでのデータ処理方法の実装例を知れました。
結果としては残念ながらRubyの純粋なコードのほうが早く、Ractorを使うと85倍も遅くなるようです。同じマシンでの実験のため原因がメモリ差などではないのが少し残念ですが、これからのRactorの動向に期待したいですね。
Ractor 関連
終わりに
今回初めてのRubyKaigiの参加となりましたが、Rubyが性能向上、静的型付けの対応、並列実行の強化など生まれ変わろうとしていることがわかりました。
また、今回Rubyが初なのでRubyの言語としてのポジショニングというのがより深く理解できて参加してよかったと思っています。
新しい静的型付けのツールやRactorなど業務でなくてもツールとして活用できればと思いました!
末筆ではありますが閲覧頂きありがとうございました!