1最小のコントローラ
@Controller と @Get だけを使った最小構成です。クラスがパスの担当を宣言し、メソッドがハンドラになるという対応関係を最小単位で示します。文字列を返せばそのままレスポンスボディになります。
import { Controller, Get } from "@nestjs/common";
@Controller() // 引数なし = ルート(/)を担当
export class AppController {
@Get() // GET /
hello() {
return "Hello NestJS"; // 文字列ならそのままボディになる
}
}
2プレフィックスとパスの組み立て
@Controller の引数と @Get の引数が連結されて最終的な URL になることを示す例です。この組み立てルールを知っていると、実務で URL からハンドラの場所を逆引きできるようになります。
import { Controller, Get } from "@nestjs/common";
@Controller("users") // ここがプレフィックス
export class UsersController {
@Get() // GET /users(プレフィックスのみ)
findAll() {
return [];
}
@Get("recent") // GET /users/recent(users + recent)
findRecent() {
return [];
}
@Get("inactive/archived") // GET /users/inactive/archived
findArchived() {
return [];
}
}
3「URLと処理の対応表」をプレーンTSで再現
コントローラの本質である「メソッド + パス → 処理」の対応表をプレーン TypeScript で再現した例です。@Controller と @Get がやっているのは、この表への登録を宣言的に書けるようにすることだと分かります。
TypeScript
4複数のHTTPメソッドを1つのコントローラに
同じ /users 配下でも HTTP メソッドごとに別のハンドラへ振り分けられることを示す例です。実務の CRUD API はこの形が骨格になります。ボディやパラメータの受け取り方は後のレッスンで扱います。
import { Controller, Delete, Get, HttpCode, Post } from "@nestjs/common";
@Controller("users")
export class UsersController {
@Get() // GET /users — 一覧取得
findAll() {
return [{ id: 1, name: "Alice" }];
}
@Post() // POST /users — 新規作成(既定で 201 が返る)
create() {
return { created: true };
}
@Delete("me") // DELETE /users/me
@HttpCode(204) // ステータスコードは @HttpCode で変更できる
removeSelf() {
return;
}
}
5ヘルスチェックAPI
監視ツールやロードバランサーが死活確認に使うヘルスチェックエンドポイントの実務例です。@Get ハンドラ1つで完結する最も小さな実務 API で、ほぼすべての本番サービスに存在します。
import { Controller, Get } from "@nestjs/common";
@Controller("health")
export class HealthController {
@Get() // GET /health — 監視ツールが定期的に叩く
check() {
return {
status: "ok",
uptimeSeconds: Math.floor(process.uptime()),
timestamp: new Date().toISOString(),
};
}
}
// 200 が返らなくなったら監視がアラートを出す、という使い方