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
530
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
95
データカタログのアクセスコントロールを考える
mnmandahalf
0
35
COMETA®開発の裏側をご紹介
mnmandahalf
0
930
Railsのマイグレーション、どこまで安全にできるか
mnmandahalf
0
51
よく考えずにRDSを暗号化したら辛かった話
mnmandahalf
0
22
Other Decks in Programming
See All in Programming
AI時代に必須!状況言語化スキル / ai-context-verbalization
minodriven
2
330
ネストしたdata classの面倒な更新にさようなら!Lensを作って理解するArrowのOpticsの世界
shiita0903
1
260
TransformerからMCPまで(現代AIを理解するための羅針盤)
mickey_kubo
7
6k
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.7k
Pythonに漸進的に型をつける
nealle
1
160
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
130
PyCon mini 東海 2025「個人ではじめるマルチAIエージェント入門 〜LangChain × LangGraphでアイデアを形にするステップ〜」
komofr
3
550
お前も Gemini CLI extensions を作らないか?
satohjohn
0
110
自動テストのアーキテクチャとその理由ー大規模ゲーム開発の場合ー
segadevtech
0
510
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
Dive into Triton Internals
appleparan
0
440
ボトムアップの生成AI活用を推進する社内AIエージェント開発
aku11i
0
1.5k
Featured
See All Featured
Music & Morning Musume
bryan
46
6.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
How to Ace a Technical Interview
jacobian
280
24k
Into the Great Unknown - MozCon
thekraken
40
2.1k
How STYLIGHT went responsive
nonsquared
100
5.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Facilitating Awesome Meetings
lara
57
6.6k
Context Engineering - Making Every Token Count
addyosmani
8
340
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
BBQ
matthewcrist
89
9.9k
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!