{"id":33899501,"url":"https://github.com/type-ruby/t-ruby","last_synced_at":"2026-01-13T20:50:42.282Z","repository":{"id":328088037,"uuid":"1112508549","full_name":"type-ruby/t-ruby","owner":"type-ruby","description":"T-Ruby, TypeScript-style types for Ruby language","archived":false,"fork":false,"pushed_at":"2026-01-11T09:32:04.000Z","size":901,"stargazers_count":224,"open_issues_count":7,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-11T14:55:27.336Z","etag":null,"topics":["compiler","programming-language","ruby","t-ruby"],"latest_commit_sha":null,"homepage":"https://type-ruby.github.io/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/type-ruby.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"yhk1038"}},"created_at":"2025-12-08T18:11:36.000Z","updated_at":"2026-01-11T09:47:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/type-ruby/t-ruby","commit_stats":null,"previous_names":["type-ruby/t-ruby"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/type-ruby/t-ruby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/type-ruby%2Ft-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/type-ruby%2Ft-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/type-ruby%2Ft-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/type-ruby%2Ft-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/type-ruby","download_url":"https://codeload.github.com/type-ruby/t-ruby/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/type-ruby%2Ft-ruby/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400325,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","programming-language","ruby","t-ruby"],"created_at":"2025-12-11T22:01:47.160Z","updated_at":"2026-01-13T20:50:42.276Z","avatar_url":"https://github.com/type-ruby.png","language":"Ruby","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://avatars.githubusercontent.com/u/248530250\" alt=\"T-Ruby\" height=\"170\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eT-Ruby\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eRuby のための TypeScript スタイルの型\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/type-ruby/t-ruby/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/type-ruby/t-ruby/ci.yml?label=CI\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/ruby-3.0+-cc342d\" alt=\"Ruby 3.0+\" /\u003e\n  \u003ca href=\"https://rubygems.org/gems/t-ruby\"\u003e\u003cimg src=\"https://img.shields.io/gem/v/t-ruby\" alt=\"Gem Version\" /\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/gem/dt/t-ruby\" alt=\"Downloads\" /\u003e\n  \u003ca href=\"https://coveralls.io/github/type-ruby/t-ruby?branch=main\"\u003e\u003cimg src=\"https://coveralls.io/repos/github/type-ruby/t-ruby/badge.svg?branch=main\" alt=\"Coverage\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#インストール\"\u003eインストール\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#クイックスタート\"\u003eクイックスタート\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#機能\"\u003e機能\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"./ROADMAP.md\"\u003eロードマップ\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"./README.md\"\u003eEnglish\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"./README.ko.md\"\u003e한국어\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e [!NOTE]\n\u003e このプロジェクトはまだ実験段階です。このプロジェクトを支持してくださる方は、スターをお願いします！改善のご提案があれば Issue でお知らせください。PR も歓迎します！\n\n---\n\n## T-Ruby とは？\n\nT-Ruby は TypeScript にインスパイアされた Ruby 用の型レイヤーです。\n`trc` という単一の実行ファイルとして提供されます。\n\n型アノテーション付きの `.trb` ファイルを書き、標準の `.rb` ファイルにコンパイルします。\n型はコンパイル時に削除されます — Ruby が動く場所ならどこでもコードが動作します。\n\n```bash\ntrc hello.trb                  # Ruby にコンパイル\n```\n\n`trc` コンパイラは Steep や Ruby LSP などのツール用に `.rbs` シグネチャファイルも生成します。\nランタイムオーバーヘッドなしで、既存の Ruby プロジェクトに段階的に型を導入できます。\n\n```bash\ntrc --watch src/               # ウォッチモード\ntrc --emit-rbs src/            # .rbs ファイル生成\ntrc --check src/               # コンパイルなしで型チェックのみ\n```\n\n---\n\n## なぜ T-Ruby なのか？\n\n私たちは Ruby の友であり、今も Ruby を使い続ける Rubyist です。\n\nRuby がダックタイピングと動的型システムの DNA を持つ言語であることはよく分かっています。\nしかし、現実の産業環境で静的型システムが必須になりつつあることも\n否定できませんでした。\n\nRuby エコシステムはこの問題について長年議論してきましたが、\nまだ明確な答えを出せていないように思います。\n\n### 既存のアプローチ\n\n**1) Sorbet**\n- コードの上にコメントのように型を書きます。\n- まるで JSDoc を書いて IDE がエラーを拾ってくれることを期待するようなものです。\n\n```ruby\n# Sorbet\nextend T::Sig\n\nsig { params(name: String).returns(String) }\ndef greet(name)\n  \"Hello, #{name}!\"\nend\n```\n\n**2) RBS**\n- Ruby 公式のアプローチで、`.rbs` ファイルは TypeScript の `.d.ts` のような型定義用の別ファイルです。\n- しかし Ruby では手動で書くか、「暗黙の推論 + 手動修正」に頼る必要があり、依然として面倒です。\n\n```rbs\n# greet.rbs（別ファイル）\ndef greet: (String name) -\u003e String\n```\n\n```ruby\n# greet.rb（型情報なし）\ndef greet(name)\n  \"Hello, #{name}!\"\nend\n```\n\n### T-Ruby\n- TypeScript のように、型がコードの中にあります。\n- `.trb` で書けば、`trc` が `.rb` と `.rbs` の両方を生成します。\n\n```trb\n# greet.trb\ndef greet(name: String): String\n  \"Hello, #{name}!\"\nend\n```\n\n```bash\ntrc greet.trb\n# =\u003e build/greet.rb\n#  + build/greet.rbs\n```\n\n### その他...\n**Crystal** のような新しい言語もありますが、厳密には Ruby とは別の言語です。\n\n私たちは今も Ruby を愛しており、\nこれが Ruby エコシステムからの**脱出ではなく、進歩**であることを願っています。\n\n---\n\n## インストール\n\n```bash\n# RubyGems でインストール（推奨）\ngem install t-ruby\n\n# ソースからインストール\ngit clone https://github.com/type-ruby/t-ruby\ncd t-ruby \u0026\u0026 bundle install\n```\n\n### インストール確認\n\n```bash\ntrc --version\n```\n\n---\n\n## クイックスタート\n\n### 1. プロジェクト初期化\n\n```bash\ntrc --init\n```\n\n以下が生成されます：\n- `trbconfig.yml` — プロジェクト設定ファイル\n- `src/` — ソースディレクトリ\n- `build/` — 出力ディレクトリ\n\n### 2. `.trb` を書く\n\n```trb\n# src/hello.trb\ndef greet(name: String): String\n  \"Hello, #{name}!\"\nend\n\nputs greet(\"world\")\n```\n\n### 3. コンパイル\n\n```bash\ntrc src/hello.trb\n```\n\n### 4. 実行\n\n```bash\nruby build/hello.rb\n# =\u003e Hello, world!\n```\n\n### 5. ウォッチモード\n\n```bash\ntrc -w           # trbconfig.yml のソースディレクトリを監視（デフォルト: src/）\ntrc -w lib/      # 特定のディレクトリを監視\n```\n\nファイル変更時に自動で再コンパイルされます。\n\n---\n\n## 設定\n\n`trc --init` はすべての設定オプションを含む `trbconfig.yml` ファイルを生成します：\n\n```yaml\n# T-Ruby 設定ファイル\n# 参考: https://type-ruby.github.io/docs/getting-started/project-configuration\n\nsource:\n  include:\n    - src\n  exclude: []\n  extensions:\n    - \".trb\"\n    - \".rb\"\n\noutput:\n  ruby_dir: build\n  # rbs_dir: sig  # オプション: .rbs ファイル用の別ディレクトリ\n  preserve_structure: true\n  # clean_before_build: false\n\ncompiler:\n  strictness: standard  # strict | standard | permissive\n  generate_rbs: true\n  target_ruby: \"3.0\"\n  # experimental: []\n  # checks:\n  #   no_implicit_any: false\n  #   no_unused_vars: false\n  #   strict_nil: false\n\nwatch:\n  # paths: []  # 追加の監視パス\n  debounce: 100\n  # clear_screen: false\n  # on_success: \"bundle exec rspec\"\n```\n\n---\n\n## 機能\n\n- **型アノテーション** — パラメータと戻り値の型、コンパイル時に削除\n- **ユニオン型** — `String | Integer | nil`\n- **ジェネリクス** — `User[]`, `Array\u003cUser\u003e`, `Hash\u003cString, Integer\u003e`\n- **インターフェース** — オブジェクト間の契約を定義\n- **型エイリアス** — `type UserID = Integer`\n- **RBS 生成** — Steep、Ruby LSP、Sorbet と連携\n- **IDE サポート** — VS Code、Neovim + LSP\n- **ウォッチモード** — ファイル変更時に自動再コンパイル\n\n---\n\n## リンク\n\n**IDE サポート**\n- [VS Code 拡張 (および Cursor)](https://github.com/type-ruby/t-ruby-vscode)\n- [JetBrains プラグイン](https://github.com/type-ruby/t-ruby-jetbrains)\n- [Vim / Neovim](https://github.com/type-ruby/t-ruby-vim)\n\n**ガイド**\n- [シンタックスハイライト](./docs/syntax-highlighting/ja/guide.md)\n\n---\n\n## ステータス\n\n\u003e **実験的** — T-Ruby は活発に開発中です。\n\u003e API が変更される可能性があります。本番環境での使用はまだ推奨しません。\n\n| マイルストーン | ステータス |\n|---------------|----------|\n| 型パース \u0026 削除 | ✅ |\n| コア型システム | ✅ |\n| LSP \u0026 IDE サポート | ✅ |\n| 高度な機能 | ✅ |\n\n詳細は [ROADMAP.md](./ROADMAP.md) を参照してください。\n\n---\n\n## コントリビュート\n\nコントリビューションを歓迎します！Issue や Pull Request をお気軽にお送りください。\n\n## ❤️ T-Ruby を支援する\n\nT-Ruby が役立つと思ったら、プロジェクトの継続的な開発と実験を支援するためにスポンサーをご検討ください。\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sponsors/type-ruby\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Sponsor-❤️-ea4aaa\" alt=\"Sponsor\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## ライセンス\n\n[BSD 2-Clause](./LICENSE)\n","funding_links":["https://github.com/sponsors/yhk1038","https://github.com/sponsors/type-ruby"],"categories":["Ruby"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftype-ruby%2Ft-ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftype-ruby%2Ft-ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftype-ruby%2Ft-ruby/lists"}