Fastifyとは何か — Expressの次に学ぶNode.js APIフレームワーク
Node.jsでAPIサーバーを作るとき、最初に触れるフレームワークとしてはExpressが有名です。Expressは仕組みが素直で、Node.js入門のExpress章で学んだように、ルーティングとミドルウェアを理解するには今でもよい教材です。
一方で、実務のAPIでは「入力値を毎回検証したい」「レスポンスの形を揃えたい」「機能単位でルートや認証を分けたい」「テストしやすい構造にしたい」という要求がすぐに出てきます。Fastifyは、このあたりをフレームワークの中心に置いたNode.js向けのWebフレームワークです。
Fastifyは「速いExpress」ではなく、schema、plugin、encapsulationを使ってAPIを設計するフレームワークです。
学習者Expressが分かっていれば、Fastifyも同じように書けますか?
先生ルーティングの考え方は近いです。ただしFastifyでは「ルートにschemaを付ける」「機能をpluginとして登録する」という設計がかなり重要になります。
Fastifyが得意なこと
Fastifyは、JSON APIを作る場面で特に扱いやすいです。最初からログ、入力検証、レスポンスのシリアライズ、プラグインによる分割、テスト用のHTTP injectionがそろっています。
| 得意なこと | 何がうれしいか |
|---|---|
ルートごとの schema | リクエストの検証とレスポンス形式をルート定義の近くに置ける |
register() によるプラグイン分割 | /api/users や /admin のような単位で機能を閉じ込められる |
| encapsulation | プラグイン内の設定、hooks、decoratorの影響範囲を制御できる |
fastify.inject() | サーバーを実際にlistenしなくてもAPIテストを書ける |
| 組み込みロガー | request.log や fastify.log で構造化ログを出しやすい |

Expressとの違い
Expressは「ミドルウェアを順番に並べる」感覚が中心です。Fastifyにもhooksはありますが、中心になるのはルート定義、schema、pluginです。
| 観点 | Express | Fastify |
|---|---|---|
| ルート定義 | app.get(path, handler) | fastify.get(path, options, handler) |
| 入力検証 | 自分でミドルウェアやライブラリを組み込む | ルートの schema にJSON Schemaを書く |
| 機能分割 | Routerやミドルウェアで分割 | pluginを register() する |
| スコープ | 基本は上から順に全体へ効く | pluginごとに影響範囲を閉じ込められる |
| テスト | supertestなどを使うことが多い | fastify.inject() が組み込みで使える |
どちらが常に優れている、という話ではありません。既存のExpress資産が多いチームならExpressを続ける判断も自然です。新しくJSON APIを作るなら、Fastifyのschema中心の設計はかなり強い選択肢になります。
この本で作るもの
この本では、最初に小さなFastifyサーバーを作り、少しずつTodo APIへ育てていきます。最終的には、次のような要素を持つAPIを作れる状態を目指します。
GET /todosで一覧を返すPOST /todosで入力値を検証して作成するGET /todos/:idで1件取得する- 404やバリデーションエラーを整理して返す
- ルートをプラグインへ分割する
node:testとfastify.inject()でAPIテストを書く
先に知っておきたい前提
この本では、Node.jsとnpmの基本を知っている前提で進めます。不安がある場合は、先にNode.js入門のセットアップ、npm、HTTPサーバー、エラーハンドリングの章を読むとつながりやすいです。
コード例はES Modulesで書きます。つまり import Fastify from 'fastify' の形です。CommonJSの既存コードを読む必要がある場合は、CommonJSとES Modulesの章も参照してください。
参考リンク
次章では、実際にFastifyをインストールして、最小のサーバーを起動します。
