【2023年版】人気の各種Node.jsフレームワークの比較まとめ

概要

現在、Node.js を使用する開発者は増え続けており、大多数の開発者は、より多くのアプリケーションを開発できるように Node.js フレームワーク を使うことに注目します。

ですがNode.js フレームワーク は 2009 年の技術コミュニティーが導入されたときから、非常に多く開発されたため、どの フレームワーク を使用すればいいか悩む技術者が増えています。

Node.js フレームワーク は大きく 3 つに分かれており、使用するプロジェクトによって使用するものを決めていかなければなりません。

  • MVC フレームワーク
    アプリケーションロジックを Model (M)、 View (V)、 Controller (C)の 3 つに分けて作成するデザインパターンを採用しています。これのメリットは開発する担当を切り分けることができ、デザイナーはデザインに、プログラマーは機能作成に集中できます。

  • フルスタックフレームワーク
    アプリケーションを作成するための コンポーネント が全て揃っています。
    MVC フレームワーク の考え方に付随して、 ライブラリ 、 テンプレートエンジン などの機能を提供します。

  • REST API フレームワーク
    REST API を作成するための フレームワーク です。
    MVC フレームワーク や フルスタックフレームワーク とは違い、これ一つでアプリケーションを作成することはできません。主にバックエンド側の機能にを集中して作ることになります。

それを踏まえて、ここでは 2023 年に Node.js を使用する際に、選定対象となる フレームワーク を紹介します。

フレームワーク一覧

nameGithubStarおすすめランキング
Express.jshttps://github.com/expressjs/express52.0K1 位
Nest.jshttps://github.com/nestjs/nest34.7K2 位
Koa.jshttps://github.com/koajs/koa30.8K3 位
Meteor.jshttps://github.com/meteor/meteor42.3K4 位
fastifyhttps://github.com/fastify/fastify17K5 位
Sales.jshttps://github.com/balderdashy/sails21.8K6 位
LoopBack.jshttps://github.com/strongloop/loopback13.3K7 位
AdonisJshttps://github.com/adonisjs/core9.6K8 位
Total.jshttps://github.com/totaljs/framework4.1K9 位
Derby.jshttps://github.com/derbyjs/derby4.6K10 位

Node.js フレームワーク一覧テーブル

Express.js

Node.jsフレームワーク
Express.js

Express.js は、2010 年にリリースされてから、 MIT ライセンス の下で開発が続けられている、
Node.js の デファクトスタンダード です。

サーバーサイドで Web アプリケーションを開発するために必要な機能を提供します。

MVC アーキテクチャ が採用されており、この フレームワーク だけでアプリケーションを作成することができます。
また MVC アーキテクチャ だけではなく、REST API フレームワークとしての側面もあり、プロジェクトによって切り分けて使用できます。
非常に多機能で拡張性があり、多くのパッケージが開発されています。それらを組み合わせることで、より複雑なアプリケーションを開発することもできます。

メリット

  1. 単純で軽量
    必要最小限の機能しか持ちません。
    そのため非常に軽快に動作します。学習コストも非常に低いです。
  2. WEB アプリケーション開発に必要な主要機能
    主要な機能が提供されており、ルーティング、ミドルウェア、テンプレートエンジンなどの基本的な機能が揃っているため、Web アプリケーションを開発するための基本的な枠組みが整っています。
  3. 豊富なパッケージ
    リリースされてから多くの年月がたった フレームワーク です。
    そのため開発をサポートをする モジュール が豊富です。それらを組み合わせることで、より複雑なアプリケーションを開発できます。
  4. 豊富な テンプレートエンジン
    テンプレートエンジン も同様に複数あり、PugEJSMustacheなどをサポートしています。
  5. コミュニティサポート
    数多くのチュートリアルやドキュメント、ライブラリが公開されているため、学習リソースも豊富です
  6. 高い拡張性
    様々なアプリケーションの開発要件を満たせます。

デメリット

  1. 今後機能の追加・修正がされるか怪しい
    Express.js の開発メンバーが、後継の koa.js の開発に注力しています。
    今後のアップデートに影響が出るかもしれない
  2. 複雑すぎる API 開発には向いていない
    複雑なアプリケーションを開発するためには自分でライブラリやフレームワークを組み合わせる必要があるため、学習コストが高くなる可能性があります。

