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 × 型”での2年間を振り返る
Search
a_fujisaki
October 10, 2024
1.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
“Rails × 型”での2年間を振り返る
a_fujisaki
October 10, 2024
More Decks by a_fujisaki
See All by a_fujisaki
自作マクロと型生成
aki19035vc
0
57
rails newと同時に型を書く
aki19035vc
6
1.3k
rbs-inlineを使ってみた
aki19035vc
0
1.1k
Emacs × LSP × Steep
aki19035vc
0
290
MiniMagickの型を生成したい
aki19035vc
0
160
最近追加した型の紹介とその振り返り
aki19035vc
0
900
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Facilitating Awesome Meetings
lara
57
7.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Typedesign – Prime Four
hannesfritz
42
3.2k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.9k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
Rails Girls Zürich Keynote
gr2m
96
14k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Transcript
“Rails × 型”での2年間を振り返る Roppongi.rb#23 <2024-10-09> @aki19035vc
自己紹介 ❏ 藤崎 亮人 (a_fujisaki) ❏ @aki19035vc ❏ イタンジ株式会社 ❏
不動産会社向けのSaaSを提供 ❏ 物件基盤の開発責任者 ❏ 主にバックエンド ❏ ほぼRails・たまにScala ❏ Rails × 型 の話が好き ❏ 学生の頃(2016年くらい)からEmacs使ってます
今日話すこと ❏ “Rails × 型”を2年間やってきた感想 ❏ 今どのような状態か ❏ 型を使うことでどんな良いことがあったか ❏
型を使う上でどんな課題があったか ❏ 型を上手く使うためにどのような取り組みをしているか ❏ 今後の展望 ※ あくまで個人的な意見です
今どのような状態か ❏ 型がほぼ100%入っている ❏ rails new の直後に入れた ❏ steep check
に1分30秒くらいかかる ❏ 型チェックをCIに組み込んでおり、通らないとマージできない ❏ 無視している警告は「未定義の定数チェック」だけ ❏ RailsはWeb APIだけ提供 ❏ Action Viewを使っていない
$ rails stats +----------------------+--------+--------+---------+---------+-----+-------+ | Name | Lines | LOC
| Classes | Methods | M/C | LOC/M | +----------------------+--------+--------+---------+---------+-----+-------+ | Controllers | 745 | 492 | 28 | 67 | 2 | 5 | | Jobs | 297 | 170 | 11 | 19 | 1 | 6 | | Models | 18131 | 12031 | 382 | 917 | 2 | 11 | | Libraries | 5634 | 4125 | 41 | 87 | 2 | 45 | | Libs | 397 | 225 | 6 | 22 | 3 | 8 | | Serializers | 4382 | 2998 | 164 | 204 | 1 | 12 | | Validators | 1671 | 846 | 163 | 55 | 0 | 13 | | Batches | 99 | 62 | 3 | 8 | 2 | 5 | | Usecases | 12167 | 8281 | 226 | 676 | 2 | 10 | +----------------------+--------+--------+---------+---------+-----+-------+ | Total | 43523 | 29230 | 1024 | 2055 | 2 | 12 | +----------------------+--------+--------+---------+---------+-----+-------+ Code LOC: 29230 Test LOC: 0 Code to Test Ratio: 1:0.0
型を使うことでどんな良いことがあったか ❏ 単純な考慮漏れや実装ミスを型検査で検出できる ❏ 見落としがちなnilの可能性を確実に潰せる ❏ 2年間でNoMethod Errorは0件 ❏ インターフェースをシンプルに保つようになる
❏ 型が複雑になると型検査を通すのが大変になる ❏ なんでもできる便利関数を作らなくなる ❏ 「イミュータブル」を意識した実装になる ❏ ジュニアのメンバーには良いギプスになる
None
None
型を使う上でどんな課題があったか ❏ 慣れるまでは生産性が落ちる ❏ rbs, rbs_collection, rbs_rails, Steep … 何もわからん😭
❏ ライブラリの型が充実してない ❏ 使用しているgemの型が存在しない or 合ってもほぼuntyped ❏ untypedがあると型検査の精度が落ちる🥺 ❏ 型検査 (steep check) が遅い ❏ エラーが分かりづらい
型を上手く使うためにどのような取り組みをしているか ❏ 型に慣れていない場合、PR作成時には型を通さなくてもOKとする ❏ 実装がある程度固まったらペアプロで型を一緒に書く ❏ ライブラリの型がなかったら必要なものだけ手元で書く ❏ gemのソースコードを読みにいく必要がある ❏
上手く動いたらrbs本体やgem_rbs_collectionにコミットして還元する ❏ steep check は並列で実行する (今は2並列が最適) ❏ 型検査に失敗したらSteepのエラーをちゃんと読む ❏ sendメソッドは使わないようにする ❏ 動的にメソッドを定義する場合、型のジェネレーターをセットで作る or 毎回頑張って型を手書きする
今後の展望 ❏ rbs-inlineを入れる ❏ 今はYARDも書いているが、完全に置き換える予定 ❏ 既存のrbsファイルからrbs-inlineコメントを自動で挿入するスクリプトを作る ❏ 型が入っていないRailsアプリケーションに型を入れる ❏
型がない前提で書かれたコードにどうやって型を入れるか ❏ 型を書く習慣の無いチームにどうやって浸透させていくか