Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

型で設計する ― Scala 3 実践ガイド:基礎から型レベルプログラミングまで

English version

このチュートリアルは scala-cli を使いながら、 ステップごとにコンパイラと対話して進める構成だ。 各ステップで最も大切なこと:まずコンパイル、エラーを読み、それから理解する。

対象読者

型パラメータ ― List[Int]Option[String]Map[K, V] ― は日常的に使っているだろう。 でも [+A][B >: A]match 型、=:= となると別の言語に見えるかもしれない。 「上級者向け」と言われて飛ばしてきた。それはまったく自然なことだ。

このチュートリアルでは、それらは「上級」ではなく、 解決する問題を見れば自然に理解できると主張する。 概念はまっすぐ積み重なり、どれもすでに経験した具体的な問題に対応している。

なぜこれが重要なのか

根本的な問題はこうだ:JVM ではジェネリクスは**消去(erasure)**される。 実行時には List[Int]List[String] もただの List だ。 JVM はコレクションがどの型を保持しているか知らない。

つまり、コンパイル時が型エラーを捕まえる唯一のチャンスだ。 このチュートリアルで扱うすべて ― 変位、不透明型、型クラス、マッチ型 ― は、消去が情報を捨てる前にコンパイラにより多くの情報を与え、 より多くのミスを検出するためのものだ。

これは今、さらに重要だ。LLM が人間よりも多くのコードを書く時代、 型システムは人間の意図と生成されたコードの間にある重要な層になる。 明示的なコンパイラメッセージを持つ豊かな型システムは、LLM が黙って落とすもの ― 暗黙の慣習、抜けたアノテーション、微妙な変位の要件 ― を検出する。 コンパイラは忘れないし、幻覚も見ない。すべての行を、毎回チェックする 唯一のレビュアーだ。

構成

Part 1: 型システム(Step 0〜5)では、Scala の型システムを効果的に使う方法を扱う ― 型パラメータ、変位、境界、不透明型、型メンバー、型クラス。 ほとんどのプロダクションコードで必要な知識だ。

Part 2: 型レベルプログラミング(Step 6〜8)では、計算する型を扱う ― マッチ型、コンパイル時検証、型の等価性の証明。 これらのテクニックはライブラリ設計やドメインモデリングで登場し、 型システムだけでは捕捉できないバグの種類全体をコンパイラが検出できるようになる。