インストール
asyncmux のインストール方法と、デコレーター・using 構文・再入検出に必要な動作要件を説明します。
パッケージをインストールする
npm install asyncmuxpnpm add asyncmuxyarn add asyncmuxbun add asyncmuxnub add asyncmuxaube add asyncmux動作要件
asyncmux は ESM 専用のパッケージです。
- デコレーター API — Stage 3(ES 標準)のデコレーターが必要です。TypeScript では、
experimentalDecoratorsを有効にせずにコンパイルしてください。Stage 3 に対応していない環境で@asyncmuxを使うと、DecoratorSupportErrorが投げられます。 using構文 — ロックの自動解放に使えます。必須ではないため、usingが使えない環境でもrelease()で解放できます。node:async_hooks— 再入の検出に使います。process.getBuiltinModule("node:async_hooks")が利用できる環境(Node.js 22.3 以降や Bun など)では、awaitをまたいだ再入も検出します。利用できない環境では、同期的な呼び出し範囲のみを対象とする検出に切り替わります。
インポート
import { asyncmux, Asyncmux, LockReleasedError, ReentrantLockError } from "asyncmux";
import type { AsyncmuxLock, AsyncmuxLockOptions } from "asyncmux";
AsyncmuxLock は型としてのみ公開されています。ロックは各 API の戻り値として得られるものを使います。
ピア依存関係
asyncmux は次のパッケージをピア依存関係として参照します。npm 7 以降や pnpm は自動でインストールしますが、必要に応じて明示的に追加してください。
@logtape/logtape— デバッグログの出力に使います。valibot— エラーメッセージの言語設定に使います(i18n-error-baseのピア依存関係)。
TypeScript の設定
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler",
"lib": ["ESNext", "DOM"],
"experimentalDecorators": false
}
}
Symbol.dispose の型を使う場合は、それを含む lib(ESNext など)を指定してください。
デバッグログを有効にする
asyncmux は @logtape/logtape のカテゴリー asyncmux にデバッグログを出力します。LogTape を設定すると、ロックの取得・解放やキューの状態を確認できます。
import { configure, getConsoleSink } from "@logtape/logtape";
await configure({
sinks: {
console: getConsoleSink(),
},
loggers: [{ category: "asyncmux", sinks: ["console"], lowestLevel: "debug" }],
});