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

Sorbetやっていき(たい)宣言

Avatar for Tomoya Chiba Tomoya Chiba
September 07, 2023

 Sorbetやっていき(たい)宣言

Avatar for Tomoya Chiba

Tomoya Chiba

September 07, 2023
Tweet

More Decks by Tomoya Chiba

Other Decks in Programming

Transcript

  1. 千葉 知也 (@tomoasleep) Qiita 株式会社 エンジニア 勤務地は五反田と自宅です 2022/12 入社 (2

    度目) 社内の技術をいい感じにする仕事をしています SNS (?) https://twitter.com/nemunemu3desu https://qiita.com/tomoasleep 自己紹介 2
  2. https://sorbet.org/ RBS, Steep とはまた別の Ruby 用の静的型付けシステム Gradual Typing が行える Stripe

    が開発している 型チェッカー自体は C++ で実装されていて高速 Stripe, Shopify などが採用している Sorbet に注目している 4
  3. # typed: true extend T::Sig sig { params(a: Integer, b:

    Integer).returns(Integer) } def sum(a, b) = a + b sum(1, "hoge") # => TypeError Sorbet の DSL を使って型を書く 実行時のアサーションも行える ( 任意) 簡単 Sorbet 入門 (1) - コード中の型の書き方 5
  4. # typed: true class Calculator sig { params(a: Integer, b:

    Integer).returns(Integer) } def sum(a, b); end end .rbi ファイル .rbs, .d.ts みたいな存在 ライブラリやメタプログラミングした型を、書いたり生成したりする 実行時は読まれない 文法自体は Ruby と同じ 簡単 Sorbet 入門 (2) - RBI ファイル 6
  5. いわゆる DefinitelyTyped 的な場所から型を取ってきてくれる https://github.com/Shopify/rbi-central Rails でよく使う gem が中心で、まだ数自体は多くない gem のコードや実行時情報を解析して、型を生成することも出来る

    (!?) どういう定数、method があるかとかを、結構収集してくれる included, class_methods とかも見てる 基本的に untyped になる Tapioca で gem の型を生成する 15
  6. DSL, メタプロしたコードの型を生成する機構 (DSL compiler) いくつか内蔵してる (Rails 向けなど) 他、自分でも作れる コードを実際に読み込んで解析を行い、型定義 (RBI)

    を出力する メタプログラミング、DSL に近いところがあるので、この辺慣れてる人 はスッとやれると思う 詳しくは… Tapioca の DSL compiler のしくみ - Qiita DSL などを使うコードの型を生成する : DSL compiler 18
  7. 型生成 (Tapioca) が偉い 型をある程度生成してくれるので、準備が楽 Language Server の恩恵がデカい 文法に癖はあるが慣れる ( 個人の感想)

    微妙に悩ましいこともちょこちょこある delegate が全部 untyped になる 再帰的な type alias が書けない RSpec のテストの型付けにくい メソッド呼び出しに対して Controll Flow 解析が効かない やっている感触 22