NestJSでのサーバーサイドアプリケーション開発のことはじめ

## はじめに

近年、Webアプリが扱うデータ量や機能は増え続け、サーバーサイドには高いパフォーマンスとスケーラビリティが求められます。そこで注目されているのが、Node.js上で動作するフレームワーク「NestJS」です。

今回の記事は、NestJSの基本的な概念と使い方についてまとめたものになります。

### **（宣伝コーナー）**

現在、弊社では様々な開発プロジェクトが溜まっており、一緒に開発に協力いただけるフリーランスの方を募集しています！

それこそNestJSを使うレベルの大規模開発も多数あります。

大規模な開発経験が豊富な方も、そのようなプロジェクトにチャレンジしていきたい方も、是非下記フォームに回答して、弊社の開発プロジェクトに参加してください！

👉 フォームは[こちら](https://docs.google.com/forms/d/e/1FAIpQLSfY9lckFjAJ_Ddc4rdHDSIFoV4NFHw1q2HriK2aa_jvVhp8QQ/formResponse)

ご回答のほど、お待ちしております！

## NestJSとは？（ざっくり）

NestJSは、TypeScriptで書かれたモダンなサーバーサイドフレームワークで、ExpressやFastifyなどをベースに、より高度で大規模なアプリケーション開発をサポートしています。優れたアーキテクチャパターン、強力なDI（依存性注入）の仕組み、デコレーターによる分かりやすいコード記述ができることが特徴です。

### NestJSの各概念

NestJSでは、アプリケーションを「モジュール」「コントローラー」「サービス」などの概念で構成します。これは、アプリを整理してスケーラブルに保つ「箱」を用意するイメージです。

### モジュール（Module）

**モジュール**は、関連する機能をひとまとめにする「機能別のフォルダ」的な存在です。

- 例：ユーザーに関する処理を`UsersModule`、商品に関する処理を`ProductsModule`といったように分ける
- 大規模化しても「どの機能がどこにあるか」がわかりやすくなる

### コントローラー（Controller）

**コントローラー**は、受け取ったリクエストを処理してレスポンスを返す「窓口」役です。

- ユーザーが`/users`にアクセスするとき、コントローラーは「それならユーザー関連の処理をしましょう」とサービスに依頼し、結果を返す
- UIやHTTPリクエストとのやりとりを担当する前線部隊

### サービス（Service）

**サービス**は、実際のビジネスロジック（データ操作や計算など）を行う、いわば中心部のイメージです。

- コントローラーが「ユーザーの一覧が欲しい」と指示をすると、サービスがデータベースから情報を取ってきて、コントローラーに返す
- ロジックをここに集約することで、コントローラーはスリムになり、テストや保守がしやすくなる

このように、モジュールで機能をまとめ、コントローラーが入口、サービスが中核となる構成で、大規模でも迷子になりにくいアプリが作れます。

## NestJSの始め方（環境構築）

### 必要な準備

- **Node.js の準備**
- **npmまたはyarnの準備**
- **TypeScriptの基本知識**（クラス、型など）

### Nest CLIを使ったプロジェクト作成

NestJSには専用のCLIがあり、プロジェクト初期化やファイル自動生成が可能です。

1. CLIのインストール（グローバル）

```bash
npm install -g @nestjs/cli
```

1. 新規プロジェクト作成（ここでは `my-app` という名前とします）

```bash
nest new my-app
```

対話プロンプトが走るので、パッケージマネージャー等選択しましょう。

1. プロジェクトへ移動してサーバー起動

```bash
cd my-app
npm run start:dev
```

`http://localhost:3000`へアクセスすると動作確認できます。

## Nest CLIでのコード自動生成

Nest CLIを使えば、モジュール、コントローラー、サービスなどをコマンドから自動生成できます。これにより、初期設定やファイル作成の手間が減り、目指すべきコード構造を自然に管理できます。

### モジュール作成

```bash
nest generate module users
```

`src/users/users.module.ts`が自動生成されます。

### コントローラー作成

```bash
nest generate controller users
```

`src/users/users.controller.ts`が作成され、`users.module.ts`にも自動登録。

### サービス作成

```bash
nest generate service users
```

`src/users/users.service.ts`が作成され、同様にモジュールに登録。

## 簡単なサンプル

以下は、シンプルなNestJSのサンプルコードです。ここではモジュール分割はありませんが、実際にはモジュールを作って機能ごとに整理していくのが基本になります。

```tsx
// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [], // 他のモジュールをインポート可能
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
```

```tsx
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}
```

```tsx
// app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'こんにちは、NestJS！';
  }
}
```

`npm run start:dev`で起動し、`http://localhost:3000`にアクセスすれば「こんにちは、NestJS！」が表示されます。

## まとめ

NestJSは、Node.jsとTypeScriptを基盤に、高スケーラビリティなサーバーサイドアプリを構築するための強力なフレームワークです。モジュール、コントローラー、サービスといった概念でコードを整理し、DIで依存関係を明確化。CLIでのコード自動生成でスムーズに開発を始められます。

「最初はちょっと覚えること多そう」と思うかもしれませんが、慣れると手放せなく感じるかも、、？

今回は入門的なものですが、今後NestJSを使った実践レベルのコード例も見せていけたらと思います！

## おわりに

繰り返しになりますが、弊社では、フリーランスエンジニアの方を募集しております！

熱意を持って新しいプロジェクトに挑戦したい方、様々な大規模開発プロジェクトに興味のある方は、下記フォームにてあなたの経歴をご回答ください！

👉 フォームは[こちら](https://docs.google.com/forms/d/e/1FAIpQLSfY9lckFjAJ_Ddc4rdHDSIFoV4NFHw1q2HriK2aa_jvVhp8QQ/formResponse)

たくさんのご応募、お待ちしております！