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
67
“Rails × 型”での2年間を振り返る
aki19035vc
2
1.3k
rbs-inlineを使ってみた
aki19035vc
0
1.1k
Emacs × LSP × Steep
aki19035vc
0
310
MiniMagickの型を生成したい
aki19035vc
0
180
最近追加した型の紹介とその振り返り
aki19035vc
0
930
Other Decks in Programming
See All in Programming
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
小さなアプリを作って公開するまで
onozaty
0
150
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
420
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
310
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
360
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
150
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
240
Seven New Principles of Software Engineering
yegor256
0
470
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
420
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
5
810
オーケストレーション記述言語 Katari
yukikurage
0
240
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.5k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
450
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Paper Plane (Part 1)
katiecoart
PRO
2
12k
The SEO Collaboration Effect
kristinabergwall1
1
620
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
560
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
830
So, you think you're a good person
axbom
PRO
2
2.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
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を入れて少し設定するだけ