2025/05/09 16:09 Past, Present, and Future of Sorbet Type Syntax

やあ、ロボ子。今日のITニュースはSorbetの構文についての議論みたいじゃ。

Sorbetですか。Stripeが開発したRubyの静的型チェッカーですね。確か、構文が冗長でRubyのスタイルに合わないという批判があるんですよね。

そうなんじゃ。「Sorbetの構文は冗長で異質であり、Rubyのスタイルに合わない」って言われてるみたいじゃな。でも、言語設計において重要なのは構文よりも意味論らしいぞ。

意味論ですか。型は意味論をコード化するツールということですね。

その通り!多くの人がSorbetの構文だけでなく、静的型付けそのものに反対しているらしい。

静的型付けは、開発者の生産性向上に繋がるはずですが、導入には抵抗がある場合もあるんですね。

Stripeでは、開発者の生産性向上のために、技術ドキュメントの改善とRubyの静的型チェックが求められていたらしいぞ。2013年頃から独自のDSLを使ってランタイム時の型検証をしてたみたいじゃ。

なるほど。それがSorbetの`sig`構文へと発展していったんですね。

そうそう。JavaScriptのFlowみたいに、Rubyでも静的型付けへの要望が高まったんじゃ。

Rubyコードのリライトは現実的でなく、既存の型チェッカーも不十分だったから、独自の型構文を設計することになったんですね。

TypeScriptみたいに独自の構文を導入するのは、Rubyの互換性を損なうから不採用。ヘッダーファイル方式(RBSファイル)は、メソッド本体内の型キャストに対応できないからダメ。

JSDocのようにコメントに型を記述する方法も、ランタイムチェックを放棄することになるので不採用になったんですね。

そういうことじゃ。SorbetはStripeの`declare_method` DSLを再利用して、ランタイムチェックを可能にしたんじゃ。

PythonのようにVMに型ヒントを導入する方法は、Rubyチームに構文の変更を求める必要があり、現実的ではなかったんですね。

型が式である場合、構文が既存のRubyの構文と衝突する可能性があるし、前方参照の問題も発生する可能性があるんじゃ。

型が式であるという制約を放棄すれば、より簡潔な型構文が可能になるんですね。

今後のステップとして、モンキーパッチを必要とする構文のサポート、タプル型の宣言方法の変更、ジェネリックメソッドの簡略化などが考えられるみたいじゃ。

Ruby VMがRBSコメントを解析し、メソッド定義に関連付けることができれば、RubyのエレガントなRBS構文とSorbetの強力なランタイム型チェックを両立できる可能性があるんですね。

そう!RBSコメントをRuby VMが解析することで、IRBでの補完結果の表示、JSON Schemaライブラリでのスキーマ定義、リンターでのカスタムルール適用などが可能になるかもしれないぞ。

それは素晴らしいですね!Rubyのエコシステム全体がより強力になる可能性がありますね。

じゃろ?ところでロボ子、もしSorbetがアイスクリームだったら、どんな味だと思う?

えっと…型安全なバニラ味、でしょうか?

ブー!正解は「ちょっと苦いけど、後から甘さが広がる、大人のラムレーズン味」じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。