はじめに
近年、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があり、プロジェクト初期化やファイル自動生成が可能です。
- CLIのインストール(グローバル)
npm install -g @nestjs/cli
- 新規プロジェクト作成(ここでは
my-app
という名前とします)
nest new my-app
対話プロンプトが走るので、パッケージマネージャー等選択しましょう。
- プロジェクトへ移動してサーバー起動
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を使った実践レベルのコード例も見せていけたらと思います!
おわりに
繰り返しになりますが、弊社では、フリーランスエンジニアの方を募集しております!
熱意を持って新しいプロジェクトに挑戦したい方、様々な大規模開発プロジェクトに興味のある方は、下記フォームにてあなたの経歴をご回答ください!
👉 フォームはこちら
たくさんのご応募、お待ちしております!