Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
型を書かないRuby開発への挑戦
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shia
March 02, 2026
Technology
6.3k
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
猫の手も借りたい
riseshia
0
43
Good Enough Types: Heuristic Type Inference for Ruby
riseshia
1
5k
Class.new is all you need
riseshia
1
750
ひとつの開発環境
riseshia
0
220
Conquering Massive Traffic Spikes in Ruby Applications with Pitchfork
riseshia
0
440
スパイクアクセス対策としての pitchfork 導入
riseshia
0
1.1k
NewEngineering 2024 - 繋がっていくサービスを支える開発環境作り
riseshia
0
2k
Hotspot on Coverage
riseshia
0
320
差分ベースで効率的にテストを実行してみる
riseshia
1
860
Other Decks in Technology
See All in Technology
【データ横丁主催】AI エージェント時代のTranslytical Data Platform
shisyu_gaku
0
290
国際カードブランドルール変更に伴うクレジットカード決済取引仕様変更について
k1style
0
210
「作れる」と「リリースできる」の間にあったもの── PdMを外して見えた、PdMがやるべき仕事/Buildable ≠ Shippable: What Removing the PM Taught Me About the PM’s Job
yappli_developers
0
230
dbt Semantic Layerで進めるenechainのデータ民主化
akizhou
1
250
Claude for Google Workspaces ポン出し/claude-for-google-workspace-slide-conversion
emiki
0
12k
AI時代のGraphQL
joere
3
390
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
12k
[EMNLP26] RIGEL: Self-Distilled Score Adaptation for Image and Video Captioning Evaluation
keio_smilab
PRO
0
120
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
980
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
290
撮るだけでは終わらない。ソニーが挑むB2Bカメラソリューション開発
sony
0
110
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
230
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
440
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
580
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
New Earth Scene 8
popppiees
4
2.7k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
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