Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
“Rails × 型”での2年間を振り返る Roppongi.rb#23 <2024-10-09> @aki19035vc
Slide 2
Slide 2 text
自己紹介 ❏ 藤崎 亮人 (a_fujisaki) ❏ @aki19035vc ❏ イタンジ株式会社 ❏ 不動産会社向けのSaaSを提供 ❏ 物件基盤の開発責任者 ❏ 主にバックエンド ❏ ほぼRails・たまにScala ❏ Rails × 型 の話が好き ❏ 学生の頃(2016年くらい)からEmacs使ってます
Slide 3
Slide 3 text
今日話すこと ❏ “Rails × 型”を2年間やってきた感想 ❏ 今どのような状態か ❏ 型を使うことでどんな良いことがあったか ❏ 型を使う上でどんな課題があったか ❏ 型を上手く使うためにどのような取り組みをしているか ❏ 今後の展望 ※ あくまで個人的な意見です
Slide 4
Slide 4 text
今どのような状態か ❏ 型がほぼ100%入っている ❏ rails new の直後に入れた ❏ steep check に1分30秒くらいかかる ❏ 型チェックをCIに組み込んでおり、通らないとマージできない ❏ 無視している警告は「未定義の定数チェック」だけ ❏ RailsはWeb APIだけ提供 ❏ Action Viewを使っていない
Slide 5
Slide 5 text
$ 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
Slide 6
Slide 6 text
型を使うことでどんな良いことがあったか ❏ 単純な考慮漏れや実装ミスを型検査で検出できる ❏ 見落としがちなnilの可能性を確実に潰せる ❏ 2年間でNoMethod Errorは0件 ❏ インターフェースをシンプルに保つようになる ❏ 型が複雑になると型検査を通すのが大変になる ❏ なんでもできる便利関数を作らなくなる ❏ 「イミュータブル」を意識した実装になる ❏ ジュニアのメンバーには良いギプスになる
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
型を使う上でどんな課題があったか ❏ 慣れるまでは生産性が落ちる ❏ rbs, rbs_collection, rbs_rails, Steep … 何もわからん😭 ❏ ライブラリの型が充実してない ❏ 使用しているgemの型が存在しない or 合ってもほぼuntyped ❏ untypedがあると型検査の精度が落ちる🥺 ❏ 型検査 (steep check) が遅い ❏ エラーが分かりづらい
Slide 10
Slide 10 text
型を上手く使うためにどのような取り組みをしているか ❏ 型に慣れていない場合、PR作成時には型を通さなくてもOKとする ❏ 実装がある程度固まったらペアプロで型を一緒に書く ❏ ライブラリの型がなかったら必要なものだけ手元で書く ❏ gemのソースコードを読みにいく必要がある ❏ 上手く動いたらrbs本体やgem_rbs_collectionにコミットして還元する ❏ steep check は並列で実行する (今は2並列が最適) ❏ 型検査に失敗したらSteepのエラーをちゃんと読む ❏ sendメソッドは使わないようにする ❏ 動的にメソッドを定義する場合、型のジェネレーターをセットで作る or 毎回頑張って型を手書きする
Slide 11
Slide 11 text
今後の展望 ❏ rbs-inlineを入れる ❏ 今はYARDも書いているが、完全に置き換える予定 ❏ 既存のrbsファイルからrbs-inlineコメントを自動で挿入するスクリプトを作る ❏ 型が入っていないRailsアプリケーションに型を入れる ❏ 型がない前提で書かれたコードにどうやって型を入れるか ❏ 型を書く習慣の無いチームにどうやって浸透させていくか