コンテンツにスキップ

最小の Ruby 型チェッカー chibirigor を作りながら学ぶ

最小のRuby型チェッカーchibirigorを、手を動かして作りながら学ぶオンラインチュートリアルです。

chibivueというVue.jsを小さく作り直して学ぶ本に倣って、ここではRuby向けの漸進的型チェッカーであるRigorを小さく作り直して学びます。

数十〜数百行のRubyを書きながら、次の問いに自分の手で答えられるようになります:

  • 型チェッカーは、ソースコードからどうやって型を「推論」するのか。
  • なぜRigorは「型の付かないコード」を拒まず、それでも矛盾だけを報告できるのか。
  • 「動くコードを脅かさない(never frighten working code)」とは、設計としてどういうことか。

読み終えると、check(型診断)とannotate(推論した型の表示)が動く小さな型チェッカーが手元に残り、本物のRigorのソースを読む足がかりが得られます。

  • Ruby中級者:クラス、モジュール、case/when、ブロックを普通に読み書きできること。
  • 型システムの理論知識は不要(前編)。前編の本体で使う概念は、その都度やさしく導入します。
  • 前提とするのはRubyだけ。数式や証明は前編では使いません(後編で扱います)。

Schemeの名著(The Little Schemer / The Seasoned Schemer)にならい、二巻に分かれています。

  • 前編 = The Little chibirigorlittle/):やさしい導入。check/annotateが動く最小実装をPart 0〜9で作り切ります。コードは前編だけで動き切り、形式的な理論は後編へ譲ります。
  • 後編 = The Seasoned chibirigorseasoned/):熟練編。前編で作ったものの裏側を、形式の言葉で読み解く巻です(双方向型付け、部分型と変性、ジェネリクス、再帰型、型推論、FactStore、健全性)。記法と用語を扱います。

どちらから読んでもよいですが、初めてなら前編 → 後編の順を勧めます。

各章は、小さな三つの視点(パースペクティブ)から書かれています。「① 型理論 ↔ ② Ruby/RBS ↔ ③ Rigor実装」を重ね合わせる構成です(くわしくはPart 0で)。

各章末には、手を動かして確かめるための演習があります。巻末に用語集(glossary.md)と、巻をまたぐ参照情報をまとめた付録(appendix/)も用意しました。

型理論をもう一段深く覗きたい方のために、各章の脇に参考書メモを添えます。どちらも必読ではありません(無くても本書だけで完結します)。

対応早見表は付録a4に一元化しています。

Ruby 3.4以降(パーサのPrismが同梱)があれば動きます。テストフレームワークも使いません。

Terminal window
$ git clone <このリポジトリ>
$ cd chibirigor
$ ruby exe/chibirigor check path/to/file.rb # 型診断
$ ruby exe/chibirigor annotate path/to/file.rb # 推論型の表示

本文のコードを写経していくなら、自分の作業ディレクトリにlib/を作り、章ごとにファイルを育てていけば十分です。各章のコードはすべて、実際のPrism/Rubyで動作することを確認しています。

Partテーマ
0はじめに:推論を土台にした型チェッカー
1リテラルと算術
2メソッド送信とディスパッチ
3ローカル変数と不変Scope
4型が一本に決まらないUnion
5場合分けで型を絞るナローイング
6ハッシュと配列の型
7受理判定と三値
8RBSと型シグネチャ
9gradualの哲学(最終章)

後編The Seasoned chibirigor(読み解く)

Section titled “後編The Seasoned chibirigor(読み解く)”
Partテーマ
1双方向型付けの正体
2部分型と変性
3ジェネリクスと型代入
4μ と余帰納でみる再帰型
5引数を埋める本物の型推論
6完全なFactStore
7健全性と正規化、そして「わざとunsound」
8本物のRigorへ(最終章)

では、Part 0から始めましょう。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.