Skip to content

Bun.spawn() を使用して子プロセスを生成します。2 番目の bun プロセスを生成する場合、2 つのプロセス間で直接のプロセス間通信(IPC)チャネルを開くことができます。

NOTE

この API は他の `bun` プロセスとのみ互換性があります。`process.execPath` を使用して、現在実行中の `bun` 実行可能ファイルへのパスを取得します。
ts
const child = Bun.spawn(["bun", "child.ts"], {
  ipc(message) {
    /**
     * 子プロセスから受信したメッセージ
     **/
  },
});

親プロセスは、返された Subprocess インスタンスの .send() メソッドを使用してサブプロセスにメッセージを送信できます。送信サブプロセスへの参照は、ipc ハンドラの 2 番目の引数としても利用できます。

ts
const childProc = Bun.spawn(["bun", "child.ts"], {
  ipc(message, childProc) {
    /**
     * 子プロセスから受信したメッセージ
     **/
    childProc.send("子への応答");
  },
});

childProc.send("私はあなたのお父さんです"); // 親も子にメッセージを送信できます

一方、子プロセスは process.send() を使用して親にメッセージを送信し、process.on("message") でメッセージを受信できます。これは Node.js の child_process.fork() に使用されるのと同じ API です。

ts
process.send("文字列として子からこんにちは");
process.send({ message: "オブジェクトとして子からこんにちは" });

process.on("message", message => {
  // 親からのメッセージを出力
  console.log(message);
});

すべてのメッセージは JSC の serialize API を使用してシリアライズされ、postMessagestructuredClone でサポートされるのと同じ 転送可能な型(文字列、型付き配列、ストリーム、オブジェクトなど)が許可されます。

ts
// 文字列を送信
process.send("文字列として子からこんにちは");

// オブジェクトを送信
process.send({ message: "オブジェクトとして子からこんにちは" });

完全なドキュメントについては、ドキュメント > API > 子プロセス を参照してください。

Bun by www.bunjs.com.cn 編集