「RubyKaigi Takeout 2021」に初参加したので、そのレポートを簡単に書きました!
私の経歴ですが、Javaを5年近く経験した後、Ruby on Railsでの開発を1年半ほど経験、という流れです。
Day1
TypeProf for IDE: Enrich Dev-Experience without Annotations
- RBS
- Rubyの型を定義するための公式言語
- TypeProf/Steep/Sorbet
- 静的型解析ツール
- TypeProfとはRubyコードを型レベルで実行する
- TypeProfの弱点としては解析に時間がかかる
- require先のライブラリも解析しに行くのが主な原因
- TypeProf for IDEは1秒以上かかる解析は打ち切るという割り切った設計にした
- TypeProfを高速化するにはgemのRBSを書く必要がある
[感想]
Rubyの静的型解析に関する基本的な内容と、Ruby3.1でリリースされるVSCode用の拡張機能「TypeProf for IDE」に関するお話です。静的型解析は個人的にも一番注目している機能なので、とても興味深いセッションでした。
Rubyの静的型解析に関しては絶賛進化中という感じで、TypeProfも規模の大きいコードでは解析にとても時間がかかるらしいです。それを改善するために各種gemの方でRBSを書くことが重要になってくるとのことです。
私はRubyMineで開発していますが、VSCodeが便利になれば負けじとRubyMineも便利な機能が追加されるので、IDE/エディタ間の競争には今後も期待しております。
RuboCop in 2021: Stable and Beyond
- Rubocop1.0リリース直前のバージョンが圧倒的にダウンロード数が多かった
- なので1.0以降のダウンロード数を増やしたいと思ったのが今回のきっかけ
- 1.0以降はルールの互換性を担保する
- アップグレード時の痛みを減らす
- いきなり適用せずユーザーが選択できるように
- auto-correction
-
-A
オプションでunsafeな修正も可能になった
-
-
--parallel
オプションがデフォルトになった- Parallel gemを利用している
- 今のところRubocopはRBSをサポートしていない
- デフォルトルールが厳しすぎる、しかしカスタムするのも大変…、という意見をもらうことがある
- 対策1: DisabledByDefault: trueから始めて、PRでよくコメントをもらう箇所から有効にしていく
- Railsリポジトリはこの方法を採用している
- 対策2: Third party presetを活用する
- 対策1: DisabledByDefault: trueから始めて、PRでよくコメントをもらう箇所から有効にしていく
[感想]
私も普段からとてもお世話になっているRubocopの現在とこれからについてのお話でした。
-A
というunsafeな修正が可能なオプションがある、--parallel
オプションがデフォルトになった、など為になる情報も聞くことができました。
デフォルトルールが厳しすぎると思った際の、カスタマイズ方法に関する情報も参考になりました。
Day2
The newsletter of RBS updates
- Ruby3.1で導入されるRBSの新機能について
- rbs collection
- RBSのためのbundlerというイメージ
- サードパーティーのRBSを管理するのは大変というのがモチベーション
- 依存性の解決を手で行う必要がある
- 依存性の解決にGemfile.lockを利用している
- 標準ライブラリを手動で設定ファイルに記述する必要がある
- 標準ライブラリはGemfile.lockに表れないため依存性の解決ができない
- なるべく早く解決したいと思っている
- bounded type parameters
- Generic Type Aliases
- Javaのジェネリクス的なもの?
- 型の抽象度を上げてDRYな書き方ができる
[感想]
現状、サードパーティーのRBSを管理するのは大変だということを知りました。それがRuby3.1では解消されるとのことなので、既にRBSを使っている人たちには影響が大きいアップデートになりそうですね。
Ruby Committers vs the World
[感想]
Ruby3.1の新機能についてコミッターの方々30人近くがワイワイしゃべるという、盛り上がるセッションでした。RubyKaigiの参加者はIDEを使っていない人もけっこう多いということが意外でした。
やはりGoを意識したアップデートが多いように感じられました。
「Goの総合的な体験がよいのであって、ワンバイナリだけ切り出して考えても幸せになれない、という気はしてます」というチャット欄のコメントが印象に残りました。
Day3
Matz Keynote
[感想]
Rubyの生みの親まつもとゆきひろさんが各セッションの振り返りや3.1の新機能についてお話するセッションでした。
「新しい機能を作るだけでは自己満なので、開発者のためにRuby3.0からは後方互換性を大事にした」という思想は、開発者にはとてもありがたいことです。
PythonやGoなどと比較しながらRubyの利点に関する説明を聞けたのが面白かったです。
「パフォーマンスは言語の評価に直結」とMatzさんが言っていたので、今後もパフォーマンス改善には力を入れていくという強い意思が伝わってきました。
まとめ
初参加でしたが、コミッターから直接Rubyの最新情報を聞くことができる、とても有意義なカンファレンスだと感じました。
Railsを主に利用しているWeb系エンジニアの自分には難しい内容もありましたが、セッションの動画がYouTubeにアップされているので、じっくりと復習できる点も素晴らしかったです。
静的型解析で開発体験の向上・JITコンパイラ/Ractorなどのパフォーマンス向上、などRuby3には開発者にとって魅力的な機能があることがわかりました。
今回のカンファレンスで、自分はRubyについて知らないことがたくさんあるということに気づき、Rubyの言語仕様を詳しく知りたい・Rubyのコアな部分のリポジトリを詳細に見てみたい、などのモチベーションに繋がりました。