1.NestJS CLIをインストールする
NestJS CLI は、NestJS アプリケーションの作成、開発、保守に役立つコマンドライン ツールです。 CLI は、ボイラープレート コードを自動的に生成し、プロジェクト構造を管理し、開発サーバーを実行します。
システム要件
- Node.js >= 18.x (20 LTS または 22 LTS を推奨)
- npm >= 9.x またはyarn >= 1.22 または pnpm >= 8.x
# Kiểm tra Node.js version
node --version # v22.x.x
# Cài đặt NestJS CLI global
npm install -g @nestjs/cli
# Kiểm tra CLI version
nest --version # 11.x.x
# Xem tất cả commands
nest --help
2. プロジェクトの初期化
# Tạo project mới
nest new my-nestjs-app
# CLI sẽ hỏi package manager
# ? Which package manager would you ❤️ to use?
# npm
# yarn
# ❯ pnpm
# Hoặc chỉ định sẵn
nest new my-nestjs-app --package-manager pnpm
# Tạo project với strict mode
nest new my-nestjs-app --strict
3. フォルダー構造
my-nestjs-app/
├── src/
│ ├── app.controller.ts # Controller mẫu
│ ├── app.controller.spec.ts # Unit test cho controller
│ ├── app.module.ts # Root module
│ ├── app.service.ts # Service mẫu
│ └── main.ts # Entry point
├── test/
│ ├── app.e2e-spec.ts # E2E test
│ └── jest-e2e.json # Jest E2E config
├── .eslintrc.js # ESLint config
├── .prettierrc # Prettier config
├── nest-cli.json # NestJS CLI config
├── package.json
├── tsconfig.json # TypeScript config
└── tsconfig.build.json # Build-specific TS config
4. 重要なファイルを理解する
main.ts — エントリ ポイント
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
// Tạo NestJS application instance từ root module
const app = await NestFactory.create(AppModule);
// Cấu hình global prefix (optional)
app.setGlobalPrefix('api/v1');
// Bật CORS
app.enableCors({
origin: ['http://localhost:3000'],
credentials: true,
});
// Lắng nghe trên port
await app.listen(3000);
console.log(`Application is running on: ${await app.getUrl()}`);
}
bootstrap();
app.module.ts — ルートモジュール
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [], // Các module khác cần import
controllers: [AppController], // Controllers trong module này
providers: [AppService], // Services/Providers
})
export class AppModule {}
app.controller.ts — サンプル コントローラー
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller() // Route prefix: '' (root)
export class AppController {
// AppService được inject tự động qua constructor
constructor(private readonly appService: AppService) {}
@Get() // GET /
getHello(): string {
return this.appService.getHello();
}
}
app.service.ts — サンプルサービス
import { Injectable } from '@nestjs/common';
@Injectable() // Đánh dấu class này có thể được inject
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
5. 開発サーバーを実行する
# Development mode (watch mode - auto reload)
npm run start:dev
# Debug mode
npm run start:debug
# Production mode
npm run start:prod
# Output:
# [Nest] 12345 - 03/30/2026, 12:00:00 PM LOG [NestFactory] Starting Nest application...
# [Nest] 12345 - 03/30/2026, 12:00:00 PM LOG [InstanceLoader] AppModule dependencies initialized
# [Nest] 12345 - 03/30/2026, 12:00:00 PM LOG [RoutesResolver] AppController {/}: +1ms
# [Nest] 12345 - 03/30/2026, 12:00:00 PM LOG [RouterExplorer] Mapped {/, GET} route
# [Nest] 12345 - 03/30/2026, 12:00:00 PM LOG [NestApplication] Nest application successfully started
# Test API
curl http://localhost:3000
# Hello World!
6. NestJS CLI 生成コマンド
CLI はコードを自動的に生成できます。
# Generate resource đầy đủ (CRUD)
nest generate resource users
# ? What transport layer do you use? REST API
# ? Would you like to generate CRUD entry points? Yes
# CREATE src/users/users.controller.ts
# CREATE src/users/users.module.ts
# CREATE src/users/users.service.ts
# CREATE src/users/dto/create-user.dto.ts
# CREATE src/users/dto/update-user.dto.ts
# CREATE src/users/entities/user.entity.ts
# Generate từng thành phần
nest g controller cats # Controller
nest g service cats # Service
nest g module cats # Module
nest g guard auth # Guard
nest g interceptor logging # Interceptor
nest g pipe validation # Pipe
nest g filter http-exception # Exception Filter
nest g middleware logger # Middleware
nest g decorator roles # Custom Decorator
# Viết tắt
nest g res products # resource
nest g co products # controller
nest g s products # service
nest g mo products # module
# Generate không test file
nest g s users --no-spec
# Dry run (xem trước, không tạo file)
nest g res orders --dry-run
7.nest-cli.jsonを構成する
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true,
"assets": ["**/*.graphql", "**/*.proto"],
"watchAssets": true,
"builder": "swc",
"typeCheck": true
},
"generateOptions": {
"spec": true,
"flat": false
}
}
ヒント: NestJS 10以降から利用可能 SWCビルダー デフォルトの TypeScript コンパイラの代わりに、ビルドを最大 20 倍高速化します。
# Cài SWC
npm install --save-dev @swc/cli @swc/core
# Thêm vào nest-cli.json
# "builder": "swc"
8. 最初の API エンドポイントを作成する
単純な Users モジュールを作成します。
nest g res users --no-spec
// src/users/users.controller.ts
import { Controller, Get, Post, Body, Param, Delete } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
@Get()
findAll() {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(+id);
}
@Delete(':id')
remove(@Param('id') id: string) {
return this.usersService.remove(+id);
}
}
// src/users/users.service.ts
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
interface User {
id: number;
name: string;
email: string;
}
@Injectable()
export class UsersService {
private users: User[] = [
{ id: 1, name: 'Duy Tran', email: '[email protected]' },
{ id: 2, name: 'Alex Nguyen', email: '[email protected]' },
];
create(dto: CreateUserDto): User {
const user: User = { id: Date.now(), ...dto };
this.users.push(user);
return user;
}
findAll(): User[] {
return this.users;
}
findOne(id: number): User | undefined {
return this.users.find(u => u.id === id);
}
remove(id: number): void {
this.users = this.users.filter(u => u.id !== id);
}
}
# Test API
curl http://localhost:3000/users
# [{"id":1,"name":"Duy Tran","email":"[email protected]"},...]
curl -X POST http://localhost:3000/users \
-H "Content-Type: application/json" \
-d '{"name":"New User","email":"[email protected]"}'
# {"id":1711785600000,"name":"New User","email":"[email protected]"}
9. まとめ
- NestJS CLI はプロジェクトの迅速な足場構築に役立ちます
- ディレクトリ構造を明確にする:
main.ts→アプリモジュール→ コントローラ + サービス リソースをネスト生成する完全な CRUD を数秒で作成- SWC ビルダーはビルドを大幅にスピードアップします
次の記事ではさらに深く掘り下げていきます コントローラーとルーティング — NestJS が HTTP リクエストを処理する方法。