環境構築

実行可能ファイルをインストールします。

npm install -g express-generator

アプリ作成

express /tmp/foo && cd /tmp/foo

依存関係のインストール

npm install

サーバー起動

npm start

サンプルコード

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('hello world')
})

app.listen(3000)

筆者評価

Express.js を使うメリットとしては、簡単にセットアップができ、学習コストが低く、豊富なパッケージとの親和性が高いことです。また、Node.js のエコシステムに組み込むことができるため、柔軟な開発が可能である点も高く評価されます。

デメリットとしては、複雑なアプリケーションを開発するためには自分で ライブラリ や フレームワーク を組み合わせる必要があるため、学習コストが高くなる可能性があることです。また、独自の ミドルウェア を実装するためには自分で実装する必要があるため、開発コストが高くなる可能性があります。

その上、Express.js は最近では、Nest.js や fastify などの新しいフレームワークに取って代わられることが多いため、今後のアップデートやサポートについても注意が必要です。

全体的には、シンプルで軽量なため、Node.js での Web アプリケーション開発においては優れた選択肢と言えますが、複雑なアプリケーションの開発やスケールアップに対応するためには、適切なアーキテクチャを選択し、適切なミドルウェアを組み合わせる必要がある点は留意する必要があります。

ですが、シンプルな API 開発をする場合は非常に学習コストが低いです。
個人的には初心者にお勧めしたい フレームワーク No1 です。
Express.js について深く知りたい場合は、『未経験からの Express.js 入門』を参照してください。

NestJS

Node.jsフレームワーク
NestJS

効率的でスケーラブルな Node.js アプリケーションを構築するための Node.js フレームワーク です。

メリット

  1. TypeScript が使用できる
    Nest.js は TypeScript で構築されています。そのため強い型付けで実装を行えます。
  2. 専用 CLI による開発時間の短縮
    Nest CLI というコマンドラインも用意されています。これを利用することで、容易に Nest.js アプリケーションを構築できます。
  3. Express.js のアーキテクチャをそのまま利用できる
    Nest.js は Express.js も利用しているため、Express で利用できるアーキテクチャをそのまま利用でき、保守が容易なアプリケーションを構築できます。

デメリット

  1. 学習曲線の高さ: NestJSは、Node.jsアプリケーションの構築において特定のアーキテクチャや設計原則を推奨しています。これにより、初めてNestJSを使用する開発者にとっては学習曲線が高くなる可能性があります。特に、Express.jsや他のフレームワークに慣れ親しんでいる場合、その違いに適応するための時間と労力が必要になるかもしれません。
  2. 開発速度の低下: NestJSは、効率的でスケーラブルなアプリケーションを構築するために設計されていますが、一部の開発者にとっては開発速度が低下する可能性もあります。フレームワークが提供する追加の抽象化層や機能は、パフォーマンスや堅牢性を向上させる一方で、開発者が直接的にコントロールすることができる柔軟性を犠牲にすることもあります。したがって、プロジェクトの要件によっては、よりシンプルなアプローチが好ましい場合もあります。
  3. 生態系の成熟度: NestJSは比較的新しいフレームワークであり、他のより成熟したNode.jsフレームワークと比較して、その生態系はまだ十分に発展していないかもしれません。一部のライブラリやプラグインは、他のフレームワークに比べて利用可能な範囲が限定されているかもしれません。したがって、特定のニーズや要件に合ったエコシステムのサポートを見つけることが難しい場合もあります。

環境構築

npm i -g @nestjs/cli
nest new project

サンプルコード

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

筆者評価

NestJS の強みはそのコード保守性にあります。
Angular と同じかきかたができ、TypeScript で書かれているためアーキテクチャパターンを整理しやすいです。

大規模プロジェクトだと機能をクリーンなモジュール化された状態にすることが可能なので、スケーラブルで保守が容易なアプリケーション開発を行えます。

NestJS について、深く知りたい場合は『未経験からの NestJS 入門』を参照してください。

Koa.js

Node.jsフレームワーク
Koa.js

Express.js のチームによって開発されており、Express.js の機能の一部を省略した軽量なフレームワークです。

後継ということもあり、 MVC アーキテクチャパターン が採用されています。
ですので、この フレームワーク 一つでアプリケーション一つを作成できます。

