プロセス
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');});Node.jsのprocess.envの実装では、envオブジェクトはプロセスが開始された時点での環境変数のコピーです。Workersの実装では、プロセスレベルの環境は存在しないため、envは空のオブジェクトです。それでも、envから値を設定したり取得したりすることは可能で、これらの値は同じアイソレートとコンテキストで実行されているすべてのWorkersに対してグローバルに持続します(例えば、同じWorkersエントリポイント)。
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に反映されず、// その逆もまた然りです!Workersのprocess.nextTick()の実装は、標準のWebプラットフォームAPIqueueMicrotask() ↗のラッパーです。
詳細については、Node.jsのprocessに関するドキュメント ↗を参照してください。