🕸️

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

2024/12/13に公開

はじめに

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

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

(宣伝コーナー)

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

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

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

👉 フォームはこちら

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

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のインストール(グローバル)
npm install -g @nestjs/cli
  1. 新規プロジェクト作成(ここでは my-app という名前とします)
nest new my-app

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

  1. プロジェクトへ移動してサーバー起動
cd my-app
npm run start:dev

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

Nest CLIでのコード自動生成

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

モジュール作成

nest generate module users

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

コントローラー作成

nest generate controller users

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

サービス作成

nest generate service users

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

簡単なサンプル

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

// 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 {}
// 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();
  }
}
// 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を使った実践レベルのコード例も見せていけたらと思います!

おわりに

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

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

👉 フォームはこちら

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

Discussion