Express.js 同様にミドルウェアは自分で実装する必要があります。
ES6 の generator を使用して処理を記述することができ、非同期処理を簡単に扱うことができるようになりました。

Koa.js は、それぞれ異なるブラウザで動作させるための独自スクリプトやメソッドを持っています。また記述の仕方が Express.js に似ているため、少しだけ学習コストが低くなります。

メリット

  1. 単純で軽量
    Express.js は最小構成のアプリケーションですが、Koa.js はその上を行きます。
    ミドルウェアやルーティングなどは提供されておらず、自分で構築しなければいけません。
    これはデメリットに聞こえますが、 Express.js とは違いコアモジュールやミドルウェアを一から覚える必要がなく必要なものを自分を簡単に足していけるので、長く開発していく上ではメリットになっています。
  2. ジェネレータ
    Koa.js は ES6 のジェネレータを使用して非同期処理を記述することができます。これにより、コードが読みやすく、処理が簡単に扱えるようになります。
  3. コミュニティサポート
    Koa.js は Node.js コミュニティの中で人気があり、多くのライブラリやプラグインが存在します。
  4. 高い拡張性
    様々なアプリケーションの開発要件を満たせます。

デメリット

  1. 開発時間が長くなる可能性がある
    良くも悪くも最小構成な フレームワーク です。利用する モジュール の選定やテストに時間がかかります。
  2. ミドルウェアの自力実装
    ミドルウェアの処理を自分で実装することが求められます。これにより、時間や労力がかかることがあります。
  3. サポート機能の減少
    Express.js に比べて初期機能が少ないので、生産性が低下する恐れがあります。
  4. ES6 の強制
    ES6 のジェネレータを使用するため、ジェネレータがサポートされていない環境では使用することができません。

環境構築

npm i koa
node project.js

サンプルコード

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);

筆者評価

Express.js の開発者が開発しているいるので今後に大きな期待を持てるフレームワークです。 Express.js と比べパフォーマンスが改善されており、非常に高速に動作します。

ES6 のジェネレータを使用するため、ジェネレータがサポートされていない環境では使用することができないのが難点ですが、2023 年現在で利用していない環境が珍しいのであまり気にならないかも?

総評として、Koa.js は軽量な Web フレームワークであり、自分でミドルウェアを実装する必要があるため、学習コストが高く、スッキリしたコードが書ける特長を持っていますが、生産性やジェネレータがサポートされていない環境で使用できない点がデメリットになっていると言えます。

Meteor.js

Node.jsフレームワーク
MEteor.js

10 年以上にわたり開発をされた、フルスタックオープンソースフレームワークです。

このフレームワークは、アプリの階層全体のための単純化されたプラットフォームを持っており、全て JavaScript で開発できます。これにより、このフレームワークをサーバーサイド並びにクライアントサイドで、より効率的な方法で開発を行うことが可能です。

また Meteor アプリ開発をサポートする専用クラウドを保持しています。

メリット

  1. 簡単な開発
    Meteor.js は、Node.js と同様に JavaScript を使用しています。そのため、JavaScript を使用して Web アプリケーションを開発することができます。また、Meteor.js は、簡単なコマンドを使用してアプリケーションの作成やデプロイを行うことができます。
  2. 成熟され安定している
    10 年以上にわたり開発された、オープンソースフレームワークです。
    破壊的なアップデートが行われる可能性が低いです。
  3. フルスタックフレームワーク
    開発からリリースまでの作業を全て JS で書くことが可能です
    そのため Meteor.js を導入すれば、開発に必要なすべての環境が揃うため、すぐに開発を行えます。
  4. リアルタイムのデータ同期 Meteor.js は、Distributed Data Protocol (DDP) を使用して、サーバーとクライアントの両方にリアルタイムなデータ同期機能を提供しています。これにより、サーバー上のデータが変更されると、クライアントが自動的に更新されるため、リアルタイムな Web アプリケーションを簡単に作成することができます。
  5. 豊富なライブラリ Meteor.js は、豊富なライブラリを提供しています。これらのライブラリを使用することで、アプリケーションの機能やパフォーマンスを向上させることができます。
  6. 日本語ドキュメントが豊富
    現在日本語ドキュメントが豊富なので、初心者にもやさしいです。

