ウェブエンジニア問題集
第2章

Fastifyのセットアップ — npmで最小サーバーを起動する

4
この章の目次開く

この章では、Fastifyをインストールして、ブラウザやcurlからアクセスできる最小サーバーを作ります。まだDBや認証は入れません。最初は「起動する」「JSONが返る」「ログが出る」だけを確認します。

学習者学習者

最初からTypeScriptやDBも入れた方が実務っぽくないですか?

先生先生

いきなり全部入れると、どの仕組みでつまずいたのか分かりにくくなります。まずFastify単体で動かしてから、部品を足していきましょう。

プロジェクトを作る

空のディレクトリで package.json を作ります。

mkdir fastify-todo-api
cd fastify-todo-api
npm init -y
bash

ES Modulesで書くため、package.json"type": "module" を追加します。

{
  "name": "fastify-todo-api",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "node --watch src/server.js",
    "start": "node src/server.js"
  }
}
json
"type": "module" を入れると、.js ファイルで import / export が使えるようになります。

Fastifyをインストールします。

npm install fastify
bash

最小サーバーを書く

src/server.js を作ります。

import Fastify from 'fastify';
 
const fastify = Fastify({
  logger: true,
});
 
fastify.get('/', async () => {
  return { message: 'Hello Fastify!' };
});
 
try {
  await fastify.listen({ port: 3000 });
} catch (err) {
  fastify.log.error(err);
  process.exit(1);
}
js

起動します。

npm run dev
bash

ブラウザで http://localhost:3000 を開くか、ターミナルで次を実行します。

curl http://localhost:3000
bash

次のようなJSONが返れば成功です。

{
  "message": "Hello Fastify!"
}
json

Fastify() の構文

構文: Fastify(options)

引数説明
optionsobjectサーバー全体の設定。loggerbodyLimittrustProxy などを指定できる

戻り値: Fastifyインスタンス。ルート登録、プラグイン登録、サーバー起動などの入口になります。

const fastify = Fastify({
  logger: true,
});
js

logger: true を指定すると、Fastifyが内部で使うロガーが有効になります。リクエストのログやエラーを追いやすくなるため、学習中も本番でも基本的に有効にしておくとよいです。

listen() の構文

構文: fastify.listen(options)

引数説明
options.portnumber待ち受けるポート番号
options.hoststring待ち受けるホスト。ローカル確認なら省略でよい

戻り値: Promise。起動に成功すると解決し、失敗するとrejectされます。

await fastify.listen({ port: 3000 });
js

Dockerや外部からアクセスする環境では、host: '0.0.0.0' を指定することがあります。ただしローカル学習では、まず省略したままで十分です。

ファイル分割の準備

今は server.js にすべて書いていますが、テストしやすくするには「アプリを作る関数」と「listenする処理」を分けます。後の章で次のような形へ変えていきます。

src/
├── app.js       # Fastifyインスタンスを作ってルートを登録する
└── server.js    # appを起動する

この分割は、テストの章fastify.inject() を使うときに効いてきます。

参考リンク

次章では、GETPOST のルートを増やし、URLとHTTPメソッドで処理を分ける方法を学びます。

Node.jsクイズに挑戦するnpm、ES Modules、サーバー起動の知識をクイズで確認しよう