$30 off During Our Annual Pro Sale. View Details »
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
550
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
99
データカタログのアクセスコントロールを考える
mnmandahalf
0
38
COMETA®開発の裏側をご紹介
mnmandahalf
0
930
Railsのマイグレーション、どこまで安全にできるか
mnmandahalf
0
55
よく考えずにRDSを暗号化したら辛かった話
mnmandahalf
0
24
Other Decks in Programming
See All in Programming
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
320
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
1
180
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
3k
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
680
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
5
2.7k
Phronetic Team with AI - Agile Japan 2025 closing
hiranabe
2
700
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
200
Micro Frontendsで築いた 共通基盤と運用の試行錯誤 / Building a Shared Platform with Micro Frontends: Operational Learnings
kyntk
1
1.6k
仕様がそのままテストになる!Javaで始める振る舞い駆動開発
ohmori_yusuke
8
4.7k
GraalVM Native Image トラブルシューティング機能の最新状況(2025年版)
ntt_dsol_java
0
170
最新のDirectX12で使えるレイトレ周りの機能追加について
projectasura
0
310
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
4
390
Featured
See All Featured
Visualization
eitanlees
150
16k
What's in a price? How to price your products and services
michaelherold
246
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
990
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Building an army of robots
kneath
306
46k
The Language of Interfaces
destraynor
162
25k
How GitHub (no longer) Works
holman
316
140k
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!