デメリット

  1. フロントエンドの制約
    Meteor.js は、フロントエンドに React、Angular、Vue などのより広く使用されているフレームワークを使用することを推奨していません。これは、Meteor.js がビルトインのフロントエンドフレームワークである Blaze に依存しているためです。
  2. 開発者のブランド
    Meteor.js は、React や Angular などのより一般的に使用されるフレームワークに比べて知名度が低く、開発者がそれを学ぶ必要がある場合、時間と労力を必要とすることがあります。
  3. 拡張性の欠如
    Meteor.js は、大規模なアプリケーションにはあまり適していません。これは、アプリケーションの規模が大きくなると、Meteor.js の機能が足りなくなるためです。アプリケーションが拡大するにつれて、カスタム機能を作成する必要があります。
  4. サーバーサイドの制限
    Meteor.js は、特定のサーバー上でのみ動作するため、サーバーサイドで実行する必要がある場合、メンテナンスや拡張が制限される場合があります。
  5. アーキテクチャの欠陥
    Meteor.js は、クライアントとサーバーのアプリケーションロジックを分離しない単一のコードベースに基づいています。これは、アプリケーションが成長し続ける場合、コードベースが複雑になり、保守が困難になる可能性があることを意味します。

環境構築

curl https://install.meteor.com/ | sh
mkdir project
cd project
meteor create .
meteor run

サンプルコード

import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';

import './main.html';

Template.hello.onCreated(function helloOnCreated() {
  // counter starts at 0
  this.counter = new ReactiveVar(0);
});

Template.hello.helpers({
  counter() {
    return Template.instance().counter.get();
  },
});

Template.hello.events({
  'click button'(event, instance) {
    // increment the counter when button is clicked
    instance.counter.set(instance.counter.get() + 1);
  },
});

**筆者評価**

Meteor.jsは、クライアントとサーバーの双方でJavaScriptを使用してWebアプリケーションを構築するためのフルスタックJavaScriptフレームワークです。多くの開発者がこれを使用して、スピーディで効率的なWebアプリケーションを作成しています。

Meteor.jsの最大の利点は、開発の速さです。クライアントとサーバーの両方のコードを同時に開発できるため、開発時間を短縮できます。また、Live Reload機能があり、コードの変更を保存すると自動的に再読み込みされ、アプリケーションの開発を促進します。

Meteor.jsは、豊富なコミュニティがあるため、多数のパッケージやライブラリがあり、多様なニーズに対応できます。また、単一のコードベースで、Web、iOS、Androidアプリケーションを構築することも可能です。

一方、Meteor.jsの欠点は、柔軟性の欠如です。他のフレームワークに比べてカスタマイズが難しいため、大規模なアプリケーションの場合、より柔軟性の高いフレームワークを使用することが推奨されます。

総合的に見ると、Meteor.jsは、高速で効率的なWebアプリケーションを簡単に構築するための素晴らしいフレームワークであり、中小規模のアプリケーションの開発に適しています。

fastify

Node.jsフレームワーク
fastify

最速のパフォーマンスを発揮する Node.js フレームワーク です。

メリット

  1. 高速性
    node.js アプリケーションの中では、最速の実行速度を提供しています。
  2. 軽量性
    コアライブラリの機能を最小限に抑えており、必要最低限の機能だけを提供しています。そのため、軽量でメモリ使用量も少なく、高速な処理が可能です。
  3. 拡張性
    fastify は、プラグインを使って簡単に拡張することができます。これにより、必要に応じて機能を追加することができます。
  4. TypeScript のサポート
    fastify は TypeScript をサポートしており、TypeScript で書かれたアプリケーションの開発が可能です。TypeScript を使うことで、アプリケーションの保守性が向上し、バグの発生を防ぐことができます。
  5. 豊富なドキュメント
    fastify には豊富なドキュメントが用意されており、初心者でも簡単に使い方を学ぶことができます。また、多くのコミュニティによってサポートされており、質問に対して迅速な回答が得られることが多いです。

