NestJSはライフサイクルフックを提供します — アプリケーションまたはプロバイダーのライフサイクル(初期化とシャットダウン)の特定の時点でコードを実行するために実装するメソッドです。セットアップ(リソースへの接続)とクリーンアップ(接続の正常なクローズ)に不可欠です。
メインフック
()
, {
() {
.();
}
() {
.();
}
}
INITIALIZATION (startup):
onModuleInit() → after the module's providers are initialized
onApplicationBootstrap()→ after ALL modules are initialized (whole app ready)
SHUTDOWN (graceful termination):
onModuleDestroy() → cleanup as modules are destroyed
beforeApplicationShutdown() → before shutdown completes
onApplicationShutdown(signal) → final shutdown (signal = SIGTERM, etc.)
@Injectable()
export class PrismaService extends PrismaClient
implements OnModuleInit, OnModuleDestroy {
async onModuleInit() {
await this.$connect(); // connect on startup
}
async onModuleDestroy() {
await this.$disconnect(); // disconnect on shutdown — clean release
}
}
これは明示的なセットアップ/ティアダウンが必要なリソースの標準パターンです — onModuleInitで接続し、onModuleDestroyでリリースします。
// shutdown hooks must be enabled explicitly
const app = await NestFactory.create(AppModule);
app.enableShutdownHooks(); // ❗ required for onApplicationShutdown etc. to fire
シャットダウンフックはenableShutdownHooks()を呼び出す場合のみ実行されます — 忘れやすく、そうするとクリーンアップが実行されません。
When the app receives SIGTERM (deploy, scale-down, container stop):
✗ Without shutdown hooks → connections left open, in-flight work dropped
✓ With shutdown hooks → close DB/Redis/queues cleanly, finish work → zero-downtime
ライフサイクルフックはNestJSアプリケーションでリソースを正しく管理するために重要です — 初期化(データベース/Redis接続の開放、データの読み込み、サービスへの登録)と、特にシャットダウン時の正常なクリーンアップ(接続のクローズ、バッファのフラッシュ、実行中の作業の完了)を実行するための適切な場所を提供します。
それらを理解することは本番環境の信頼性に不可欠です:初期化フック(onModuleInit、onApplicationBootstrap)は依存関係の準備ができたら適切なタイミングでセットアップが確実に実行され、シャットダウンフック(onModuleDestroy、onApplicationShutdown)は正常なシャットダウンを可能にします — これは最新のデプロイメント(コンテナ/オーケストレーターはデプロイとスケーリング時にSIGTERMを継続的に送信)において重要であり、適切なクリーンアップがないと接続がリークし、アクティブなリクエストがドロップされ、ゼロダウンタイムデプロイメントが中断します。
onModuleInitで接続し、onModuleDestroyで切断する標準パターン(例えばPrisma/データベースサービスの場合)は日常的なNestJS知識であり、enableShutdownHooks()の呼び出しの微妙な要件を知ること(またはシャットダウンフックが静かに実行されないこと)は実用的で見落としやすい詳細です。
ライフサイクルフックをマスターすることは、リソースとデプロイメントを正しく処理する堅牢な本番対応NestJSサービスを構築する一部です。