フロントエンド開発者が使用するトップ Node.js フレームワークの紹介

フロントエンド開発者が使用するトップ Node.js フレームワークの紹介

Node.js を使用すると、開発者は JavaScript のみを使用してフロントエンドおよびバックエンド アプリケーションを構築できます。つまり、バックエンドには PHP、フロントエンドには JavaScript など、異なる言語間でコンテキストを切り替える必要がなくなりました。

Node.js はかつては素人向けの言語だと考えられていましたが、Web に大きな革命をもたらしました。Node.js が登場する前に開発者だった場合、サーバー側のコードを記述するには、PHP などのまったく別の言語を学習する必要がありました。ただし、Node.js とその広大なエコシステムのおかげで、フロントエンド開発者は JavaScript を使用してバックエンドを操作できるようになりました。

Node.js を使用すると、ライブ チャット アプリケーション、マイクロサービス、コマンド ライン ツール、Web サーバー、API など、実稼働対応のアプリケーションを作成できます。Node.js はイベント駆動型モデルであるため、多数の同時リクエストを処理できます。多くの大企業は本番環境で Node.js を使用しています。

この記事では、いくつかの人気のある Node.js フレームワークを、使用方法、機能、デメリット、ダウンロードなどに基づいて比較します。

1. なぜフレームワークを使用するのですか?

サーバー側ロジックの作成は複雑で、アプリケーション全体を最初から作成するのは時間がかかります。開発者は、アプリケーションを最初から作成して時間を無駄にするのではなく、ビジネス ロジックに集中する必要があります。ヘルパー関数、ツール、ルールを提供することで、フレームワークが面倒な作業を処理できるため、アプリケーションを迅速に構築し、きれいなコードを書くことができます。

多くの Web フレームワークは、Web プロトコルを高レベルの API に抽象化し、Web アプリケーションを構築するための豊富なインターフェイスを提供します。通常、これらのフレームワークは Node.js の基礎となる組み込み機能を使用し、Web サーバーでより複雑な機能を作成するためのより単純な API を提供します。もちろん、フレームワークはコードに抽象化を追加しますが、大規模な Web アプリケーションを構築する場合に便利です。

各フレームワークは問題を解決しようとしますが、各フレームワークの原則は異なります。ただし、すべての Node.js フレームワークには、URL のコンテンツへのマッピング (ルーティングなど)、動的コンテンツのテンプレートなど、いくつかの共通点があります。

2. Node.js フレームワークの種類

新しいフレームワークを学ぶことに興奮しているかもしれませんが、利用可能なフレームワークの膨大な数に圧倒されてしまうかもしれません。以下の表は、プロジェクトに最適なフレームワークを理解するのに役立ちます。

画像.png

フレームをグループ化するにはさまざまな方法があり、一部のフレームは複数のカテゴリに属する​​ことができます。たとえば、REST API の下に NestJS を含めましたが、フルスタック MVC フレームワークとして使用することもできます。あるいは、REST API サーバーを直接起動することもできます。

2.1 HTTPサーバーフレームワーク

Express HTTP サーバー フレームワークに基づいており、HTTP 動詞とルーティングに基づいたアプリケーションを構築するのに役立ちます。人気のある HTTP サーバー フレームワークには、Fastify (バックエンド開発用の低オーバーヘッド フレームワーク)、Koa (Express チームによって設計)、Hapi (NestJS の代替) などがあります。

2.2 MVC フレームワーク

MVC はModel、(モデル)、View(ビュー)、Controller(コントローラー) の略で、アプリケーションの機能を 3 つの部分に分割するソフトウェア アーキテクチャ設計パターンです。

画像.png

モデルはデータ ロジックを処理し、データがどのように保存されるかを表し、ビューはユーザーに情報を提示する責任を負い、コントローラーはリクエスト フローを処理し、モデルとビューの間で情報を委任する責任を負います。コントローラーはモデルからデータ情報を取得し、そのデータをビューに渡します。

SailsStrapiAdonisJS はMVC アーキテクチャをサポートしているため、アプリケーションの構築にあまり時間をかけたくない場合は、これらを使用できます。さらに、MVC アーキテクチャを採用すると、他の開発者がコードを理解しやすくなります。