デメリット

  1. 日本語ドキュメントが少ない
    公式ドキュメントが英語のため、読み解かないといけないため、初心者にはお勧めできません。
  2. 開発者の数が少ない
    fastify は比較的新しいフレームワークであり、開発者の数がまだまだ少ないことが課題となっています。そのため、コミュニティのサポートが不足することがあるかもしれません。
  3. プラグインの互換性の問題がある fastify はプラグインを活用することで柔軟な機能拡張が可能ですが、プラグイン同士の互換性の問題があることがあります。そのため、複数のプラグインを組み合わせて使用する場合には注意が必要です。
  4. 難易度が高め
    fastify は高速な処理を実現するために最適化が施されていますが、その反面細かい設定が必要な場合があります。例えば、クエリパラメータのパース方法を変更したい場合は、専用のパーサーを実装する必要があります。

環境構築

npm install fastify-cli --global
fastify generate project
cd project
npm install
npm run dev

サンプルコード

// Require the framework and instantiate it
const fastify = require('fastify')({ logger: true })
// Declare a route
fastify.get('/', async (request, reply) => {
  return { hello: 'world' }
})
// Run the server!
const start = async () => {
  try {
    await fastify.listen(3000)
  } catch (err) {
  fastify.log.error(err)
    process.exit(1)
  }
}
start()

筆者評価

非常に速い、それに尽きます。
コードの保守性を考えたときに少し難があるかと思いますが、それは開発者の工夫次第で如何様にも改善できます。

あなたのプロダクトが高速にレスポンスを返すことを求める場合は、非常に強力な選択肢になります。

fastify について、深く知りたい場合は『未経験から fastify 入門』を参照してください。

Sails.js

Node.jsフレームワーク
Salis.js

Ruby ライクな Node.js フレームワーク です。
独自のエンタープライズ品質な Node.js アプリケーションを開発するのに使用されます。

Sails.js は、スケーラブルなサービス指向アーキテクチャーにアタッチされた、データ駆動型(データドリブン)の API で構成されています。

メリット

  1. Ruby ライクな記法
    Ruby を使ったことがある人ならば、キャッチアップが容易です。
  2. 非常にシンプルなデータベースアクセス
    ORM である Waterline が標準搭載されており、データベースアクセスが容易です。
  3. 専用 CLI による開発時間の短縮
    Nest CLI というコマンドラインも用意されています。これを利用することで、非常に簡単 API も作成できます。
  4. 高水準な WebSocket アプリの開発
    Salis.js は WebSocket 統合を容易にする仕組みが備わっており、WebScoket を使ったアプリケーションを作成したい場合の候補として最適解です。

デメリット

  1. 依存関係の多さ
    Sails.js は Express.js、Socket.io、Waterline などの多数のライブラリを使用しています。これらのライブラリにはそれぞれ異なるバージョンがあり、相互に競合する可能性があります。
  2. パフォーマンスの低下
    Sails.js はデフォルトで WebSocket を使用していますが、WebSocket は長時間の接続に向いており、短時間の接続では遅延が発生する場合があります。また、Sails.js は比較的大きなメモリフットプリントを持つため、リソースに制限のある環境ではパフォーマンスの低下が起こる可能性があります。
  3. ドキュメントの不足
    Sails.js のドキュメントは充実していますが、一部の機能については不十分な場合があります。また、新しいバージョンがリリースされると、ドキュメントが追いつかない場合があります。
  4. ORM の制限
    Sails.js は Waterline ORM を使用していますが、Waterline ORM には制限があります。たとえば、多対多の関係を扱う場合、中間テーブルを自分で作成する必要があります。
  5. 開発者の少なさ Sails.js は比較的新しいフレームワークであり、開発者の数はまだ少ないです。そのため、質問に対する回答が得られにくい場合があります。

環境構築

npm install sails -g
sails new project
cd project
sails lift

サンプルコード

// api/controllers/HelloController.js

module.exports = {
  sayHello: function(req, res) {
    return res.send("Hello World!");
  }
};
// config/routes.js

module.exports.routes = {
  "GET /hello": { action: "hello/sayHello" }
};
// app.js
const sails = require("sails");

sails.lift({}, (error) => {
  if (error) {
    sails.log.error(error);
    return process.exit(1);
  }

  sails.log.info(`Server started at http://localhost:${sails.config.port}`);
});

筆者評価

Sails.js は、MVC アーキテクチャーに基づく Node.js の Web アプリケーションフレームワークであり、自動的に API を生成することができるため、RESTful な API サーバーを簡単に作成することができます。また、ルーティングやモデルの作成が簡単にできるため、開発者の生産性を高めることができます。

