yossydev Blog

Agentsを理解したい

publishedAt:
2025/11/05
updatedAt:
2025/11/05
目次

Intro

Web Workerを実装するにあたって、Agentsの理解を深めたい。これはそのメモを少し整理したもの。

Content

Agentsとは

Agentについて、mdnには以下のように記載があった

each autonomous executor of JavaScript is called an agent

訳: JavaScriptの自律実行者はそれぞれエージェントと呼ばれる

ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Execution_model#agent_execution_model

全体像を把握するのにこれもMDNからの拝借にはなるが、以下の画像が参考になる。

image

Heap,Queue,Stackも大事な概念ではあると思うが、ここでは深掘りしない。

あと直訳の自律実行者が表現として難しいが、他にいい表現が自分も思い浮かばない。

図の中にあるが、WorkerGroupScopeRealmがある。Realmとは安全にJavaScriptを実行するためのサンドボックスだと思えばいいだろう。 そしてRealmは一つのAgentの中に複数存在している。これはさっきのページの続きに記載がある。

Each agent owns one or more realms

訳: 各エージェントは1つ以上のレルムを所有します

あと基本的にAgents to Agentsな動作はできないが、SharedArrayBufferを使うことでそれは可能になる。

実例

では次に、実際にAgentsがランタイムでどのように作られるのかを知りたい。 今回はこのブログを書くきっかけになったWeb Workerを参考にする。

Web Workerは、JavaScriptを別スレッドで動かすことが可能になる機能だ。

Deno

Denoのコードではざっくり以下のようになっている

Bun

ちなみにこれに関してはbun/jscがどうなっているかも気になったので少しだけだが調べた。

まとめ

大体の理解ができたので、最後にまとめる。

  • JavaScriptにはAgentsという機能がある
  • RealmはAgentに複数存在する
  • Web Workerでは、スレッドごとにAgentsが異なる

参考文献

0