2.3 フルスタック MVC フレームワーク

MeteorFeathers は、クライアント側とサーバー側の両方で JavaScript を使用するフルスタックの Node.js フレームワークです。これらのフレームワークには、テンプレート エンジン、WebSocketライブラリなどを含む多くの機能が付属しています。

2.4 REST API フレームワーク

NestJSLoopback、およびRestifyは REST API フレームワークです。これらのフレームワークを使用して、高速な Node.js サーバーを起動したり、CRUD リクエストを処理したりできます。

3. いくつかの統計

以下のグラフは、コントリビューターの数、npm での月間ダウンロード数、フレームワークの古さなど、これらのフレームワークの人気の高さを示しています。

GitHub のスター 毎月のダウンロード 貢献者
急行 59.1k 27.8M 295 13年
それで 33.4k 1.3M 226 9年
ハピ.js 14.1k 665k 212 11年
Nest.js 52.6k 1.9k 353 6年間
Socket.io 57.2k 5.3k 204 13年
Sails.js 22.3k 36.2k 238 11年
高速化 25.8k 842.1k 593 6年間
ループバック 13.3k 45.8k 133 9年
アドニス 13.3k 141 70 7年間
再修正 10.5k 129.8k 206 11年
ストラップ 50.4k 16.3k 827 7年間
流星 43.1k 1.4k 674 10年

これらのフレームワークのほとんどはかなり古いもので、最もダウンロード数が多い主要なフレームワークは npm ですExpressその後、 、 、 がExpressありますGitHub での人気に関しては、トップで、次に、 、が続きます。KoaFastifyExpressSocket.ioMeteorNestJSStrapi

Express最も人気のある 5 つのフレームワーク、 、KoaSocket.ioNestJSレビューしFastify、その機能とハイライトを探ります。

4.エクスプレス

これは間違いなくExpressNode.js フレームワークの王様であり、この記事の執筆時点では npm で毎週約 2,800 万ダウンロードされています。これは、Node.js の事実上の Web サーバー フレームワークとみなされます。

Express2010 年にリリースされ、JavaScript で書かれています。この記事の執筆時点では、Express最新の安定バージョンは V4.18.1 です。ただし、新機能の導入に伴い、ExpressV5.0.0 への移行が進行中ですが、この記事の執筆時点ではまだベータ テスト中です。

Ruby は、その効率性と保守性によりSinatraExpressフレームワークからインスピレーションを受けました。Web アプリケーションを迅速に構築して実行できるように設計されており、軽量で高速、最小限で目立たないため、開発者に好評です。Express

4.1 Express の機能と利点

Express は、わずか数行のコードで処理を高速化するルーティングミドルウェアなどの機能を提供します。Express は Node.js の単なる薄い層であり、Node の非同期の性質により、複数のリクエストを同時に実行できます。その結果、Express は高パフォーマンスで高速な開発エクスペリエンスを提供します。

Express の堅牢で回復力のあるルーティング システムは、RouteExpress アプリケーション オブジェクトから派生したメソッドを通じてリクエストを処理するため、特定のエンドポイントへの応答を作成できます。

Express は物事を整理するための普遍的な方法を提供するわけではなく、厳格なルールもないため、アプリケーションをどのように構築するか、またはどのミドルウェアを使用するかを決定するのはユーザー次第です。たとえば、MVCMVPMVVMなどのデザインパターンを自由に選択できます。ただし、最も一般的なのはMVCパターンです。

Express を使用すると、サードパーティのサービスやミドルウェアを簡単に統合して、リクエスト、Cookie ヘッダー、セッション、セキュリティ ヘッダーなどの解析などのタスクを実行できます。これにより、認証、データベース アクセス、セッション管理などに追加のライブラリを使用できるようになります。 。SQL または NoSQL データベースと簡単に統合できます。

Express システムは、HTML の生成を簡素化するために 20 を超えるテンプレート エンジンをサポートしています。人気のあるものにはPugMustacheや などがありますEJS

