Skip to content

Latest commit

 

History

History
294 lines (216 loc) · 8.1 KB

File metadata and controls

294 lines (216 loc) · 8.1 KB

T-Ruby

T-Ruby

Ruby のための TypeScript スタイルの型

CI Ruby 3.0+ Gem Version Downloads Coverage

インストール   •   クイックスタート   •   機能   •   ロードマップ   •   English   •   한국어

Note

このプロジェクトはまだ実験段階です。このプロジェクトを支持してくださる方は、スターをお願いします!改善のご提案があれば Issue でお知らせください。PR も歓迎します!


T-Ruby とは?

T-Ruby は TypeScript にインスパイアされた Ruby 用の型レイヤーです。 trc という単一の実行ファイルとして提供されます。

型アノテーション付きの .trb ファイルを書き、標準の .rb ファイルにコンパイルします。 型はコンパイル時に削除されます — Ruby が動く場所ならどこでもコードが動作します。

trc hello.trb                  # Ruby にコンパイル

trc コンパイラは Steep や Ruby LSP などのツール用に .rbs シグネチャファイルも生成します。 ランタイムオーバーヘッドなしで、既存の Ruby プロジェクトに段階的に型を導入できます。

trc --watch src/               # ウォッチモード
trc --emit-rbs src/            # .rbs ファイル生成
trc --check src/               # コンパイルなしで型チェックのみ

なぜ T-Ruby なのか?

私たちは Ruby の友であり、今も Ruby を使い続ける Rubyist です。

Ruby がダックタイピングと動的型システムの DNA を持つ言語であることはよく分かっています。 しかし、現実の産業環境で静的型システムが必須になりつつあることも 否定できませんでした。

Ruby エコシステムはこの問題について長年議論してきましたが、 まだ明確な答えを出せていないように思います。

既存のアプローチ

1) Sorbet

  • コードの上にコメントのように型を書きます。
  • まるで JSDoc を書いて IDE がエラーを拾ってくれることを期待するようなものです。
# Sorbet
extend T::Sig

sig { params(name: String).returns(String) }
def greet(name)
  "Hello, #{name}!"
end

2) RBS

  • Ruby 公式のアプローチで、.rbs ファイルは TypeScript の .d.ts のような型定義用の別ファイルです。
  • しかし Ruby では手動で書くか、「暗黙の推論 + 手動修正」に頼る必要があり、依然として面倒です。
# greet.rbs(別ファイル)
def greet: (String name) -> String
# greet.rb(型情報なし)
def greet(name)
  "Hello, #{name}!"
end

T-Ruby

  • TypeScript のように、型がコードの中にあります。
  • .trb で書けば、trc.rb.rbs の両方を生成します。
# greet.trb
def greet(name: String): String
  "Hello, #{name}!"
end
trc greet.trb
# => build/greet.rb
#  + build/greet.rbs

その他...

Crystal のような新しい言語もありますが、厳密には Ruby とは別の言語です。

私たちは今も Ruby を愛しており、 これが Ruby エコシステムからの脱出ではなく、進歩であることを願っています。


インストール

# RubyGems でインストール(推奨)
gem install t-ruby

# ソースからインストール
git clone https://github.com/type-ruby/t-ruby
cd t-ruby && bundle install

インストール確認

trc --version

クイックスタート

1. プロジェクト初期化

trc --init

以下が生成されます:

  • trbconfig.yml — プロジェクト設定ファイル
  • src/ — ソースディレクトリ
  • build/ — 出力ディレクトリ

2. .trb を書く

# src/hello.trb
def greet(name: String): String
  "Hello, #{name}!"
end

puts greet("world")

3. コンパイル

trc src/hello.trb

4. 実行

ruby build/hello.rb
# => Hello, world!

5. ウォッチモード

trc -w           # trbconfig.yml のソースディレクトリを監視(デフォルト: src/)
trc -w lib/      # 特定のディレクトリを監視

ファイル変更時に自動で再コンパイルされます。


設定

trc --init はすべての設定オプションを含む trbconfig.yml ファイルを生成します:

# T-Ruby 設定ファイル
# 参考: https://type-ruby.github.io/docs/getting-started/project-configuration

source:
  include:
    - src
  exclude: []
  extensions:
    - ".trb"
    - ".rb"

output:
  ruby_dir: build
  # rbs_dir: sig  # オプション: .rbs ファイル用の別ディレクトリ
  preserve_structure: true
  # clean_before_build: false

compiler:
  strictness: standard  # strict | standard | permissive
  generate_rbs: true
  target_ruby: "3.0"
  # experimental: []
  # checks:
  #   no_implicit_any: false
  #   no_unused_vars: false
  #   strict_nil: false

watch:
  # paths: []  # 追加の監視パス
  debounce: 100
  # clear_screen: false
  # on_success: "bundle exec rspec"

機能

  • 型アノテーション — パラメータと戻り値の型、コンパイル時に削除
  • ユニオン型String | Integer | nil
  • ジェネリクスUser[], Array<User>, Hash<String, Integer>
  • インターフェース — オブジェクト間の契約を定義
  • 型エイリアスtype UserID = Integer
  • RBS 生成 — Steep、Ruby LSP、Sorbet と連携
  • IDE サポート — VS Code、Neovim + LSP
  • ウォッチモード — ファイル変更時に自動再コンパイル

リンク

IDE サポート

ガイド


ステータス

実験的 — T-Ruby は活発に開発中です。 API が変更される可能性があります。本番環境での使用はまだ推奨しません。

マイルストーン ステータス
型パース & 削除
コア型システム
LSP & IDE サポート
高度な機能

詳細は ROADMAP.md を参照してください。


コントリビュート

コントリビューションを歓迎します!Issue や Pull Request をお気軽にお送りください。

❤️ T-Ruby を支援する

T-Ruby が役立つと思ったら、プロジェクトの継続的な開発と実験を支援するためにスポンサーをご検討ください。

Sponsor

ライセンス

BSD 2-Clause