Dev Study
← 解説「コントローラと @Get」に戻る

サンプルコードで身につける: コントローラと @Get

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

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 が返らなくなったら監視がアラートを出す、という使い方