Fastify+TypeScript で新規プロジェクトを作成

2021.03.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Fastify

Fastifyを使う予定があるので使ってみる。

NodeのWebフレームワーク Fastifyは、Nodeのフレームワークの中でハイパフォーマンスらしい。

Getting Startedを動かす

公式のGetting Startedを参考にして、動かしてみよう。

環境

$ node --version
v14.16.0

プロジェクトを作成

$ mkdir fastify-sample
$ cd fastify-sample/
$ yarn init -y
$ yarn add fastify

fastifyでリクエストをうけるファイルを作成

src/index.js

const fastify = require('fastify')({
  logger: true
})

fastify.get('/', async (request, reply) => {
  reply.type('application/json').code(200)
  return { hello: 'world' }
})

fastify.listen(3000, (err, address) => {
  if (err) throw err
  fastify.log.info(`server listening on ${address}`)
})

package.jsonに起動用のscriptを追加

packeage.json

{
  "name": "fastify-sample",
  "version": "1.0.0",
  "license": "MIT",
  "scripts": {
    "dev": "node src/index.js"
  },
  "dependencies": {
    "fastify": "^3.14.0"
  }
}

起動して動作確認

$ yarn dev

http://127.0.0.1:3000 にアクセスすると {"hello":"world"} と表示される。

TypeScriptに対応する

型があると色々と理解がしやすいのでTypeScriptに対応しておきます。

tsconfigは普通に npx tsc --init でも良いみたいですが、おすすめ設定があるということでそちらを今回は使ってみます。

TypeScript関連を追加

$ yarn add -D typescript @types/node
$ yarn add -D @tsconfig/node14

tsconfig.jsonを作成

tsconfig.json

{
  "extends": "@tsconfig/node14/tsconfig.json"
}

tsからjsにドのスクリプトを追加

package.json

{
  ...
  "scripts": {
    "build": "tsc -p tsconfig.json"
  },
}

index.jsをtsに変更

src/index.ts

import fastify from 'fastify'
const server = fastify({
    logger: true
})

server.get('/', async (request, reply) => {
    reply.type('application/json').code(200)
    return {hello: 'world'}
})

server.listen(3000, (err, address) => {
    if (err) throw err
    server.log.info(`server listening on ${address}`)
})

起動する

$ yarn build
$ yarn dev

http://127.0.0.1:3000 にアクセスすると {"hello":"world"} と表示される

開発中はビルドなしで起動する

いちいちbuildして起動するのは面倒だ。 開発中はホットリロードで編集したらすぐ反映されて確認できたほうがうれしい。

tsをコンパイルなしで動かすには、ts-nodeとts-node-devがある。

ts-node-devのほうが、ファイルの変更を監視して、再起動を自動やってくれる。開発中は頻繁に編集して確認を繰り返しするのでts-node-devを入れるようにした。

ts-node-devを追加して開発体験をあげる。

ts-node-devを導入

$ yarn add -D ts-node-dev

package.jsonのdevでtsが動くようにする

package.json

{
  ...
  "scripts": {
    "dev": "ts-node-dev src/index.ts",
    "build": "tsc -p tsconfig.json"
  },
}

起動して確認する

$ yarn dev

http://127.0.0.1:3000 にアクセスすると {"hello":"world"} と表示される。

ここまでのファイル構成

$ tree -I node_modules -L 2
.
├── node_modules
├── package.json
├── src
│   └── index.ts
├── tsconfig.json
└── yarn.lock

まとめ

とりあえず、Fastify + TypeScriptで動かせるようになった。一番素朴な実装なのでこれをベースに色々試していきたいと思います。