Fastify入門|Fastifyとは
概要
Fastify は Node.js の Web フレームワークであり、高速かつ低オーバーヘッドで設計されており、パフォーマンスと柔軟性を重視しています。Fastify の機能には、ルーティング、リクエストとレスポンスの処理、入力の検証のサポートが含まれます。また、プラグインベースのアーキテクチャを備えているため、開発者はその機能を簡単に拡張できます。
Fastify は hapi と Express.js を参考にしており、JSON をレスポンスとして返却する API を構築したとき、高速にレスポンスを返却するように設計されています。以下は、JSON をレスポンスとして返却するサンプルコードです。Express.js や hapi の影響を受けているため、非常にシンプルに書くことができます。
環境
Fastify v4.0.0
Node v19.7.0
サンプルコード
以下にサンプルコードを記載します。
const fastify = require("fastify")({ logger: true });
fastify.get("/", async function (request, reply) {
return { root: true };
});
const start = async () => {
try {
await fastify.listen(3000);
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
以下で実行します。
node server
アクセス
curl http://localhost:3000
実行結果
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 17 100 17 0 0 76 0 --:--:-- --:--:-- --:--:-- 76{"hello":"world"}
Fastify コアの原則
高性能
Fastify は、最も高速な Web フレームワークの 1 つであり、コードの複雑さに応じて、1 秒あたり最大 3 万件のリクエストを処理できます。拡張可能
Fastify は、フック、プラグイン、デコレータを介して自由に拡張可能です。スキーマベース
必須ではない場合でも、JSON スキーマを使用してルートを検証し、出力をシリアル化することが可能です。内部的に Fastify は、パフォーマンスの高い関数でスキーマをコンパイルします。ロギング
ログは非常に重要ですが、コストがかかります。このコストをほぼ取り除くために、最高のロガーである pino が選ばれました。開発者に優しい Fastify は、パフォーマンスとセキュリティを犠牲にすることなく、非常に表現力があり、開発者が日常的に使用できるように構築されています。
TypeScript 対応 成長する TypeScript コミュニティをサポートできるように、TypeScript型宣言ファイルの保守に努めています。
ベンチマーク
Fastify を他のフレームワークと比較する際に非常に重要なのが、どの程度高速かということです。 Fastify の公式サイトにはベンチマークが公開されているので、確認してみましょう。
他の代替フレームワークと比較して、Koa 以上に高速に動作することがわかります。 他の代替案を検証する際には、【Node.js フレームワークおすすめ比較(2023 年版)】を参照してください。
Fastify のメリット
最高パフォーマンス 競合となる Expres.js と koa.js と比べとても高速です。
JSON スキーマ によるバリデーション
async/await 対応 非同期処理が簡単に実現できます。
ルーター機能
Fastify のデメリット
日本語ドキュメントが存在しない Fastify は、まだ日本であまり知られていないフレームワークであり、日本語ドキュメントが存在しないため、日本語を使う開発者にとっては学習が難しい場合があります。しかし、英語のドキュメントが充実しているため、英語が理解できる開発者にとっては問題ないでしょう。
テスト機能がデフォルトで存在しない Fastify は、デフォルトではテスト機能が組み込まれていませんが、プラグインを導入することでテストが可能です。この点は、開発者にとっては少し手間がかかるかもしれませんが、プラグインによりテストを簡単に実装できるため、深刻な問題ではありません。
Express.js との比較
koa.js は、Express.js が基盤としていた Connect ミドルウェアの再設計版であり、Express.js と同様に非常に人気のある Node.js フレームワークの 1 つです。
koa.js は、Express.js に比べて柔軟性があり、コードの再利用性が高く、中間ウェアを使わないためパフォーマンスが向上しています。また、koa.js は async/await を使用したより直感的なミドルウェアの実装をサポートしているため、コードがより簡潔になります。
Fastify と koa.js を比較する場合、両方のフレームワークは高速かつ拡張性が高いという点で類似しています。ただし、Fastify は JSON スキーマによるバリデーションや TypeScript のサポートなどの追加の機能を提供しています。
総評
Fastify は現在、nearFormとLetzDoItによってサポートされています。
Fastify は、高速で拡張性が高く、JSON スキーマによるバリデーションや TypeScript のサポートなどの追加の機能を提供しているため、Web アプリケーションを開発する際に非常に有用なフレームワークです。ただし、日本語ドキュメントが少なく、テスト機能がデフォルトでないことに注意する必要があります。
Express.js や koa.js と比較すると、Fastify はパフォーマンスが向上しており、プラグインのカプセル化による競合回避や、JSON の高速な解析、非同期処理の明快な実装など、優れた機能を提供しています。
しかし、Express.js のように豊富なドキュメントやモジュールに対するサポートがあるわけではないため、個人開発や小規模開発チーム向けのフレームワークとして、より適していると言えます。