Nest.jsの基本構成ガイド

Nest.jsの基本構成ガイド

投稿日: 2025年07月27日

Tips
要約
  • Nest.jsはTypeScriptをベースにした効率的でスケーラブルなサーバーサイドアプリケーション構築フレームワークである。
  • Nest.jsのプロジェクトは、コントローラー、サービス、モジュールを通じてHTTPリクエストを処理し、データ管理とビジネスロジックを分離している。
  • デコレータや依存性注入機能を利用することで、開発が柔軟かつ効率的に行える設計になっている。
音声で記事を再生

はじめに

転職先で、バックエンドNest.jsを使っているので、そのキャッチアップを現在しています!
今後、Nest.jsを使う人に参考になれば幸いです!

Nest.jsとは?

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

TypeScript をベースに設計されていますが、JavaScript でも使用可能です。

内部的には Express(デフォルト)や Fastify を使用でき、拡張性・再利用性・保守性の高いアプリケーション開発を支援します。

特徴

- 🔧 TypeScript 完全サポート(JavaScriptでも使用可能)

- 🏗️ モジュール設計でコードの再利用性が高い

- 🎯 依存性注入によるテスタブルなコード

- ⚡ デコレータを活用した宣言的なプログラミング

- 🔄 Express Fastify を選択可能

- 📐 OOPオブジェクト指向プログラミング) / FP関数型プログラミング) / FRP関数型リアクティブプログラミング) など複数の設計パラダイムに対応

プロジェクトセットアップ

Nest CLIを使用して、新しいプロジェクトを作成します。

$ npm i -g @nestjs/cli
$ nest new プロジェクト名

⚙️ より厳密なTypeScript設定にしたい場合
プロジェクト作成後、tsconfig.jsonファイルを開いて以下を追加・変更

{
  "compilerOptions": {
    "strict": true,           // 厳密チェックを有効
    "noImplicitAny": true   // 型指定なしの変数を禁止
  }
}

こうすることで、型がついていない部分をエラーを出して知らせてくれます。

Nest.jsのプロジェクト構成図


nest-project/
├── src/                          # ソースコードフォルダ
│   ├── app.controller.ts         # コントローラー(リクエスト処理)
│   ├── app.controller.spec.ts    # コントローラーのテストファイル
│   ├── app.module.ts             # ルートモジュール(アプリの設計図)
│   ├── app.service.ts            # サービス(ビジネスロジック)
│   └── main.ts                   # エントリーポイント
├── node_modules/                 # 依存パッケージ
├── package.json                  # プロジェクト情報・依存関係
└── tsconfig.json                 # TypeScript設定ファイル

app.controller.ts

コントローラー - HTTPリクエストを処理し、レスポンスを返す役割。
ルーティング(URLパス)を定義します。

app.controller.spec.ts

テストファイル - コントローラーの単体テストを記述。
コードの品質を保つために重要です。

app.module.ts

ルートモジュール - アプリケーション全体の設定を管理。
他のモジュールや依存関係をまとめる中心的な役割。


他で定義した認証機能のモジュール(auth.module)があったとしましょう。
このauth.moduleを使いたいとなった場合、app.moduleにインポートすることで、
認証機能のauth.moduleを使用できるという仕組みです。

app.service.ts

サービス - ビジネスロジックを記述。
データベース操作や外部API呼び出しなどの処理を担当。

main.ts

エントリーポイント - アプリケーションの起動ファイル。
NestFactoryを使用してアプリケーションインスタンスを作成。

具体的なNestアプリケーションでのリクエストの流れ

Nest.jsの基本構成ガイド|ShiftBブログ

Nest.jsでは、クライアントから送られるHTTPリクエストがアプリケーションの各コンポーネントを経由して処理され、最終的にレスポンスとしてクライアントに返されます。その流れは以下のとおりです:

① HTTPリクエスト(クライアントからの要求)

ユーザーがブラウザなどからAPIにアクセスすると、HTTPリクエストがNest.jsアプリケーションに送られます。


② Controller(コントローラーによるルーティングと制御)

リクエストはまず「コントローラー(Controller)」で受け取られます。
コントローラーはルーティング(どのURLに対してどの処理を実行するか)を担当し、リクエストを適切なサービスに渡します。


③ Service(サービスによるビジネスロジックの実行)

コントローラーから委ねられた処理は、「サービス(Service)」で実行されます。
ここでは、データの取得・加工・保存といったビジネスロジックが実装されており、必要に応じてデータベースなどにもアクセスします。


④ レスポンス(クライアントへ結果を返す)

サービスが処理した結果はコントローラーに戻り、最終的にHTTPレスポンスとしてクライアントに返されます。

✅ 開発の流れでいうとこうなります

  1. Next.js などのフロントエンドがリクエスト(GET, POST など)を送る

  2. AppController(あるいは別のController)がそのリクエストを受ける

  3. リクエストの処理内容に応じて、AppService(または他のService)を呼び出す

  4. サービス内でロジックを処理

  5. 処理結果を AppController に返して、フロントにレスポンスとして返す


おまけ

スケーラブル

システムやサービスが、利用者の増加やデータ量の増大など、状況の変化に応じて柔軟に規模の拡大・縮小ができる性質。

依存性注入

依存性注入を使うと、「本番用」と「テスト用」を簡単に切り替えられて、安全・効率よく開発できます!

モジュール設計

機能ごとに整理した箱に入れて、再利用や依存関係の管理を楽にする仕組み。

構造イメージ(Reactのコンポーネント設計に近い)

例えば、Reactで言えば:

UserComponent/ 
├── User.tsx ← 表示(Controllerに相当) 
├── userHooks.ts ← ロジック(Serviceに相当) 
└── index.ts

NestJSでは:

user/ 
├── user.controller.ts ← 外部との窓口(API) 
├── user.service.ts ← ビジネスロジック 
├── user.module.ts ← 上記を束ねる箱

デコレータ

デコレータは、クラス宣言、メソッド、アクセサ、プロパティ、またはパラメータにアタッチできる特別な種類の宣言のことです。

ざっくりいうと、クラスやメソッドを装飾してくれる機能です。
NestJSのコード例で示すと、@Controller@Get@Param などのことです。

シェア!

Threads
Loading...
記事一覧に戻る
Threads
0