メインコンテンツまでスキップ

T-Ruby のご紹介

Ruby 向けの TypeScript スタイル静的型システム、T-Ruby をご紹介します。

T-Ruby は、TypeScript 開発者にとって馴染みのある開発体験を Ruby 開発者に提供し、コードに直接型アノテーションを追加して、ランタイム前に型エラーを検出できるようにします。

主な機能

  • TypeScript スタイルの構文: TypeScript 開発者に馴染みのある型アノテーション構文
  • 段階的な型付け: 既存の Ruby コードベースに段階的に型を追加可能
  • RBS 生成: .rbs シグネチャファイルの自動生成
  • ゼロランタイムオーバーヘッド: コンパイル時に型が削除される

はじめに

T-Ruby をインストールして、Ruby コードに型を追加しましょう:

gem install t-ruby

最初の .trb ファイルを作成します:

def greet(name: String): String
"Hello, #{name}!"
end

Ruby にコンパイル:

trc greet.trb

詳細については、ドキュメントをご覧ください!

型推論:少なく書いて、より多く型付け

T-Rubyがコードから戻り値の型を自動的に推論するようになりました。明らかな型に対して明示的なアノテーションは不要です!

新機能

以前は、こう書く必要がありました:

def greet(name: String): String
"Hello, #{name}!"
end

今では、戻り値の型はオプションです:

def greet(name: String)
"Hello, #{name}!"
end

T-RubyはgreetStringを返すと推論し、正しいRBSを生成します:

def greet: (name: String) -> String

動作原理

新しい型推論エンジンはメソッド本体を分析して戻り値の型を決定します:

  • リテラル推論"hello"String42Integer
  • メソッド呼び出しの追跡str.upcaseString
  • 暗黙的な戻り値:Rubyの最後の式が戻り値の型になる
  • 条件文の処理if/else分岐からのユニオン型

シンプルなメソッド

class Calculator
def double(n: Integer)
n * 2
end

def is_positive?(n: Integer)
n > 0
end
end

生成されたRBS:

class Calculator
def double: (n: Integer) -> Integer
def is_positive?: (n: Integer) -> bool
end

インスタンス変数

class User
def initialize(name: String)
@name = name
end

def greeting
"Hello, #{@name}!"
end
end

生成されたRBS:

class User
@name: String

def initialize: (name: String) -> void
def greeting: () -> String
end

技術的詳細

推論システムはTypeScriptのアプローチに触発されています:

  • BodyParser:T-Rubyメソッド本体をIRノードにパース
  • TypeEnv:変数型追跡のためのスコープチェーンを管理
  • ASTTypeInferrer:遅延評価とキャッシングでIRを走査

実装の詳細については、技術ブログ記事をご覧ください。

今すぐ試す

最新のT-Rubyにアップデートして、自動型推論をお楽しみください:

gem update t-ruby

既存のコードは以前と同じように動作します - 明示的な型は引き続き優先されます。推論は戻り値の型が省略された場合にのみ機能します。

フィードバック

型推論の使用経験をお聞きしたいです。エッジケースを見つけましたか?提案がありますか?GitHubでイシューを開いてください。

ハッピータイピング!