しかしながら、Sails.js は複雑なアプリケーション開発には向いていません。また、デフォルトでいくつかのセキュリティ機能が無効になっているため、セキュリティに関する注意が必要です。さらに、柔軟性が低く、自由度が少ないため、カスタマイズには向いていないかと思います。

LoopBack.js

Node.jsフレームワーク
LoopBack.js

REST API を高速作成するためのフレームワークです。

メリット

  1. 専用 CLI による開発時間の短縮
    コマンドラインベースでモデルを作成するのでコーディング作業を極端に減らすことができます。
  2. オンラインドキュメント生成機能のデフォルト搭載
    REST API のオンラインドキュメントを生成してくれる Swagger が標準で組み込まれているため、作成した API をそのまま共有できます。
  3. 自動で REST API を生成
    LoopBack.js は、データモデルから REST API を自動生成する機能があります。そのため、CRUD 操作を簡単に実装できます。
  4. 様々なデータソースへの接続が容易 LoopBack.js は、複数のデータベースや API などの様々なデータソースに対応しており、それらに対する接続やアクセスが容易です。
  5. フレキシブルなアーキテクチャ
    LoopBack.js は、データソースやルーティング、認証・認可、カスタムコードなど、各要素が独立しているため、フレキシブルなアーキテクチャが実現できます。
  6. Express.js ライクな記法
    Express.js を利用したことがある人ならばキャッチアップが容易です。
  7. ドキュメントが充実している
    LoopBack.js は、公式ドキュメントが充実しているため、学習コストが比較的低く、開発効率が向上します。

デメリット

  1. 学習コストが高い
    LoopBack.js は豊富な機能を持っているため、学習コストが高くなります。特に、複雑な API やセキュリティ機能を実装する場合は、深い知識が必要となります。
  2. フレームワークの柔軟性に欠ける
    LoopBack.js は、既に定義された基本機能や設計原則に従う必要があるため、フレームワークの柔軟性に欠ける場合があります。自由度が高いアプリケーションを開発する場合には、カスタム機能の実装が必要となる場合があります。
  3. プラグインの互換性が問題になる場合がある
    LoopBack.js は、多くのプラグインを提供していますが、プラグインの互換性が問題になることがあります。バージョンアップする際には、注意が必要となります。
  4. 一部の機能が重い
    LoopBack.js には、リモートメソッドやセキュリティ機能など、重い処理が含まれる機能があります。このため、一部の機能を使う場合には、パフォーマンスに影響を与える可能性があります。

環境構築

npm install -g loopback-cli
lb app
npm start

サンプルコード

import {get} from '@loopback/rest';

export class HelloController {
  @get('/hello')
  hello(): string {
    return 'Hello world!';
  }
}

筆者評価

LoopBack.js は、データソースへの接続や REST API の自動生成、ルーティング、認証・認可など、様々な機能を提供しているフルスタック Web アプリケーションフレームワークです。初心者にはやや敷居が高いかもしれませんが、公式ドキュメントが充実しており、開発効率が向上するため、中規模以上の Web アプリケーションの開発に向いています。

Adonisjs

Node.jsフレームワーク
Adonis.js

今海外で盛り上がっている、 フルスタックアプリケーション または、 API を開発するために、Node.js の MVC フレームワーク です。

非常多機能で既にバンドルされている機能を利用することで、複数のパッケージを選択する時間を節約することでき、開発者の負担を減らしてくれます。

また ORM をサポートしており、難解で面倒なデータベース操作を簡単にしてくれます。

