Node.js の AsyncLocalStorage を利用する主な目的として適切なものはどれですか?
1〜4キーで選択、Enterで回答できます
解説
正解は「非同期処理をまたいでリクエストごとの値を保持し」です。AsyncLocalStorage は node:async_hooks が提供するクラスで、ある非同期の処理の流れ(コンテキスト)に値を結び付けて保持します。リクエストIDやユーザー情報を、途中の関数すべてに引数で引き回さずに取り出せる点が最大の利点です。基本的な使い方import { AsyncLocalStorage } from 'node:async_hooks'; const als = new AsyncLocalStorage(); als.run({ requestId: 'req-1' }, () => { setTimeout(() => { // await や setTimeout をまたいでも同じストアを参照できます console.log(als.getStore().requestId); // 'req-1' }, 10); }); console.log(als.getStore()); // run の外なので undefinedrun(store, callback) の内側で始まった非同期処理はストアを引き継ぎ、外側では getStore() が undefined を返します。HTTPサーバーではミドルウェアで run() を張り、ログ出力側で getStore() を読む構成が定番です。他の選択肢が誤りである理由「複数のワーカースレッド間で」はスレッド間共有の話で、worker_threads や SharedArrayBuffer の役割です。ストアはスレッドをまたぎません。「ブラウザの localStorage と同様に」は名前が似ているだけで、値はメモリ上にのみ存在し、永続化されません。「複数の非同期処理の完了を待ち合わせ」は Promise.all などの仕事で、AsyncLocalStorage は実行順序に一切関与しません。ストアは複製されず参照が共有されますrun() に渡したオブジェクトは内側でコピーされるわけではありません。ネストした非同期処理内で getStore().userId = ... のように書き換えると、同じコンテキストの他の箇所にも影響します。値を差し替えたい場合は、新しいオブジェクトを渡して run() を入れ子にするのが安全です。参考Node.js Documentation: Asynchronous context tracking