Express には大規模なコミュニティがあり、詳細なドキュメントがあり、学習曲線が浅いです。JavaScript に慣れている場合は、簡単に習得できます。実際、ほとんどのフレームワークは Express 上に構築されています。Express は、ミドルウェアとルーティングがプロジェクトをモジュール化しているため、テストも簡単です。

4.2 Expressのデメリット

Express では、エンドポイントやミドルウェアのセットアップなど、多くの集中的なタスクが必要です。Express はスタンドアロンであるため、ライブラリと機能を自分で設定する必要があります。Express コードを作成していると、コールバック地獄に遭遇することがあります。Promise を使用すると、この問題を解決できます。Express のアーキテクチャにより、開発者のチームによる大規模プロジェクトの管理は困難になる場合があります。

4.3 Express を使用するのはどのような場合ですか?

Express は非常に柔軟性が高いため、あらゆるサイズの単一ページ、複数ページ、またはハイブリッド Web およびモバイル アプリケーションを構築できます。単純な静的ファイル サーバーの構築から JSON API に移行できます。

5. それで

Koa は Express の現代版です。より軽く、より表現力が豊かになり、より堅牢になりました。Express と同様に、Koa を使用して Web サービスを作成できます。実際、Koa フレームワークは Express の背後にあるチームによって設計されており、Express の未来とも呼ばれます。チームは Express のミドルウェア パッケージの数を減らし、最新の JavaScript 構文で改良し、開発者により多くの自由を与えました。

5.1 Express と Koa の違い

画像.png

Koa と Express を比較すると、Koa では Express にある機能のほとんどが削除されていることがわかります。Koa は非常に流動的で、すぐに使用できるルーティング、テンプレート エンジン、または JSONP を提供しません。この背後にある主な理由は、Koa を高速化し、開発者により多くの自由を与え、コード作成時の複雑さを軽減することです。

Koa はさらに多くのカスタマイズ オプションも提供します。したがって、開発者がミドルウェアを使用したい場合は、自分で作成することも、組み込みのミドルウェアを使用することもできます。Koa は、Koa ルーター、Koa EJS テンプレート、Koa BodyParser などの追加モジュールを提供します。

5.2 Koaの機能

Koa は、ジェネレーター、非同期関数、Node.js ランタイムなど、JavaScript ES6 言語の最新機能に重点を置いています。Koa は、Promise ベースのストリームと async-await 構文を使用してコールバックを排除し、コードをより管理しやすく、明確にし、読みやすくします。Koa は ES2015 ジェネレーター構文を使用して、コールバックの代わりにミドルウェアを定義します。yield キーワードを使用して終了し、再入力できます。

Koa はcontext オブジェクトを使用します。オブジェクトはreq/resオブジェクトを 1 つのオブジェクトにカプセル化し、開発者がいくつかの便利なメソッドを使用して API をより効率的に構築できるようにします。最後に、Koa はカスケード ミドルウェアを使用します。ミドルウェアは、最後のミドルウェアに到達するまで、非同期関数を通じてカスケードで実行されます。

5.3 Koa の利点

Express の知識がある場合、Koa は習得が簡単で、わずか 600 行のコードで、開発者がより薄いミドルウェアを作成するのに役立ちます。Express と比較して、Koa は 1 秒あたりより多くのリクエストを処理するパフォーマンスが優れており、より優れた制御が可能でありtry…catch、よりモジュール化されています。Koa ではモジュール化されているため、大規模なコード ベースのリファクタリングが簡単で、アプリケーションと API を開発するための最小限のインターフェイスが提供されます。

5.4 Koaの欠点

Koa は Express スタイルのミドルウェアと互換性がなく、ES6 ジェネレーターを使用します。また、ES6 ジェネレーターは他のフレームワークのミドルウェアと互換性がありません。ジェネレーターを使用すると、他の Node.js フレームワークへの将来の移行がより困難になり、フレームワークとの緊密な結合が生じます。最後に、Koa には組み込みミドルウェアがなく、req、 、resなどのnext従来のミドルウェアはKoa では動作しません。

5.5 Koa をいつ使用するか?

Koa は、スケーラブルな軽量 Web アプリケーション、HTTP API、およびシングルページ Web アプリケーションの構築に最適です。

6. Socket.io

