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

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

Tomoya Chiba
September 07, 2023

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

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