Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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クラスの新しいインスタンスが返されます。これは、リソースのクリーンアップを管理するためのスタック構造を提供します。

関連コンテンツ