メリット

  1. Laravel ライクなフレームワーク
    PHP フレームワークである、Laravel ライクな書き方で開発できます。
    Laravel を使用したことがある人ならば、すんなりキャッチアップできます。
  2. デフォルトで多彩な機能が使えます。
    ルーティング、バリデーション、マイグレーション機能が標準で備わっています。Aonisjs をインストールするだけで他機能をインストールする手間がかかりません。
  3. TypeScript が使用可能
    長い時間をかけ最近 V5 にアップデートされました。
    このアップデートには、TypeScript が組み込まれており、
    フレームワークのコアと周囲の全てのパッケージが TypeScript で書き直されています
  4. 処理速度が高速
    V4 では fastify に一歩届かない処理速度でしたが、現在は fastify とほぼ同様の処理速度になっています。
  5. 海外で盛り上がっている
    最近の V5 の影響か海外の開発者が増えています。
  6. セキュリティ
    Adonisjs は、XSS や CSRF などのセキュリティ攻撃に対して保護するためのセキュリティ機能を提供しています。
  7. ORM のサポート
    強力な ORM である Lucid ORM を提供しており、SQL や NoSQL など、さまざまなデータベースをサポートしています。
  8. コード生成ツール
    Adonisjs には、コード生成ツールが組み込まれており、開発者は簡単にモデル、マイグレーション、コントローラ、ミドルウェア、フォームなどを生成することができます。

デメリット

  1. 日本語ドキュメントが少ない
    現状英語の公式ドキュメントが存在しないため、英語ドキュメントを読み解かなくてはいけないです。
  2. 日本での盛り上がりがいまいち
    問題にあたったとき日本語記事が少ないので、日本人が使うには一癖ありそうです。
  3. 拡張性の制限
    Adonisjs は、MVC アーキテクチャに基づいているため、フレームワークの内部構造に結びついたアプリケーションを開発することになります。そのため、アプリケーションの拡張性が制限されることがあります。

環境構築

npm i -g @adonisjs/cli
adonis new project
adonis serve --dev

サンプルコード

// Handle GET request
Route.get('posts', async ({ view }) => {
  return view.render('posts/index')
})

// Handle POST request
Route.post('posts', async ({ request }) => {
  return request.body()
})

筆者評価 学習コストが高いことや、機能が多いために複雑であることが挙げられます。また、フレームワークのアップデートが頻繁であり、アップデートによって既存のコードが動かなくなることもあるため、注意が必要です。

残念ながら、人にお勧めできるようなフレームワークではないです。

Total.js

Node.jsフレームワーク
total.js

Total.js の主な特徴は、非常に高速なパフォーマンス、モジュール化されたアーキテクチャ、マルチプラットフォームサポート、統合されたオートローディング、多言語サポート、WebSockets などです。

このフレームワークは、MVC パターンをベースにしているため、アプリケーションの構造が簡単に理解できます。また、多数のビルトイン機能が提供されているため、独自のコードを書くことなく Web アプリケーションを開発できます。

さらに、非常に多くのデーターベースシステムと互換性があり、Ember,MongoDb などを使えます。

メリット

  1. モバイルデバイスや CMS サイトに最適化されたツール
    モバイルデバイス用の web アプリ開発や、CMS サイトを作成用に最適化されており、開発を高速化できます。
  2. MVC アーキテクチャ
    役割が分担されているため、保守性の高い開発を行えます。
  3. 高度に拡張可能で非同期のフレームワーク
    用意の拡張ができ、また公開できます。
  4. RESTful なルーティングメカニズムをフルサポート
    Express ライクなルーティングをサポートします。
  5. Web Socket とメディアストリーミングのフルサポート
    デフォルトで機能サポートされているため、モジュールを選定・インストールする必要がありません。

デメリット

  1. 小規模なコミュニティとドキュメンテーションの限定性: Total.jsは比較的新しいフレームワークであり、そのコミュニティや開発者の数は他のより成熟したフレームワークと比較して限定的かもしれません。そのため、解決策やサポートを見つけるためのリソースやドキュメンテーションの量が少ない場合があります。問題が発生した場合、助けを求めるための適切なサポートシステムがないか、解決策を見つけるのに時間がかかる可能性があります。

  2. 安定性と信頼性の未知数: Total.jsが比較的新しいフレームワークであるため、その安定性や信頼性については他の成熟したフレームワークと比較して未知数の要素があります。バグやセキュリティの脆弱性が見つかる可能性があり、それに対応するパッチやアップデートが遅れる可能性があります。より確立されたフレームワークと比較して、安定性や信頼性に関してリスクを考慮する必要があります。

  3. 少ないプラグインとモジュールの選択肢: Total.jsのエコシステムは、他のより成熟したフレームワークと比較しても限定的な場合があります。特定のタスクや機能を実現するためのプラグインやモジュールの数や品質が制限されているかもしれません。そのため、特定のニーズに対応するためには、自分でカスタムの実装を行う必要があるかもしれません。

