Upgrade to Pro — share decks privately, control downloads, hide ads and more …

型を書かないRuby開発への挑戦

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for Shia Shia
March 02, 2026

 型を書かないRuby開発への挑戦

「型を書かなくても十分有用な型情報を得られる」を目標に開発中の LSP「type-guessr」について話します。
完全さを諦めることでいい感じの体験を目指します。

Avatar for Shia

Shia

March 02, 2026
Tweet

More Decks by Shia

Other Decks in Technology

Transcript

  1. Ruby 型マップ 7 型宣言依存度 Steep / Sorbet Ruby LSP Guessed

    type typeprof solargraph 提供される情報の品質
  2. Ruby 型マップ 8 型宣言依存度 Steep / Sorbet Ruby LSP Guessed

    type typeprof solargraph 型宣言が前提。方向が違う 提供される情報の品質
  3. Ruby 型マップ 9 型宣言依存度 Steep / Sorbet Ruby LSP Guessed

    type typeprof solargraph 丁寧な推論 大規模アプリだと少々重い gem は rbs 書いてね 提供される情報の品質
  4. Ruby 型マップ 10 型宣言依存度 Ruby LSP Guessed type typeprof solargraph

    欲しいアプローチは近いが Hash/Array が情報不足 あと ruby-lsp と機能重複... Steep / Sorbet 提供される情報の品質
  5. Ruby 型マップ 11 型宣言依存度 Ruby LSP Guessed type typeprof solargraph

    変数名ベースの単純推測のみ 提供される情報の品質 Steep / Sorbet
  6. Ruby 型マップ 12 型宣言依存度 Ruby LSP Guessed type typeprof solargraph

    この辺の何かがほしい 提供される情報の品質 Steep / Sorbet
  7. - 推論された型が複雑なら untyped に - A or B or C

    or D… -> untyped でいいでしょう! - Hash / Array に Structural Typing サポート - ヒューリスティックに依存する どうやって? 14
  8. Duck Typing を信じる 17 通常の Duck Typing: 「これらのメソッドに応答できるなら、OK」 🦆 quack

    できるなら → アヒル type-guessr: 「これらのメソッドが呼ばれたなら、このクラスのはず」 🦆 quack が呼ばれた → きっとアヒル
  9. - ruby-lsp の UX にそのまま溶け込める - 適切に実装すれば hover, autocompletion, 定義ジャンプが「型

    がわかれば」自動で効く - ruby-lsp-rails, ruby-lsp-mongoid 等が ruby-lsp に登録する DSL 由来のメソッド一覧をそのまま活用できる - Duck typing ヒューリスティックではめっちゃ大事 設計 - Impl as ruby-lsp add on 23
  10. 設計 - How to infer - Duck typing によるクラス推定を頑張る -

    自明なものを頑張る(e.g. Hoge.new) - あとは型情報を使って伝播していく - 型推論の結果が一定以上複雑になったら精度を落とす 24
  11. - 十分小さいアプリでは価値が出にくい (メソッド名の一意性に依存) - ActiveRecord とかが大変扱いづらい... - 速度が遅い問題 - ruby-lsp

    のインデッシングを待つ必要がある - 推論が重い - Diagnostic 出しづらい問題 - ヒューリスティックを混ぜたことでどう出すべきかという悩み Limitation 25