Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
go-spidermonkeyでAIエージェントのCode Modeを実装する
Search
syumai
August 24, 2026
Programming
1.6k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
go-spidermonkeyでAIエージェントのCode Modeを実装する
layerx.go #5 の発表資料です!
*
https://layerx.connpass.com/event/402006/
syumai
August 24, 2026
More Decks by syumai
See All by syumai
Workers Cache を知る
syumai
0
370
自分的「カンファレンスの楽しみ方」
syumai
0
220
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
2.2k
Oxlintのカスタムルールの現況
syumai
6
2.2k
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
2
1.7k
『[入門] Cloudflare Workers』本はなぜ誕生したのか
syumai
0
660
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
9
3.4k
知られているようで知られていない JavaScriptの仕様 4選
syumai
3
1.3k
CloudflareのSandbox SDKを試してみた
syumai
0
1.2k
Other Decks in Programming
See All in Programming
Vue Fes Japan の “作る側”に関わってみて
naokihaba
1
180
AI-Powered Domain-Driven Design
ziobrando
0
230
golang-bob.pdf
iwatsukayura
0
130
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
2
1.2k
AWSに止められる覚悟してますか?
morizo_1984
2
540
contenteditable と日本語入力に向き合う
colorful12
0
210
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
930
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.7k
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
110
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
300
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
300
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
What's in a price? How to price your products and services
michaelherold
247
13k
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
The SEO identity crisis: Don't let AI make you average
varn
0
590
How to Ace a Technical Interview
jacobian
280
24k
Optimising Largest Contentful Paint
csswizardry
37
4k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Code Reviewing Like a Champion
maltzj
529
40k
Mind Mapping
helmedeiros
1
400
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Transcript
go-spidermonkeyでAIエージェントの Code Modeを実装する 2026-8-24 layerx.go #5 @syumai
whoami syumai LayerX ソフトウェアエンジニア バクラクヘルプデスク エージェントを開発中 Asakusa.go / ECMAScript 仕様輪読会
主催 X: @__syumai Website: https://syum.ai © LayerX Inc.
Code Modeとは?
Code Modeとは? 「LLMに個々のツール呼び出しを生成させる」のではなく、「ツールを呼び出すコード を書かせ、そのコードをSandboxで実行する」 方式 生成されるのは基本的にJavaScriptのコード 2025年9月にCloudflare Blogで紹介された https://blog.cloudflare.com/code-mode/ 先行研究に、CodeActという手法があった
https://proceedings.mlr.press/v235/wang24h.html © LayerX Inc. 4
https://blog.cloudflare.com/code-mode/ © LayerX Inc. 5
Code Modeによる実行の例
ツール定義のイメージ © LayerX Inc. 7
ツールのTypeScript関数への変換のイメージ © LayerX Inc. 8
Code Modeによるツールの呼び出しイメージ © LayerX Inc. 9
Code Modeの優れた点
Code Modeの優れた点 中間結果をLLMのContextに持たない 複雑なツール呼び出しをコードとして合成できる LLMが得意なコード生成を活用できる © LayerX Inc. 11
1. 中間結果をLLMのContextに持たない 通常のTool Callingでは、ツールの結果が毎回LLMに戻る。 © LayerX Inc. 12
1. 中間結果をLLMのContextに持たない Code Modeでは、中間結果をSandbox内に保持できる。 © LayerX Inc. 13
2. 複雑なツール呼び出しをコードとして合成できる 以下のような、複数回のツール呼び出しを map で表現し、結果のソートを配列の sort で表現したりできる 決定的な処理をLLMに任せなくていい © LayerX
Inc. 14
3. LLMが得意なコード生成を活用できる 通常のTool Callingでは、ツール呼び出し固有の形式を生成する。 <tool_call> © LayerX Inc. など。この部分は変わりうる 15
3. LLMが得意なコード生成を活用できる Code Modeでは普通のコードを書く コードには大量の学習データが存在 LLMのプログラミング能力をそのまま活用可能 → 「ツールを呼ぶ能力」を「コードを書く能力」に寄せられる © LayerX
Inc. 16
Code Modeの優れた点 ツール呼び出しの中間結果と制御フローをLLMのContextから実行環境へ移すことがで きる トークン効率や実行時間などのパフォーマンスが向上することが期待できる © LayerX Inc. 17
直近の話題: Vercel AI SDKのCode Modeサポート TypeScript向けのAI機能提供ライブラリとして最も有名なVercel AI SDKがCode Mode をサポートした
Cloudflareがブログで示していたのはMCP toolにおけるユースケースだが、Vercel AI SDKはMCPに限らないツールのコード変換を対象としている Cloudflareに留まらず、活用が進んでいる https://ai-sdk.dev/docs/ai-sdk-core/code-mode © LayerX Inc. 18
Go製のエージェントでCode Modeを使うには?
Go製のエージェントでCode Modeを使うには? LLMが生成したコードを実行するSandboxが必要 Code Modeでは、関数に変換したツールの呼び出しくらいのライトなコードしか記述さ れない インタプリタ型言語が適切 いちいちコンテナを立ち上げると時間がかかる Go向けの軽量Sandbox実装が豊富なJavaScriptが有力な選択肢 ©
LayerX Inc. 20
Go製のJavaScriptインタプリタ実装
Go製のJavaScriptインタプリタ実装 いくつか存在する 特に有名なものはgoja https://github.com/dop251/goja 今回はgoccy/go-spidermonkeyを選択 https://github.com/goccy/go-spidermonkey © LayerX Inc. 22
go-spidermonkey FirefoxのJSエンジンのSpiderMonkeyを丸ごとPure Goに変換したライブラリ SpiderMonkeyベースなので、test262 (ECMAScript互換性テスト) のスコアが高い Web API / Node.js互換機能も一部提供
デフォルトでOSやネットワークへのバインディングを持たないので安全 Optionalで追加可能 goccyさん製 © LayerX Inc. 23
go-spidermonkey の基本的な使い方 spidermonkey.New でインスタンスを生成し、 Eval メソッド呼び出しで実行 実行結果は .String() / .Float()
/ .Object() などで取り出す © LayerX Inc. 24
Go側の関数のJSへの公開 Global().DefineFunc でGo側の関数をJSに公開できる 引数の取り出し方も実行結果の取り出し方と同様 © LayerX Inc. 25
GoによるCode Mode付きエージェントの実装例
実装例: funcbox-agent https://github.com/syumai/funcbox-agent syumaiが開発中のfuncboxというサーバーレス関数プラットフォームのエージェント funcboxにワークスペースを追加したり、関数をデプロイしたりするMCP tool実装を持つ エージェントとしては、チャット形式のUIを提供している © LayerX Inc.
27
funcbox-agentのアーキテクチャ Backend: Genkit Go https://github.com/genkit-ai/genkit/tree/main/go Backend (Sandbox): go-spidermonkey Frontend: Vercel
AI SDK + @genkit-ai/vercel-ai/client Genkitが公式でVercel AI SDKとのストリーム変換アダプタを提供している © LayerX Inc. 28
デモ
funcbox-agentの実装解説
run_js tool エージェントが公開するツールは run_js の1つだけ LLMがツール呼び出しをまとめて記述したコードを1回で実行する © LayerX Inc. 31
MCP toolのTypeScript型定義への変換 各MCP toolのJSON Schemaを、起動時にTSの型定義へ変換し、コード生成に利用して いる run_js © LayerX Inc.
toolのdescriptionに埋め込み、LLMに型付きのシグネチャとして見せている 32
LLMが生成するJavaScriptコード例 © LayerX Inc. 33
ツール呼び出し用関数のGoからJSへの公開 を使って、JSからGo側にあるMCP tool呼び出し関数を呼び出すバイ ンディングを行っている Global().DefineFunc : MCP toolの実呼び出し。Go側で CallTool を実行し、結果をPromiseとしてJSに返す
この関数が funcbox.listFunctions({}) などの内部で呼ばれる __fbx_call(name, argsJSON) © LayerX Inc. 34
ツール呼び出し用関数のGoからJSへの公開 © LayerX Inc. 35
まとめ Code Modeを使うことで、エージェントからのツール呼び出しを効率化できる Code Mode用のコードの実行にはJavaScriptを使うのが楽 Go環境下でのJS Sandboxとして、go-spidermonkeyが使える © LayerX Inc.
36