RAKSUL TechBlog

RAKSULグループのエンジニアが技術トピックを発信するブログです

RubyKaigi 2025 初参加エンジニアのためのRuby静的型付けガイド

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」が紹介されます。
  • 開発者が独自の型絞り込みロジックを定義でき、より柔軟な型チェックが可能に!

rubykaigi.org

📌 Automatically generating types by running tests (sinsoku_listy, JP)

  • テスト実行時に型情報を収集し、RBS 型定義を自動生成する Gem が紹介されます。
  • 既存アプリケーションへの RBS 導入がより簡単に!

rubykaigi.org

📌 Writing Ruby Scripts with TypeProf (mametter, JP)

  • Ruby 3.4 にバンドルされた、Ruby 構文の全範囲をサポートする TypeProf が紹介されます。
  • 実際の経験に基づく活用事例や注意点も共有されます!

rubykaigi.org

📌 From C extension to pure C: Migrating RBS (amomchilov, EN)

  • RBS の実装を C 拡張から pure C に移行した取り組みが紹介されます。
  • Prism、Sorbet、JRuby、TruffleRuby などで RBS の活用が進むと期待されます!

rubykaigi.org

📌 Inline RBS comments for seamless type checking with Sorbet (Morriar, EN)

  • Sorbet を使い、Ruby コードにコメント形式で型情報を埋め込む手法が紹介されます。
  • RBI から RBS への変換ツールなど、両者の連携についても幅広く紹介されます!

rubykaigi.org


おわりに

「動的型付け」やメタプログラミングが Ruby の大きな特長である一方、それらに適切な型付けを行うということは非常に困難です。 だからこそ、Ruby コミュニティの壮大な試みに今後も目が離せません。

RubyKaigi、今年も思いっきり楽しみましょう!