Ruby のための TypeScript スタイルの型
インストール • クイックスタート • 機能 • ロードマップ • English • 한국어
Note
このプロジェクトはまだ実験段階です。このプロジェクトを支持してくださる方は、スターをお願いします!改善のご提案があれば Issue でお知らせください。PR も歓迎します!
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/ # コンパイルなしで型チェックのみ私たちは 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}!"
end2) RBS
- Ruby 公式のアプローチで、
.rbsファイルは TypeScript の.d.tsのような型定義用の別ファイルです。 - しかし Ruby では手動で書くか、「暗黙の推論 + 手動修正」に頼る必要があり、依然として面倒です。
# greet.rbs(別ファイル)
def greet: (String name) -> String# greet.rb(型情報なし)
def greet(name)
"Hello, #{name}!"
end- TypeScript のように、型がコードの中にあります。
.trbで書けば、trcが.rbと.rbsの両方を生成します。
# greet.trb
def greet(name: String): String
"Hello, #{name}!"
end
trc greet.trb
# => build/greet.rb
# + build/greet.rbsCrystal のような新しい言語もありますが、厳密には Ruby とは別の言語です。
私たちは今も Ruby を愛しており、 これが Ruby エコシステムからの脱出ではなく、進歩であることを願っています。
# RubyGems でインストール(推奨)
gem install t-ruby
# ソースからインストール
git clone https://github.com/type-ruby/t-ruby
cd t-ruby && bundle installtrc --versiontrc --init以下が生成されます:
trbconfig.yml— プロジェクト設定ファイルsrc/— ソースディレクトリbuild/— 出力ディレクトリ
# src/hello.trb
def greet(name: String): String
"Hello, #{name}!"
end
puts greet("world")
trc src/hello.trbruby build/hello.rb
# => Hello, world!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 が役立つと思ったら、プロジェクトの継続的な開発と実験を支援するためにスポンサーをご検討ください。