Rubyの静的型解析を触った感想を書いたりする
この記事は Opt Technologies Advent Calendar 2020 10 日目記事です
12/25にリリースしたRuby 3.0を使った話をしているので時空が歪んでるように見えますが気のせいです
9 日目の記事は @shachitaku さんの M5StickC x JoyStick HATで寝ながらパソコンを操作できるBluetoothマウスを作ってみた です
11 日目の記事は @shoyaokayama さんの LINEThingsとM5CoreInkを使ってO2Oマーケティングを体験してみる です
Ruby 3.0の目玉機能として静的型解析のサポートが挙げられるでしょう
最近仕事ではRailsを書いてるけど、もともと静的型付け派な自分としては大変気になる機能なので試してみて感想を書き残しておこうと思った次第
良かった点は静的に型情報を解析できるようになる、に尽きるので、基本的に足りない点を指摘することに終始する点、ご了承いただければと
結論
まだ早い(そりゃそう)
自分が求める体験との乖離が結構大きかったのと、エコシステムが粗く、これからどんどん変化していくと思うので追従が当面の間かなり大変だろうという所感
(実際に使ってフィードバックしたりして貢献していかないと進化していかないだろうから使いたい気持ちもある)
触った感想とか
- steep checkが遅い
- 実装を変更するたびに型定義を更新しないといけない
- エディタサポートが弱い
- 現状はRBS作ってもuntypedな部分を厳格にしようとすると生成したコードを書き換える必要がありそう?
- 理想的には実装を書き換える→TypeProfによるコード生成→自動で補完!だと思うけど、そうなると自動生成されたRBSファイルを直接変更じゃなくて上書きのような形にしないと継続的にTypeProfの世話になることが出来なくて難しそう。どういう方針なんだろう
- 型定義ファイルの取得方法がgemなどのツールでサポートされていない(git submoduleとかで取ってきてそのパスを指定する必要がある)
- これはSteepの問題ではあるけど、SteepってRubyにバンドルされてるわけじゃないから、そこまでgemなどの公式サイドのツール側でサポートしてくれるようになるんだろうか?という疑問はある
- irbのようなREPL環境でも型情報が使えるようになってほしい
その他の感想
そもそも疑問なんだけど、型定義ファイルの生成と型定義ファイルそのものを扱うライブラリが本体にバンドルされても静的解析ツール(Steep)が本体に入らないのってどういう理由なんだろうか
RBSファイルの存在は最終的にSteepありきになるはずなのでSteepに特化した機能を入れたくなりそうなもんだけど非公式のツール相手にそこまでやれるもんなんか、みたいな
Rubyの開発方針とか詳しくないので、本体には入ってないけど実質公式みたいなもんだからいい、みたいなのもありそうではあるけど
終わりに
まだ実装を書いておらず、ほぼツールチェイン周りへの感想なのだけど、それでこれだけ出てくるので中々に前途多難を感じる
CIとか組み込んで実際の開発体制に組み込めるか?という点や型の解析周りでの感想は追々やっていけたらなと
参考資料・関連リンク
RBS Railsを使ってRailsアプリケーションにSteepを導入する - pockestrap
GitHub - soutaro/steep-vscode: VSCode extension for Steep
Rubyで型チェック!動かして理解するRBS入門 〜サンプルコードでわかる!Ruby 3.0の主な新機能と変更点 Part 1〜 - Qiita
rbs/syntax.md at master · ruby/rbs · GitHub
Ruby 3の静的解析機能のRBS、TypeProf、Steep、Sorbetの関係についてのノート - クックパッド開発者ブログ