コンテンツにスキップ

プロセス

Node.jsのprocessモジュールは、現在のプロセスに関連する多くの便利なAPIを提供します。Workersのようなサーバーレス環境では、これらのAPIのほとんどは関連性がなく意味がありませんが、一部はクロスランタイムの互換性に役立ちます。Workers内で利用可能なAPIは以下の通りです:

import {
env,
nextTick,
} from 'node:process';
env['FOO'] = 'bar';
console.log(env['FOO']); // 出力: bar
nextTick(() => {
console.log('next tick');
});

process.env

Node.jsのprocess.envの実装では、envオブジェクトはプロセスが開始された時点での環境変数のコピーです。Workersの実装では、プロセスレベルの環境は存在しないため、envは空のオブジェクトです。それでも、envから値を設定したり取得したりすることは可能で、これらの値は同じアイソレートとコンテキストで実行されているすべてのWorkersに対してグローバルに持続します(例えば、同じWorkersエントリポイント)。

fetch()ハンドラにおけるリクエストごとのenv引数との関係

Workersには、環境変数の概念があり、これはWorkerごとおよびリクエストごとに適用されます。これらは自動的にprocess.env APIを介してアクセスすることはできません。必要に応じて、これらの値を手動でprocess.envにコピーすることは可能です。ただし、process.envに値を設定すると、その値は文字列に強制されることに注意してください。

import * as process from 'node:process';
export default {
fetch(req, env) {
// process.env.FOOがまだ設定されていない場合、env.FOOの値をprocess.env.FOOに設定します
// かつenv.FOOが文字列である場合。
process.env.FOO ??= (() => {
if (typeof env.FOO === 'string') {
return env.FOO;
}
})();
}
};

リクエストenvオブジェクトでprocess.envオブジェクト全体を置き換えないことを強く推奨します。そうすると、以前に設定された環境変数を失い、同じアイソレートで実行されている他のWorkersに対して予期しない動作を引き起こすことになります。具体的には、名前付きインポートを介してアクセスした際にprocess.envオブジェクトとの不整合を引き起こします。

import * as process from 'node:process';
import { env } from 'node:process';
process.env === env; // true! 同じオブジェクトです
process.env = {}; // オブジェクトを置き換えます! これを行わないでください!
process.env === env; // false! もはや同じオブジェクトではありません
// この時点から、process.envへの変更はenvに反映されず、
// その逆もまた然りです!

process.nextTick()

Workersのprocess.nextTick()の実装は、標準のWebプラットフォームAPIqueueMicrotask()のラッパーです。

詳細については、Node.jsのprocessに関するドキュメントを参照してください。