Socket.io は主に、QQ や WeChat などのリアルタイム チャット アプリケーションを構築するために使用されます。Web クライアントとサーバー間の双方向通信を確立します。

画像.png

これをよりよく理解するには、クライアントとサーバーが通常どのように HTTP 経由で通信するかを理解する必要があります。クライアントがリクエストを行い、サーバーがクライアントのリクエストに応答します。ただし、これは一方向の通信であり、HTTP プロトコルはステートレスであり、サーバーがアクセスしているさまざまなクライアントすべての IP アドレスを見つけることが難しいため、サーバーはクライアントと積極的に通信できません。

場合によっては、サーバーはクライアントをリアルタイムで更新する必要があります。たとえば、チャット アプリケーションがある場合、サーバーは新しいメッセージをすべてのユーザーに即座にブロードキャストする必要があります。HTTP 接続を使用する代わりに、WebSocketフロントエンドとバックエンド間のリアルタイムの双方向通信を可能にする HTTP 接続を使用する必要があります。

Socket.io には、ブラウザ上で実行されるクライアント側ライブラリと Node.js 用のサーバー側パッケージの 2 つの部分があります。ブラウザとサーバーの両方でコードを実行できるため、両方のコンポーネントにはほぼ同じ API があります。これは Node.jsEventEmitterモデルに従います。WebSocket が機能するために、クライアントはサーバーへの永続的な接続を開き、両者は相互にメッセージを送信できるようになります。

6.1 Socket.ioの特徴

Socket.io は、Node.js アプリケーションに信頼性の高い WebSocket 接続を提供します。少ないコード行でリアルタイム分析を実現し、高速なサポートを提供します。

サーバーとクライアントがハンドシェイクに同意しない場合、Socket.io はロング ポーリングに戻り、WebSocket、Flash、XHR、JSONP などの他のプロトコルをサポートします。複数のブラウザをサポートできます。

Socket.io はバイナリと多重化もサポートしています。blob画像、音声、ビデオなどのあらゆるデータをクライアントまたはサーバー側から送信できます。

さらに、Socket.io フレームワークは自動再接続サポートを提供します。クライアントが切断された場合、手動で停止しない限り、再試行が続行されます。最後に、Socket.io は自動エラー検出と修正機能を備えており、プロキシやプライベート ファイアウォールが存在する場合でも深い接続を確立できます。

6.2 Socket.io の利点

Socket.io にはミドルウェアを追加するためのサポートが組み込まれており、オーディオおよびビデオのストリーミング機能をセットアップするためのより簡単な方法を提供します。簡単に始めることができ、アプリケーションを迅速に開発できます。最後に、Socket.io には大規模なコミュニティがあるため、学習リソースを簡単に見つけることができます。

6.3 Socket.ioの欠点

Socket.io はコールバックを使用し、メッセージを受信したことを確認するメッセージ保証を提供しません。したがって、この状況に対処するためにアプリケーションにカスタム ロジックを記述する必要があります。

6.4 Socket.io をいつ使用するか?

Socket.io は、ビデオ会議アプリケーション、インタラクティブ ストリーミング、マルチプレイヤー ゲーム、動的に更新されるソーシャル ネットワーキング サイトに役立ちます。

7. 高速化

Hapi と Express からインスピレーションを得た Fastify は、最速の Web フレームワークであると主張しており、ベンチマークによると、Express の 2 倍高速です。Fastify が Express より遅れている唯一のケースは、空のリクエストの処理です。Fastify は、開発者のエクスペリエンスを維持しながら、強力なプラグイン アーキテクチャを通じてパフォーマンスのオーバーヘッドを最小限に抑えることに重点を置いています。

2021 年の JS 調査によると、Express が 81% で最も使用されているバックエンド フレームワークであり、次に Next.js が 45% です。Fastify が 11% で続きます。

7.1 Fastifyの特徴

Fastify は JSON を自動的に解析し、効率的なレンダリングと高速なルーティングを提供します。その結果、パフォーマンスが高く、1 秒あたり最大 30,000 リクエストを処理できます。

Fastify は、200 のプラグイン、フック、デコレータのエコシステムで拡張可能です。Fastify は TypeScript ともうまく連携し、AWS Lambda をサポートし、GraphQL アダプターを備え、軽量のロガーが付属しています。