環境構築

npm install total.js
cd project
node index.js

サンプルコード

// Initializes Total.js framework 4
require('total4');

// Registers a route
ROUTE('GET /', function() {
// this === Controller
this.json({ message: 'Hello world' });
});

// Registers a WebSocket route
ROUTE('SOCKET /', function() {
  // this === controller

  this.on('open', function(client) {
    client.send({ message: 'Hello' });
  });
  this.on('message', function(client, message) {
    console.log(message);
  });
});

// Launches a web server in "debug" mode
HTTP('debug');

筆者評価

Total.js は高速で柔軟な Web アプリケーションフレームワークであり、特にプロトタイプの開発に向いています。ただし、他のフレームワークと比較して知名度が低いため、開発者コミュニティーが少なく、情報収集が困難な場合があることに留意する必要があります。

Derby.js

Node.jsフレームワーク
Derby.js

サーバーとクライアント間のシームレスなデータ同期を行える Node.js のフルスタックフレームワークです。

メリット

  1. シームレスなデータ同期 Derby.js は、プラウザー、サーバー、データベース間でデータを自動的に同期されます。これは Racer と呼ばれる、データ同期エンジンが採用されているためです。
  2. マルチユーザーアプリケーションの作成が容易 シームレスなデータ同期を行えるため、整合性を取りやすいです。
  3. オフラインアプリケーション開発をサポートしている
  4. Express.js ベース
    Express.js の豊富な機能を継承しています。そのため、Express.js を使ったことがある開発者にとっては、比較的簡単に学習することができます。

デメリット

  1. ドキュメンテーションの限定性と小規模なコミュニティ: Derby.jsは比較的小規模なフレームワークであり、そのため公式のドキュメンテーションやリソースが限られている可能性があります。また、コミュニティも小規模であるため、問題解決やサポートを求めるためのリソースが制限されているかもしれません。新しい機能やアップデートのサポートに関しては、十分な情報を見つけることが難しいかもしれません。
  2. 成熟度と安定性の不確実性: Derby.jsは比較的新しいフレームワークであり、その成熟度や安定性については他のより確立されたフレームワークと比較して不確実性があります。バグやセキュリティの脆弱性が見つかる可能性があり、それに対応するパッチやアップデートが遅れる可能性があります。生産環境での利用を検討する際には、安定性と信頼性についてより詳細な調査が必要です。
  3. 技術スタックの制約: Derby.jsはRacerと呼ばれるデータ同期エンジンを採用しており、その特性により特定の技術スタックに制約が生じる可能性があります。この制約は、開発者が既存のツールやライブラリを利用する際に影響を与える可能性があります。他のフレームワークやライブラリとの統合性や相互運用性を検討する必要があります。

環境構築

npm install -g derby-cli
derby new <プロジェクト名>
cd <プロジェクト名>
node index.js

サンプルコード

const express = require('express');
const derby = require('derby');
const app = derby.createApp('hello', __filename);

app.get('/', function(page) {
  page.render('home');
});

app.loadViews(__dirname);

const expressApp = express();
expressApp.use(app.serveStatic());
expressApp.use(app.router());

const port = process.env.PORT || 3000;
expressApp.listen(port, function() {
  console.log(`Server listening on port ${port}`);
});

筆者評価

比較的新しいフレームワークであり、まだ多くの開発者が使用しているわけではありません。そのため、コミュニティのサポートが少なく、ドキュメンテーションも不十分な場合があります。また、派生した派生プロジェクトに移行する場合に、互換性の問題が発生することもあります。

総合的に考えると、Derby.js は、リアルタイム Web アプリケーションを構築する際には優れたフレームワークであると言えますが、現状ドキュメントが少なく、初心者にはお勧めできません。

まとめ

それぞれのフレームワークにはメリット・デメリットがあり、使用する場面によって最適なフレームワークが異なります。また、環境構築や Hello World のサンプルコードを用意することで、初めての利用者でも簡単に試すことができるようになっています。総評では、それぞれのフレームワークに対する評価を述べました。

これらのフレームワークの選択は、開発目的や要件、スキルセットなどに応じて行う必要があります。それぞれのフレームワークを比較検討し、プロジェクトの目的に合わせて最適なフレームワークを選びましょう。