banner
ニュース センター
建設プロジェクト管理における確立された経験。

Nest.js の概要: 高いほど

Jul 19, 2023

マシュー・タイソン著

ソフトウェアアーキテクト、InfoWorld |

Next.js と混同しないでください。Nest.js は、JavaScript サーバー テクノロジに対する、より新しくユニークなアプローチです。 これには、Express や Fastify などの使い慣れたサーバーと、高レベルのアプリケーション設計の強化と簡素化を目的とした多数の有用な抽象化が必要です。 Nest.js は、プログラミング パラダイム、一次 TypeScript サポート、依存関係注入などの組み込み機能を独特に組み合わせたおかげで、ここ数年で着実に人気が高まっています。

Nest.js は JavaScript エコシステムへの興味深い貢献であり、注目に値します。 これは、サーバーサイド JavaScript および TypeScript を使用するときに覚えておくべき優れたツールです。

この記事では、ルーティング、コントローラー、プロデューサー (依存関係の注入)、ガードによる認証などの例を使用して、Nest.js をざっと見ていきます。 Nest.js モジュール システムについても理解できます。

この例は、パスタのレシピのリストを管理するために使用されるアプリケーションです。 実際のデータセットを管理する依存関係が挿入されたサービスと、すべてのレシピをリストしたり、ID によって単一のレシピを回復したりするために使用できる RESTful API が含まれます。 新しいレシピを追加するための単純な認証済み PUT エンドポイントもセットアップします。

新しいプロジェクトの足場を築くことから始めましょう。 それができたら、例を見てみましょう。

Nest.js コマンドライン インターフェイスを使用すると、$ npm install -g @nestjs/cli で Nest をグローバルにインストールすることから始めて、簡単なアプリケーション レイアウトをセットアップできます。 create コマンドに加えて、nestjs には、再利用可能なデザインを共有するための Generate などの便利な機能が含まれています。 グローバルにインストールすると、それ以外にもアクセスできるようになります。

これで、 $nest new iw-nest を使用して新しいアプリケーションを作成できます。 必要なパッケージ マネージャー (npm、yarn、または pnpm) を選択できます。 このデモでは、pnpm を使用します。 関係なくプロセスは同じです。

新しい /iw-nest ディレクトリに移動し、$ pnpm run start で開発サーバーを起動します。 localhost:3000 にアクセスすると、アプリケーションが実行されていることを確認できます。「Hello, World!」というメッセージが表示されます。 メッセージ。 このメッセージは、iw-nest/src/app.controller.ts から送信されています。 そのファイルを見ると、挿入されたサービスを使用していることがわかります。 リスト 1 に示すように、レシピのリストを返す新しいコントローラー (src/recipes.controller.ts) を作成してみましょう。

リスト 1 は、Nest.js におけるルーティングの基本を示しています。 @Controller('recipes') アノテーションを使用して、/recipes のルートを持つコントローラーとしてクラスを定義していることがわかります。 getRecipes() メソッドには、@Get() で GET メソッドを処理するためのアノテーションが付けられます。

現時点では、このコントローラーは /recipes GET をハードコーディングされた応答文字列にマッピングするだけです。 Nest.js がこれを提供する前に、新しいコントローラーをモジュールに登録する必要があります。 モジュールは Nest のもう 1 つの重要な概念であり、アプリケーション コードを整理するために使用されます。 この場合、リスト 2 に示すように、/src/app.module.ts を開いてコントローラーを追加する必要があります。

Nest.js の依存関係注入フレームワークは、Java エコシステムの Spring を思い出させます。 Nest.js は、他の付加機能がなくても、依存関係の注入が組み込まれているというだけでも検討する価値があります。

サービスプロバイダーを定義し、それをコントローラーに接続します。 これは、アプリケーションをレイヤーに整理しておくためのきれいな方法です。 新しいサービス クラス /src/recipes.service.ts をリスト 3 に示します。

このサービス プロバイダーを使用するには、リスト 4 に示すように、それを app.module.ts ファイルに追加する必要もあります。

モジュールはアプリケーションを編成するのに適した方法です。 これらは論理的なグループ化メカニズムとして機能し、最も基本的なモジュールが明確に定義され、その他のモジュールがそれらに依存する階層構造を提供します。

これで、リスト 5 に示すように、RecipesController でサービスを使用できるようになりました。依存関係注入を初めて使用する場合、これは多くの余分な作業のように思えるかもしれません。 しかし、標準化された方法でアプリケーション全体でクラスを定義して利用できる機能は、システムが成長するにつれてアプリケーション アーキテクチャにとって大きな恩恵をもたらす可能性があります。