node.jsでAPIサーバーを作るときに有用なフレームワークまとめ

2023/09/08に公開

Express.js (https://expressjs.com/ja/):Star 61.8k

Express.jsは、Node.jsのウェブアプリケーションフレームワークで、ミニマルで柔軟な設計を特徴とします。ルーティング、ミドルウェア、非同期処理のサポートを提供し、ウェブおよびAPIアプリケーションを迅速に構築できます。ミドルウェアはリクエスト/レスポンス間の処理を容易にし、サードパーティのプラグインを統合できます。豊富なコミュニティとエコシステムがあり、シンプルなRESTful APIから大規模なアプリケーションまで対応可能です。 Expressは高性能で、非常に人気があり、Node.js開発者にとってスタンダードな選択肢です。

Hello Worldまでのコマンド

$ npm init
$ npm install express
$ touch app.js

app.js

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})
$ node app.js

冒頭にもある通り構成としては非常にシンプルで必要なモジュールを適宜利用し、RestfulなAPIサーバーや大規模なアプリケーションも作成できる非常に汎用性の高いFWです。プラグインやコミュニティの大きさからも非常に人気なので選択に迷ったらこのFWを選ぶのも1つの手だと思われます。

Koa.js (https://koajs.com/): Star 34.3k

Koaは、ミニマルでエクスプレッシブなNode.jsウェブフレームワークです。Express.jsから派生しており、非同期のミドルウェアをサポートしています。
Koaは、ECMAScript 2017の非同期/非同期ジェネレーター機能(Async/Await)を活用し、簡潔なコードを書くことができます。
Koaは柔軟性が高く、カスタマイズ性があり、ミドルウェアの組み合わせを容易に行えるため、プロジェクトの要件に合わせてカスタマイズすることができます。

※(node version 12 or higher)
$ nvm install default 12
$ npm i koa
$ node my-koa-app.js

公式ドキュメントにはnvm install 7と記載されているが、そのままやろうとするとエラーになる。ドキュメントの冒頭に記載されている通りnode v12以上で起動する必要があるので注意しましょう。

LoopBack 4 (https://loopback.io/doc/en/lb4/): Star 4.6k

LoopBack 4は、強力なAPI作成とマイクロサービスの構築をサポートするNode.jsフレームワークです。
LoopBack 4は、デザインファーストのアプローチを提供し、APIの設計から開発までをサポートします。OpenAPI仕様を基にAPIを生成することができます。
LoopBack 4は、モデル駆動のデータアクセスを強調し、データベースへのアクセスを簡素化します。また、認証やセキュリティの機能も提供しています。

※(node version 16 or higher)
$ nvm use default 16
$ npm i -g @loopback/cli
$ lb4 app
$ cd hello-loopback
$ npm start

アプリケーション作成のコマンドに沿っていけば、APIが作成でき自動でswaggerのAPIドキュメントを作成できるので非常に便利です。また、typescriptが標準実装されているので手軽にtypescriptを始められるのも特徴。controllers,model,repositoryもアプリケーション作成の流れで作成でき、かなりフルスタックなFWという印象。ただStar数が他よりもかなり少ないので保守の観点では少し心配な部分もあります。
https://loopback.io/doc/en/lb4/express-with-lb4-rest-tutorial.html

NestJS (https://nestjs.com/): Star 59.4k

NestJSは、TypeScriptをベースとしたエレガントなサーバーサイドアプリケーションフレームワークです。Angularの影響を受けた設計パターンを採用しています。
NestJSは、モジュール化されたアプリケーション構造を提供し、コンポーネントベースのアーキテクチャを採用しています。これにより、アプリケーションのメンテナンスとテストが容易になります。
NestJSは、HTTPリクエストの処理だけでなく、WebSocketやマイクロサービスのサポートも提供しており、多くの用途に適しています。

$ npm i -g @nestjs/cli
$ nest new project-name
$ npm run start

CRUD generatorを利用するとすぐにCRUDができるendpointを作成できます。

$ nest g resource

What transport layer do you use?と質問されるのでREST APIを選択すればRestful APIになります。他にもGraphQLやMicroservice,WebSocketsなども選択できます。またコマンド1つでswaggerドキュメントも作成してしまえるので非常にいたせり尽せりなFWだと思います。

Discussion