最後に、Fastify はアプリケーションを正常にシャットダウンします。新しい接続の受け入れを停止し、プロセスを終了する前に未処理の「キープアライブ」接続をすべて閉じます。

7.2 Fastifyの利点

Fastify は、本番環境でのオーバーヘッドゼロ、自動セキュリティとデータ検証、セマンティック バージョニングの長期サポート、およびコントローラーで非同期コードを記述するためのよりクリーンな構文を提供します。Fastify を使用するとテストが簡単になり、開発者にとって素晴らしいエクスペリエンスが得られます。

7.3 Fastifyの欠点

Fastify には巨大なコミュニティがありません。したがって、バグが発生した場合は、自分で修正する必要がある場合があります。さらに、Fastify には共有所有権の原則があり、PR を作成してコミュニティに貢献できることを意味します。

7.4 Fastify をいつ使用するか?

Microsoft、Hotstar、Future Foundry はすべて Fastify を使用しています。Fastify を使用して Web アプリケーションを作成することもできますが、json ベースの API を構築するとさらに効果的です。Fastify は、小規模プロジェクトと大規模プロジェクトの両方に適しています。マイクロサービスやサーバーレスに簡単に移行したり、元に戻ったりすることができます。

8.NestJS

NestJS は、効率的で信頼性が高く、スケーラブルなサーバー側アプリケーションを構築することで知られる、進歩的で柔軟な汎用 REST API フレームワークです。

Nest は最新の JavaScript を使用し、すぐに TypeScript を使用およびサポートします。これは、オブジェクト指向プログラミング、関数型プログラミング、および関数型リアクティブ プログラミングの要素を組み合わせたものです。

NestJS は内部的に Express 上に構築されていますが、Fastify を使用して構成することもできます。NestJS は Angular からインスピレーションを受けており、依存関係の注入、モジュール性、デコレーターの概念を使用しています。MVC アプリケーション、REST、GraphQL API を構築できます。NestJS は、組み込みの Apollo GraphQL ラッパーを提供します。

8.1 NestJSの特徴

NestJS は、作業効率を向上させ、開発プロセスを簡素化するための強力な CLI を提供します。また、すぐに使用できる REST および GraphQL API もサポートされており、これらを使用してフルスタック アプリケーションを構築できます。

NestJS は、マイクロサービスベースのアプリケーションを構築するための既製のオプションを提供します。NestJS サーバーを起動すると、コントローラー、モジュール、プロバイダーなどのいくつかの単純なコンポーネントに基づく明確なアーキテクチャが形成されます。これにより、アプリケーションをマイクロサービスに簡単に分割できます。

最後に、NestJS は、さまざまなアプリケーション テストの専用設定を含む、アプリケーションの単純な単体テストを提供します。

8.2 NestJS の利点

NestJS は、JavaScript の柔軟性と TypeScript の堅牢性により、簡単に拡張できます。これには、詳細かつよく管理されたドキュメントが含まれており、コードベースの開発と保守が活発に行われており、MIT ライセンスを使用するオープンソースです。

NestJS コード生成は、アプリケーションの開発を迅速化するのに役立ち、厳密な設計原則に従い、開発者向けに多くの基本的な開発作業を実行します。NestJS のコミュニティは急速に成長しています。

8.3 NestJS の欠点

NestJS は Angular の概念を使用しているため、Angular に慣れていない開発者にとって、最初は NestJS を理解するのが難しいかもしれません。Express と比較すると、NestJS コミュニティは小規模です。

8.4 NestJS をいつ使用するか?

NestJS は、複雑な大規模なエンタープライズ アプリケーションの構築に最適です。

9. 適切なフレームワークを選択する

この記事では、フレームワークを使用する理由、フレームワークの種類、さまざまなフレームワークに関する統計など、多くのことを取り上げます。次に、Express、Koa、Socket.io、Fastify、NestJS を含む 5 つの最も人気のあるフレームワークを検討しました。この記事で、各フレームワークの違いをよりよく理解していただければ幸いです。

おすすめ

転載: blog.csdn.net/p1967914901/article/details/129142999