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
primeNumberでのRBS導入の現在 && RBS::Traceでinline RBSを...
Search
Manami Nakamura
May 20, 2025
Programming
0
570
primeNumberでのRBS導入の現在 && RBS::Traceでinline RBSを拡充してみた
はじめてのRubyKaigi 〜ゆるっとふりかえり会〜
https://pn-developer-lounge.connpass.com/event/236227/
Manami Nakamura
May 20, 2025
Tweet
Share
More Decks by Manami Nakamura
See All by Manami Nakamura
TROCCOで開発生産性を計測してみた
mnmandahalf
0
100
データカタログのアクセスコントロールを考える
mnmandahalf
0
42
COMETA®開発の裏側をご紹介
mnmandahalf
0
940
Railsのマイグレーション、どこまで安全にできるか
mnmandahalf
0
73
よく考えずにRDSを暗号化したら辛かった話
mnmandahalf
0
26
Other Decks in Programming
See All in Programming
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
760
Graviton と Nitro と私
maroon1st
0
160
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
330
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
4.2k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
6
1.8k
Python札幌 LT資料
t3tra
7
1.1k
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
110
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
340
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
290
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
240
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
600
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
KATA
mclloyd
PRO
33
15k
It's Worth the Effort
3n
187
29k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
870
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
37
Ruling the World: When Life Gets Gamed
codingconduct
0
120
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
A better future with KSS
kneath
240
18k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
34
Measuring & Analyzing Core Web Vitals
bluesmoon
9
720
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Bash Introduction
62gerente
615
210k
Transcript
primeNumberでのRBS導入の現在 && RBS::Traceでinline RBSを拡充してみた 2025.5.20 はじめてのRubyKaigi @mnmandahalf
AGENDA 2 1. 自己紹介 2. primeNumberのRBS導入の現在 3. RBS::Traceでinline RBSを拡充してみた 4.
今後やりたいこと
3 中村 愛美 @mnmandahalf 株式会社primeNumber Software Engineer クラウドデータカタログCOMETAの開発をしています ここ数ヶ月はSQLパーサとOpenSearchとよく戯れています Ruby歴:2017〜
Kaigi歴:個人で1回(2023)今回会社としてKaigi初参加🔰 好きなみかん:伊予柑とはるみです 🍊 アイコン:実は「マナティー」ではなく「ベルーガ」
4 RubyKaigi 2025 楽しかったですね! 型エコシステムに関するセッションがたくさんありました
5 primeNumberのRBS導入の現在
6 primeNumberのRBS導入の現在 • ある時点の型は大部分が追加済み(untyped込み) • orthoses, orthoses-railsを活用 • gem_rbs_collectionsで足りないGemの型は sig/gemsに追加
• CIでSteepを実行しているが、 型検査はまだすり抜けている状態 導入してくださった吉野さん、ありがとうございます!!
7 課題:活用までに乗り越えるステップが多い • 別ファイルのRBSをメンテするのがややハードルが高い • まだドキュメントとしての恩恵を感じられていない • 型検査までの道のりが遠い
8 モチベーション:開発者体験を向上させたい • 実はRubyのバックグラウンドがないエンジニアが多く、コードリーディングが大変 • 新メンバーも増える予定なのでコードにたくさん型情報を入れておきたい • フロントエンド開発を同時にすることも多く、多くの人がVS Codeユーザー inline
RBS comment を書いて、Ruby LSPの開発サポートを受けよう!
9 RBS::Traceでinline RBSを拡充してみた
10 RBS::Trace • https://github.com/sinsoku/rbs-trace • 神速 (@sinsoku_listy)さんによるランタイムから型情報を収集して保存するGem • RSpecなどを実行するとメソッドの引数と戻り値の型情報を自動的に収集し、 それをRBSファイルやコメントとして保存する機能を持っている
11 とある日の勉強会で... • mnm「inline RBSって # @rbs より #: の書き方が主流なのでしょうか?」
• 神速さん「そうですね、実はもうすぐ RBS::Traceが #: に対応します! 」 RBS::Traceが rbs_colon オプションに対応 🎉🎉🎉
12 RBS::Traceを実行した結果... • セットアップがすごく簡単 • packwerkでpacks/以下に分割されたディレクトリ以下のファイルにも対応◎ • 生成された型もかなり正確そう(※テストカバレッジ次第) • 足りないところは手で補足していく
13 RBS::Traceを実行した結果... • TROCCOはMySQL -> BigQueryのようなデータの転送をサポートしている • 様々なサービスとデータ転送で連携するTROCCOやCOMETAには、 200+ある接続情報をメタプロで抽象化して扱うコードが多数ある •
大量のunion型が作られる • 正しい挙動だが、可読性のため弊社では工夫が必要そう
14 inline RBS comment + Ruby LSPでできること #: コメントのシンタックスハイライトに対応(Opacityも変えられる) ホバーでメソッドの型情報を表示
15 今後やりたいこと
16 今後やりたいこと - 型情報の追加 • レコード型の定義 ◦ Hashを返すメソッドが多いので、スキーマを定義したい ◦ Hash[untyped]やHash[Symbol,
Hash[Symbol, Hash[...]]] の改善 • interfaceの定義 ◦ ダックタイプしている箇所の表現を簡潔にする(大量unionを回避) • (型検査するなら) Foo::ActiveRecord_Relationや Foo::ActiveRecord_AssociationRelationなど、ActiveRecord関連の型定義を拡充して いく
17 今後やりたいこと - 手書きとsubtract方針の整備 • 手書きしてもらう際のRBSファイルはinline-rbsで生成することをイメージ • RBSファイルに定義を保存する場合はsubtractしたい • RBSファイルが散在することになるので、
弊社独自の関連ファイルを開くVSCode拡張でサポートする
Thank you!