【Node.js24.x】DisposableStack::DisposableStack()関数の使い方
DisposableStack関数の使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
DisposableStack関数は、複数の使い捨て可能なリソースやクリーンアップ処理を管理し、それらをまとめて破棄するためのDisposableStackオブジェクトを作成する関数です。このオブジェクトは、ファイルハンドルやネットワーク接続など、使用後に必ず解放が必要なリソースや、任意のクリーンアップ処理を登録するのに使用されます。DisposableStackに登録された項目は、スタックが破棄される際に、登録時とは逆の順序で自動的に実行されます。
これにより、複雑なリソース管理を簡素化し、リソースの解放忘れによるメモリリークやエラーを防ぐことができます。特に、複数のリソースを確保し、それらすべてを確実にクリーンアップしたい場合に有効です。Node.js 24で導入されたusing宣言(またはusing await宣言)と組み合わせると、関数のスコープを抜ける際に登録されたリソースが自動的に破棄され、より安全なリソース管理を実現します。システムエンジニアにとって、堅牢なアプリケーションのリソース管理の信頼性を高める重要な機能です。
構文(syntax)
1import { DisposableStack } from 'node:util'; 2 3console.log('--- Program Start ---'); 4 5{ 6 // `using` 宣言により DisposableStack のインスタンスを作成 7 // スコープを抜けるときに、自動的に `dispose()` メソッドが呼び出されます 8 using stack = new DisposableStack(); 9 10 // クリーンアップ関数を登録 11 // 登録された関数は、スタックが破棄されるときにLIFO順で実行されます 12 stack.defer(() => { 13 console.log(' Cleanup function for Resource 1 executed.'); 14 }); 15 16 // `[Symbol.dispose]` メソッドを持つクラスを定義 17 // このメソッドは、`DisposableStack.use()` で登録されたオブジェクトが破棄されるときに呼び出されます 18 class ManagedResource { 19 constructor(id) { 20 this.id = id; 21 console.log(` ManagedResource ${this.id} created.`); 22 } 23 [Symbol.dispose]() { 24 console.log(` ManagedResource ${this.id} disposed.`); 25 } 26 } 27 28 // `[Symbol.dispose]` メソッドを持つオブジェクトを登録 29 // 後から登録されたものが先に破棄されます (LIFO: Last-In, First-Out) 30 stack.use(new ManagedResource(1)); 31 stack.use(new ManagedResource(2)); 32 33 console.log(' Application logic running within the scope.'); 34 35 // このスコープを抜けると、`stack.dispose()` が自動的に呼び出され、 36 // 登録されたリソースが逆順で破棄されます。 37} 38 39console.log('--- Program End (Resources are disposed) ---');
引数(parameters)
引数なし
引数はありません
戻り値(return)
DisposableStack
DisposableStackクラスの新しいインスタンスが返されます。これは、リソースのクリーンアップを管理するためのスタック構造を提供します。