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
rails newと同時に型を書く
Search
a_fujisaki
January 09, 2025
Programming
1.3k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
rails newと同時に型を書く
a_fujisaki
January 09, 2025
More Decks by a_fujisaki
See All by a_fujisaki
自作マクロと型生成
aki19035vc
0
61
“Rails × 型”での2年間を振り返る
aki19035vc
2
1.2k
rbs-inlineを使ってみた
aki19035vc
0
1.1k
Emacs × LSP × Steep
aki19035vc
0
300
MiniMagickの型を生成したい
aki19035vc
0
170
最近追加した型の紹介とその振り返り
aki19035vc
0
910
Other Decks in Programming
See All in Programming
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
430
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.1k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
460
Domain-Driven Transformation
hschwentner
2
2.3k
気持ちぃ〜角丸 Squircle
ryu1013
0
310
APNsからLive Activityを開始する話
yumnumm
0
170
AmebaブログはKMPから卒業します
kmars0605
0
190
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
890
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
Exploring anti-patterns in Rails
aemeredith
4
540
The Invisible Side of Design
smashingmag
301
52k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
620
Odyssey Design
rkendrick25
PRO
2
870
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
600
Transcript
rails newと同時に型を書く Roppongi.rb#26 <2025-01-09> @aki19035vc
自己紹介 ❏ 藤崎 亮人 (a_fujisaki) ❏ @aki19035vc ❏ イタンジ株式会社 ❏
不動産会社向けのSaaSを提供 ❏ バックエンドエンジニア ❏ ほぼRails・たまにScala ❏ Next.js(Typescript)始めました ❏ 物件基盤の開発責任者 ❏ Rails × 型 の話が好き ❏ 学生の頃(2016年くらい)からEmacs使ってます
イントロ ❏ Railsで型を書くコツは最初から型を書いておくこと ❏ rails new と同時に型を導入する方法を紹介します ❏ サンプルのrailsアプリケーション ❏
https://github.com/aki19035vc/rails_with_rbs_202501 ❏ 各種バージョン(2025年1月時点で利用できる最新のもの) ❏ rails: 8.0.1 ❏ rbs: 3.8.1 ❏ rbs-inline: 0.10.0 ❏ rbs_rails: 0.12.1 ❏ steep: 1.9.3
rails new ❏ シンプルなAPIサーバー ❏ minimalオプションつけてもCIとかkamalとかsolid-xxxとかの設定ファイルが作 られる ❏ 不要なのでスキップ
scaffoldで最低限の体裁を整える ❏ scaffoldで最低限の体裁を整える ❏ migration, model, controller, routes, test とか全部作られる
型チェック用の gemを追加する ❏ Gemfileに3つのgemを追記してbundle install ❏ rbs-inline ❏ rbs(rubyの型定義)をソースコード内にコメントでかけるようにする gem
❏ rbs_rails ❏ ActiveRecordで動的に定義される型を生成する gem ❏ steep ❏ 実際に型チェックするgem
gemの型をローカルにダウンロード ❏ init ❏ rbs_collection.yamlをプロジェクトルートに生成する ❏ 型情報のダウンロード先とか諸々の設定ファイル ❏ install ❏
使用しているgemをGemfileから読み取り、プロジェクトルートの .gem_rbs_colleciton ディレクトリにダウンロードする
steepの設定 ❏ プロジェクトルートにSteepfileが生成される ❏ たくさんコメントが書かれている(左)が、シンプル (右)な設定に書き換える
rbs_railsのrakeタスクを作成 ❏ ActiveRecordで動的に定義される型を生成するrakeタスクを定義 ❏ デフォルトは rbs_rails:all というタスク名 ❏ https://github.com/aki19035vc/rails_with_rbs_202501/blob/8ab28bb320d69daacc4cc3532257f5f09a 633608/lib/tasks/rbs.rake
❏ 型情報はsig/rbs_rails ディレクトリ以下に出力される ❏ https://github.com/aki19035vc/rails_with_rbs_202501/tree/main/sig/rbs_rails
rbs-inlineで型定義を生成 ❏ app ディレクトリ以下のrubyファイルを読み込み、型定義を生成する ❏ 通常は # rbs_inline: enabled (マジックコメント)が付与されたファイルが対象
❏ 出力先は sig/rbs_inline/app ディレクトリ ❏ https://github.com/aki19035vc/rails_with_rbs_202501/tree/main/sig/rbs_inline/app ❏ --opt-out オプションでマジックコメントを付与しなくてもよくなる
型チェック!! ❏ 型の導入は完了 ❏ コントローラーの型を書いてないので書く必要あり ❏ モデルには何もメソッドを実装していないので書く必要なし
コントローラーに型を書く ❏ メソッドの上にコメントで型定義を記述 ❏ インスタンス変数 @posts @post にも型を 書く https://github.com/aki19035vc/rails_with_rbs_202501/blob/main
/app/controllers/posts_controller.rb
型チェック用の rakeタスクを用意 rails typecheck というコマンド一つで型 チェックを実行できるようにする ❏ rbs-inline・rbs_rails での生成 ❏
steep check を実行 https://github.com/aki19035vc/rails_with_rbs_202501/ blob/main/lib/tasks/rbs.rake
型チェック & カバレッジ
まとめ ❏ Railsで型を書くコツは最初から型を書いておくこと ❏ ミニマムな状態からなら型の導入はすぐできる ❏ rbs-inline, rbs_rails, steep という3つのgemを入れて少し設定するだけ