Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Type on Rails - Railsアプリケーションの安全性と開発体験を型で革新する

kazzix
October 26, 2024
1k

Type on Rails - Railsアプリケーションの安全性と開発体験を型で革新する

kazzix

October 26, 2024
Tweet

Transcript

  1. 9/62 u 式の意味が一目でわかA u コードジャンプ(Go To Definition, Go To Reference'

    u 意図しない動作の変化に気づけA u 補完がされA u 意図しないシステムへの入力に気付けA u より構造化されたプログラムが書きやすい 9/47
  2. RBI (RuBy Interface) D 型定義用のDS3 D Rubyのサブセッ# D Rubyの中にも、別のファイルにも書ける Sorbet

    D RBIのための型検査c D Strip` D ランタイムがある Tapioca D RBI・Sorbetの補助ツー… D Shopify 19/47
  3. RBI・Sorbetをなぜ採用し たのか @ 信頼E @ ShopifyやStripeによる実d @ 型検査の速度が早i @ LSPでリアルタイムに型検査の結果がわかr

    @ CIも数万行のコードベースに対して数S @ 型定義がファイル内にかける* *rbs-inlineなども今はある 21/47
  4. Code LOC 13k, モデル173 Code LOC 14k, モデル数159 Code LOC

    24k, モデル数252 実際導入した時のDiff RBIのdiff抜き(ファイル数にはカウント) 26/47 慣れれば、モデル数200以下ぐらいなら2、3日ぐらい?
  5. SorbetのStrictness levelについて ファイル単位で指定できる 8 ignor6 8 fals6 8 tru6 8

    stric1 8 strong 最初は、基本trueかfalseがおすすめ 30/47
  6. LSPでエディターからSorbetを動かす Sorbet bundle exec srb tc --lsp Docker Network Editor

    ・・・ Imageは同じ LSP 32/47 Ruby LSP Ruby LSPも動くと便ˆ … RuboCo‘ … オートフォーマット
  7. CIでチェックする a sorbet tE a 型チェック(Type Check9 a tapioca dsl

    --verify, tapioca gems --verifS a 自動生成したRBIが正しい a tapioca check-shimA a RBIに重複がないか 33/47
  8. 型は内側からつけていく GD lib/, app/lib8 7D ModeA )D (あるなら)Service, FormObjec D

    Controller よく使われるメソッド・自明ではないメソッドから型をつけs Q 効果・恩恵が大きい 37/47
  9. Tapioca DSL Compiler E DSL Compilerは単一のものではなく仕組2 E Rubyを実際に読み込んで型を生成す E 簡単に実装できる

    3 DSL Compiler 35/47 生成対象のClass, Moduleの選択 生成対象のClass, Moduleを実際に参照して型生成をRubyでできる 1 concern 2 model
  10. 44/47 F 現4 F Result7 F Option7 F 直和7 F

    Sealed Subclassesによるエミュレート。Scalaと同じ手C F 色々足したい Result型はSorbetにはない Result型やその他便利な型などを定義するGem、mangroveを作った