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
610
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
110
データカタログのアクセスコントロールを考える
mnmandahalf
0
54
COMETA®開発の裏側をご紹介
mnmandahalf
0
970
Railsのマイグレーション、どこまで安全にできるか
mnmandahalf
0
100
よく考えずにRDSを暗号化したら辛かった話
mnmandahalf
0
29
Other Decks in Programming
See All in Programming
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
310
Java 21/25 Virtual Threads 소개
debop
0
300
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
1.2k
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
190
Codex CLI でつくる、Issue から merge までの開発フロー
amata1219
0
240
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.2k
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
310
RailsのValidatesをSwift Macrosで再現してみた
hokuron
0
140
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
440
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
510
ロボットのための工場に灯りは要らない
watany
12
3.2k
20260320登壇資料
pharct
0
140
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.4k
Typedesign – Prime Four
hannesfritz
42
3k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
480
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
140
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Invisible Side of Design
smashingmag
302
51k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
160
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
First, design no harm
axbom
PRO
2
1.1k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
850
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
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!