Nest.jsの基本構成ガイド
投稿日: 2025年07月27日
転職先で、バックエンド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-project/
├── src/ # ソースコードフォルダ
│ ├── app.controller.ts # コントローラー(リクエスト処理)
│ ├── app.controller.spec.ts # コントローラーのテストファイル
│ ├── app.module.ts # ルートモジュール(アプリの設計図)
│ ├── app.service.ts # サービス(ビジネスロジック)
│ └── main.ts # エントリーポイント
├── node_modules/ # 依存パッケージ
├── package.json # プロジェクト情報・依存関係
└── tsconfig.json # TypeScript設定ファイル
コントローラー - HTTPリクエストを処理し、レスポンスを返す役割。
ルーティング(URLパス)を定義します。
テストファイル - コントローラーの単体テストを記述。
コードの品質を保つために重要です。
ルートモジュール - アプリケーション全体の設定を管理。
他のモジュールや依存関係をまとめる中心的な役割。
例
他で定義した認証機能のモジュール(auth.module)があったとしましょう。
このauth.moduleを使いたいとなった場合、app.moduleにインポートすることで、
認証機能のauth.moduleを使用できるという仕組みです。
サービス - ビジネスロジックを記述。
データベース操作や外部API呼び出しなどの処理を担当。
エントリーポイント - アプリケーションの起動ファイル。
NestFactoryを使用してアプリケーションインスタンスを作成。
Nest.jsでは、クライアントから送られるHTTPリクエストがアプリケーションの各コンポーネントを経由して処理され、最終的にレスポンスとしてクライアントに返されます。その流れは以下のとおりです:
ユーザーがブラウザなどからAPIにアクセスすると、HTTPリクエストがNest.jsアプリケーションに送られます。
リクエストはまず「コントローラー(Controller
)」で受け取られます。
コントローラーはルーティング(どのURLに対してどの処理を実行するか)を担当し、リクエストを適切なサービスに渡します。
コントローラーから委ねられた処理は、「サービス(Service
)」で実行されます。
ここでは、データの取得・加工・保存といったビジネスロジックが実装されており、必要に応じてデータベースなどにもアクセスします。
サービスが処理した結果はコントローラーに戻り、最終的にHTTPレスポンスとしてクライアントに返されます。
Next.js などのフロントエンドがリクエスト(GET, POST など)を送る
AppController
(あるいは別のController)がそのリクエストを受ける
リクエストの処理内容に応じて、AppService
(または他のService)を呼び出す
サービス内でロジックを処理
処理結果を 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
などのことです。