RubyKaigi 2025、近づいてきましたね!
ラクスルでは、今年が RubyKaigi 初参加となるエンジニアも多いため、社内で予習会を開催しています。
本記事ではその中から、Rubyの静的型付けに関するトピックをまとめました。
この記事では、以下の点を整理しておきます:
- Ruby の型まわりの全体像と分類(RBS系 / RBI系)
- 各ツールの特徴やメリット・デメリット
- RubyKaigi 2025 における関連セッションの予習
- 実際に導入する際の利用イメージ
はじめに:Ruby における型の考え方
Ruby は「動的型付け」言語として知られ、型を明示せずに柔軟で直感的なコードが書けます。
一方で、大規模開発や長期運用の現場では「型がないことで見逃されるバグ」「リファクタリング時の不安」などが課題になる場面も多くあります。
そうした背景から登場したのが、Ruby に静的型付けを導入する試みです。
型付けアプローチの分類
大きく分けて 2 つの流派があります:
🔷 RBS系(Ruby 公式系 / コードとは別のファイルで型定義)
- RBS (Ruby Signature):Ruby の型情報を扱う言語および、それを扱う Gem(Ruby 本体にバンドル済み)
- Steep:RBS をもとに型チェックを行うツール
- TypeProf:Ruby のコードから RBS を推論するツール
- rbs-inline:コードファイルにコメントとして型を記述し、そこから RBS ファイルを生成できる
🛠 利用イメージ:
- プロダクトコードはそのまま書く
sig/ディレクトリ以下に.rbsファイルを定義steep checkで型チェックを実行 → 実行前にバグを検出typeprofを使えば、既存コードから型を生成できるrbs prototype rbでも既存コードから型を生成可能rbs prototype rbiを使えば、後述の .rbi から .rbs を生成可能rbs prototype runtimeを使えば、ランタイムの型情報から型定義を生成可能- IDE で補完や型チェックを効かせたい場合にも有効
「Ruby 公式の型定義ツールを使いたい」といったニーズに向いています。
🔶 RBI系(Sorbet 系 / コード中に型を直接記述)
- Sorbet:Stripe が開発した型チェッカーとその周辺ライブラリ群
- RBI (Ruby Interface):依存 Gem や Rails、DSL の型定義ファイル(
.rbi) - Tapioca:型定義ファイルを自動生成するツール
🛠 利用イメージ:
- メソッド定義の直前に
sig { params(x: Integer).returns(String) }のような注釈を記述 - CLI で型チェックを実行(
srb tc) sorbet/以下にtapiocaで Gem などの.rbiファイルを生成- 実行時チェックも可能(
T::Struct,T::Enumなど)
「コード中に型注釈を直接書きたい」といったニーズに向いています。
比較表:RBS系 vs Sorbet系
| 項目 | RBS系 (Steep, TypeProf) | Sorbet系 (Sorbet, Tapioca) |
|---|---|---|
| 型定義 | .rbs ファイル |
.rbi ファイル + 注釈 DSL |
| 型チェック方法 | 外部ツール(Steep) | Sorbet CLI |
| 型推論 | TypeProf で対応 | 一部対応(限定的) |
| IDE 連携 | Ruby Language Server など | Sorbet Language Server |
| 実行時型検査 | rbs prototype runtime |
Sorbet のランタイムチェッカー |
| サードパーティ Gem の対応 | rbs collection | Tapioca で自動生成 |
RubyKaigi 2025 関連セッション
以下は、RubyKaigi 2025 における静的型付けに関係が深いセッションです。
Ruby の静的型付けに興味のある方には、特におすすめです!
※内容は RubyKaigi 公式サイトのセッション紹介をもとにした要約です。
📌 Introducing Type Guard to Steep (tk0miya, JP)
- Steep に新たに導入される拡張機能「Type Guard」が紹介されます。
- 開発者が独自の型絞り込みロジックを定義でき、より柔軟な型チェックが可能に!
📌 Automatically generating types by running tests (sinsoku_listy, JP)
- テスト実行時に型情報を収集し、RBS 型定義を自動生成する Gem が紹介されます。
- 既存アプリケーションへの RBS 導入がより簡単に!
📌 Writing Ruby Scripts with TypeProf (mametter, JP)
- Ruby 3.4 にバンドルされた、Ruby 構文の全範囲をサポートする TypeProf が紹介されます。
- 実際の経験に基づく活用事例や注意点も共有されます!
📌 From C extension to pure C: Migrating RBS (amomchilov, EN)
- RBS の実装を C 拡張から pure C に移行した取り組みが紹介されます。
- Prism、Sorbet、JRuby、TruffleRuby などで RBS の活用が進むと期待されます!
📌 Inline RBS comments for seamless type checking with Sorbet (Morriar, EN)
- Sorbet を使い、Ruby コードにコメント形式で型情報を埋め込む手法が紹介されます。
- RBI から RBS への変換ツールなど、両者の連携についても幅広く紹介されます!
おわりに
「動的型付け」やメタプログラミングが Ruby の大きな特長である一方、それらに適切な型付けを行うということは非常に困難です。 だからこそ、Ruby コミュニティの壮大な試みに今後も目が離せません。
RubyKaigi、今年も思いっきり楽しみましょう!