本書は、TypeScriptで堅牢なバックエンドシステムを設計・実装する方法を解説します。具体的には、DDDの考え方を用いて業務上の概念やルールを整理し、ドメインモデルとして表現します。その実装では、データと振る舞いを分離しますが、関連する型と関数を同じモジュールにまとめることで、ドメイン知識がコードベースの各所へ分散することを抑えます。
そして、この実装方針を支えるものとして関数型プログラミングの考え方を扱います。ただし、関数型プログラミングそのものを網羅的に解説することは目的としていません。圏論や高度な型理論ではなく、純粋関数を中心にプログラムを構成し、不変なデータと明確な入力・出力によって振る舞いを組み立てる「スタイルとしての関数型」に焦点を当てます。入力と出力の関係が明確な小さな関数は、関数ごとに振る舞いを把握しやすく、変更の影響も予測しやすくします。本書では、こうした関数を組み合わせてより大きな処理を構成します。
一方、バックエンドシステムから副作用をなくすことはできません。データベースの読み書きやHTTP通信は、アプリケーションが役割を果たすために必要です。本書では、業務ルールを表す純粋な処理と副作用を扱う処理を分け、副作用をアプリケーションの境界に集めて影響範囲を限定します。ドメインモデルを中心にユースケースを組み立て、データベースへの入出力とHTTP APIを実装し、一つのバックエンドシステムとして構成するところまでを扱います。その過程で必要となるエラーハンドリングと依存関係の設計も取り上げます。
DDDでは、ドメインエキスパートとの対話を通じてモデルを継続的に探求します。また、境界づけられたコンテキストを見いだし、モデルの適用範囲やコンテキスト間の関係を整理する戦略的設計も重要です。ただし本書では、モデルを探求するプロセスや戦略的設計の進め方は扱いません。対象とするドメインとモデルの前提が整理されているところから始め、そのモデルをTypeScriptでどのように設計・実装し、バックエンドシステムへ組み込むかに焦点を当てます。
本書を通じて、読者は、業務ルールをデータと関数で表現し、純粋な処理と副作用を分離したうえで、TypeScriptでバックエンドシステムを設計・実装するための判断軸を身につけられるでしょう。