Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
型を書かないRuby開発への挑戦
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shia
March 02, 2026
Technology
6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
型を書かないRuby開発への挑戦
「型を書かなくても十分有用な型情報を得られる」を目標に開発中の LSP「type-guessr」について話します。
完全さを諦めることでいい感じの体験を目指します。
Shia
March 02, 2026
More Decks by Shia
See All by Shia
Good Enough Types: Heuristic Type Inference for Ruby
riseshia
1
4.7k
Class.new is all you need
riseshia
1
630
ひとつの開発環境
riseshia
0
100
Conquering Massive Traffic Spikes in Ruby Applications with Pitchfork
riseshia
0
380
スパイクアクセス対策としての pitchfork 導入
riseshia
0
960
NewEngineering 2024 - 繋がっていくサービスを支える開発環境作り
riseshia
0
1.8k
Hotspot on Coverage
riseshia
0
300
差分ベースで効率的にテストを実行してみる
riseshia
1
820
Cookpad internship 2020 summer - web
riseshia
0
7.7k
Other Decks in Technology
See All in Technology
「AIに依存している」と 「AIを使いこなしている」の違い
k8yasuma
0
120
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
290
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
420
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
240
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
そのドキュメント、自動化しませんか?
yuksew
1
310
世界、断片、モデル。そして理解
ardbeg1958
1
130
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
340
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.9k
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
280
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
1
500
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
350
Building AI with AI
inesmontani
PRO
1
1.1k
Statistics for Hackers
jakevdp
799
230k
Unsuck your backbone
ammeep
672
58k
Crafting Experiences
bethany
1
220
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Practical Orchestrator
shlominoach
191
11k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Transcript
福岡Rubyist会議05 Shia@STORES 型を書かないRuby開発への挑戦
SIM SANGYONG (@shia) - STORES株式会社 - GitHub: @riseshia - X:
@riseshia 自己紹介 2
質問です 3 Rubyで型を書きたいですか?
お気持ち 4 型を書きたくない!!
正確なお気持ち 5 Ruby では型を書きたくない!!
そしてただのワガママ 6 Ruby では型を書きたくない!! でも型情報はちょっとほしい
Ruby 型マップ 7 型宣言依存度 Steep / Sorbet Ruby LSP Guessed
type typeprof solargraph 提供される情報の品質
Ruby 型マップ 8 型宣言依存度 Steep / Sorbet Ruby LSP Guessed
type typeprof solargraph 型宣言が前提。方向が違う 提供される情報の品質
Ruby 型マップ 9 型宣言依存度 Steep / Sorbet Ruby LSP Guessed
type typeprof solargraph 丁寧な推論 大規模アプリだと少々重い gem は rbs 書いてね 提供される情報の品質
Ruby 型マップ 10 型宣言依存度 Ruby LSP Guessed type typeprof solargraph
欲しいアプローチは近いが Hash/Array が情報不足 あと ruby-lsp と機能重複... Steep / Sorbet 提供される情報の品質
Ruby 型マップ 11 型宣言依存度 Ruby LSP Guessed type typeprof solargraph
変数名ベースの単純推測のみ 提供される情報の品質 Steep / Sorbet
Ruby 型マップ 12 型宣言依存度 Ruby LSP Guessed type typeprof solargraph
この辺の何かがほしい 提供される情報の品質 Steep / Sorbet
推論の精度を落とし 自分が書く型の必要性を減らす・速度を得る 欲しいもの 13
- 推論された型が複雑なら untyped に - A or B or C
or D… -> untyped でいいでしょう! - Hash / Array に Structural Typing サポート - ヒューリスティックに依存する どうやって? 14
Structural Typing - Hash 15
Structural Typing - Array 16
Duck Typing を信じる 17 通常の Duck Typing: 「これらのメソッドに応答できるなら、OK」 🦆 quack
できるなら → アヒル type-guessr: 「これらのメソッドが呼ばれたなら、このクラスのはず」 🦆 quack が呼ばれた → きっとアヒル
Duck Typing を信じる 18
Duck Typing を信じる 19
Duck Typing を信じる 20
対象: LOC 100k 以上の Rails プロジェクト三つ 変数に送ったメソッド一覧から、変数(レシーバ)の型がわかる比率 => 10~20% Duck
Typing を信じる - そんな〜うまくいくんですか? 21
Duck Typing を信じる in type-guessr 22
- ruby-lsp の UX にそのまま溶け込める - 適切に実装すれば hover, autocompletion, 定義ジャンプが「型
がわかれば」自動で効く - ruby-lsp-rails, ruby-lsp-mongoid 等が ruby-lsp に登録する DSL 由来のメソッド一覧をそのまま活用できる - Duck typing ヒューリスティックではめっちゃ大事 設計 - Impl as ruby-lsp add on 23
設計 - How to infer - Duck typing によるクラス推定を頑張る -
自明なものを頑張る(e.g. Hoge.new) - あとは型情報を使って伝播していく - 型推論の結果が一定以上複雑になったら精度を落とす 24
- 十分小さいアプリでは価値が出にくい (メソッド名の一意性に依存) - ActiveRecord とかが大変扱いづらい... - 速度が遅い問題 - ruby-lsp
のインデッシングを待つ必要がある - 推論が重い - Diagnostic 出しづらい問題 - ヒューリスティックを混ぜたことでどう出すべきかという悩み Limitation 25
今色々いじりまくっており unstable ですが どうぞお試しください (そしてフィードバックがあると喜びます) bundle add type-gusser -g=’development’ https://github.com/riseshia/type-guessr
最後に 26