最小の Ruby 型チェッカー chibirigor を作りながら学ぶ
最小のRuby型チェッカーchibirigorを、手を動かして作りながら学ぶオンラインチュートリアルです。
chibivueというVue.jsを小さく作り直して学ぶ本に倣って、ここではRuby向けの漸進的型チェッカーであるRigorを小さく作り直して学びます。
この本で得られるもの
Section titled “この本で得られるもの”数十〜数百行のRubyを書きながら、次の問いに自分の手で答えられるようになります:
- 型チェッカーは、ソースコードからどうやって型を「推論」するのか。
- なぜRigorは「型の付かないコード」を拒まず、それでも矛盾だけを報告できるのか。
- 「動くコードを脅かさない(never frighten working code)」とは、設計としてどういうことか。
読み終えると、check(型診断)とannotate(推論した型の表示)が動く小さな型チェッカーが手元に残り、本物のRigorのソースを読む足がかりが得られます。
対象読者と前提知識
Section titled “対象読者と前提知識”- Ruby中級者:クラス、モジュール、
case/when、ブロックを普通に読み書きできること。 - 型システムの理論知識は不要(前編)。前編の本体で使う概念は、その都度やさしく導入します。
- 前提とするのはRubyだけ。数式や証明は前編では使いません(後編で扱います)。
Schemeの名著(The Little Schemer / The Seasoned Schemer)にならい、二巻に分かれています。
- 前編 = The Little chibirigor(
little/):やさしい導入。check/annotateが動く最小実装をPart 0〜9で作り切ります。コードは前編だけで動き切り、形式的な理論は後編へ譲ります。 - 後編 = The Seasoned chibirigor(
seasoned/):熟練編。前編で作ったものの裏側を、形式の言葉で読み解く巻です(双方向型付け、部分型と変性、ジェネリクス、再帰型、型推論、FactStore、健全性)。記法と用語を扱います。
どちらから読んでもよいですが、初めてなら前編 → 後編の順を勧めます。
各章を貫く三つの視点
Section titled “各章を貫く三つの視点”各章は、小さな三つの視点(パースペクティブ)から書かれています。「① 型理論 ↔ ② Ruby/RBS ↔ ③ Rigor実装」を重ね合わせる構成です(くわしくはPart 0で)。
各章末には、手を動かして確かめるための演習があります。巻末に用語集(glossary.md)と、巻をまたぐ参照情報をまとめた付録(appendix/)も用意しました。
参考書(任意)
Section titled “参考書(任意)”型理論をもう一段深く覗きたい方のために、各章の脇に参考書メモを添えます。どちらも必読ではありません(無くても本書だけで完結します)。
- 『しくみ』:遠藤侑介『型システムのしくみ ― TypeScriptで実装しながら学ぶ型とプログラミング言語』(ラムダノート)。
- 『TAPL』:Benjamin C. Pierce『型システム入門 ― プログラミング言語と型の理論』(オーム社。原著Types and Programming Languages)。英語で読むなら原著がそのまま参照先になります。
対応早見表は付録a4に一元化しています。
Ruby 3.4以降(パーサのPrismが同梱)があれば動きます。テストフレームワークも使いません。
$ git clone <このリポジトリ>$ cd chibirigor$ ruby exe/chibirigor check path/to/file.rb # 型診断$ ruby exe/chibirigor annotate path/to/file.rb # 推論型の表示本文のコードを写経していくなら、自分の作業ディレクトリにlib/を作り、章ごとにファイルを育てていけば十分です。各章のコードはすべて、実際のPrism/Rubyで動作することを確認しています。
前編The Little chibirigor(作る)
Section titled “前編The Little chibirigor(作る)”| Part | テーマ |
|---|---|
| 0 | はじめに:推論を土台にした型チェッカー |
| 1 | リテラルと算術 |
| 2 | メソッド送信とディスパッチ |
| 3 | ローカル変数と不変Scope |
| 4 | 型が一本に決まらないUnion |
| 5 | 場合分けで型を絞るナローイング |
| 6 | ハッシュと配列の型 |
| 7 | 受理判定と三値 |
| 8 | RBSと型シグネチャ |
| 9 | gradualの哲学(最終章) |
後編The Seasoned chibirigor(読み解く)
Section titled “後編The Seasoned chibirigor(読み解く)”| Part | テーマ |
|---|---|
| 1 | 双方向型付けの正体 |
| 2 | 部分型と変性 |
| 3 | ジェネリクスと型代入 |
| 4 | μ と余帰納でみる再帰型 |
| 5 | 引数を埋める本物の型推論 |
| 6 | 完全なFactStore |
| 7 | 健全性と正規化、そして「わざとunsound」 |
| 8 | 本物のRigorへ(最終章) |
- a1特別な型カタログ:
untyped/void/never/Top/Bot - a2ナローイングのパターン集(後編Part 6の予習。前編だけなら飛ばし可)
- a3道具:
--explain/型表示の二段構え/trace/dispatchカスケード - a4参考書とADRの対応早見表
- a5他言語からの橋渡し:null安全、名前的と構造的の部分型、HashShapeの系譜、無タグのUnion
では、Part 0から始めましょう。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.