AI ãšãŒãžã§ã³ãã®å®å šãªãããã€
åé¢ãèªèšŒæ å ±ç®¡çããããã¯ãŒã¯å¶åŸ¡ã䜿çšã㊠Claude Code ãš Agent SDK ã®ãããã€ãä¿è·ããããã®ã¬ã€ã
Claude Code ãš Agent SDK ã¯ãã³ãŒããå®è¡ãããã¡ã€ã«ã«ã¢ã¯ã»ã¹ããããªãã«ä»£ãã£ãŠå€éšãµãŒãã¹ãšçžäºäœçšã§ãã匷åãªããŒã«ã§ãããããã®æ©èœãæã€ããŒã«ãšåæ§ã«ãããããæ éã«ãããã€ããããšã§ãå©ç¹ãåŸãªããé©åãªå¶åŸ¡ãç¶æã§ããŸãã
äºåã«æ±ºããããã³ãŒããã¹ã«åŸãåŸæ¥ã®ãœãããŠã§ã¢ãšã¯ç°ãªãããããã®ããŒã«ã¯ã³ã³ããã¹ããšç®æšã«åºã¥ããŠåçã«ã¢ã¯ã·ã§ã³ãçæããŸãããã®æè»æ§ãæçšæ§ããããããŸãããåŠçããã³ã³ãã³ãïŒãã¡ã€ã«ããŠã§ãããŒãžããŠãŒã¶ãŒå ¥åïŒã«ãã£ãŠãã®åäœã圱é¿ãåããå¯èœæ§ãããããšãæå³ããŸããããã¯ããã³ããã€ã³ãžã§ã¯ã·ã§ã³ãšåŒã°ããããšããããŸããããšãã°ããªããžããªã® README ã«ç°åžžãªæç€ºãå«ãŸããŠããå ŽåãClaude Code ã¯ãªãã¬ãŒã¿ãŒãäºæ³ããªãã£ãæ¹æ³ã§ãããã®æç€ºãã¢ã¯ã·ã§ã³ã«çµã¿èŸŒãå¯èœæ§ããããŸãããã®ã¬ã€ãã§ã¯ããã®ãªã¹ã¯ã軜æžããããã®å®è·µçãªæ¹æ³ã«ã€ããŠèª¬æããŸãã
è¯ããã¥ãŒã¹ã¯ããšãŒãžã§ã³ãã®ãããã€ãä¿è·ããããã«ããšããŸããã¯ãªã€ã³ãã©ã¹ãã©ã¯ãã£ã¯å¿ èŠãªããšããããšã§ããåä¿¡é Œã§ããã³ãŒããå®è¡ããå Žåã«é©çšãããååïŒåé¢ãæå°æš©éãå€å±€é²åŸ¡ïŒãããã«ãé©çšãããŸããClaude Code ã«ã¯äžè¬çãªæžå¿µã«å¯Ÿå¿ããã®ã«åœ¹ç«ã€è€æ°ã®ã»ãã¥ãªãã£æ©èœãå«ãŸããŠããããã®ã¬ã€ãã§ã¯ããããšããããªã匷åãå¿ èŠãªå Žåã®è¿œå çãªåŒ·åãªãã·ã§ã³ã«ã€ããŠèª¬æããŸãã
ãã¹ãŠã®ãããã€ãæå€§éã®ã»ãã¥ãªãã£ãå¿ èŠãšããããã§ã¯ãããŸãããéçºè ãããŒãããœã³ã³ã§ Claude Code ãå®è¡ããå Žåãšããã«ãããã³ãç°å¢ã§é¡§å®¢ããŒã¿ãåŠçããäŒæ¥ã§ã¯ãèŠä»¶ãç°ãªããŸãããã®ã¬ã€ãã§ã¯ãClaude Code ã®çµã¿èŸŒã¿ã»ãã¥ãªãã£æ©èœãã匷åããããããã¯ã·ã§ã³ ã¢ãŒããã¯ãã£ãŸã§ãããŸããŸãªãªãã·ã§ã³ãæç€ºããŠãããããç¶æ³ã«åã£ããã®ãéžæã§ããŸãã
è åšã¢ãã«
ãšãŒãžã§ã³ãã¯ãããã³ããã€ã³ãžã§ã¯ã·ã§ã³ïŒåŠçããã³ã³ãã³ãã«åã蟌ãŸããæç€ºïŒãŸãã¯ã¢ãã«ãšã©ãŒãåå ã§ãæå³ããªãã¢ã¯ã·ã§ã³ãå®è¡ããå¯èœæ§ããããŸããClaude ã¢ãã«ã¯ããã«å¯Ÿããèæ§ãæã€ããã«èšèšãããŠããŸãã詳现ã«ã€ããŠã¯ãã¢ãã«æŠèŠãšãããã€ããã¢ãã«ã®ã·ã¹ãã ã«ãŒããåç §ããŠãã ããã
ãã ããå€å±€é²åŸ¡ã¯äŸç¶ãšããŠè¯ãå®è·µã§ããããšãã°ããšãŒãžã§ã³ãã顧客ããŒã¿ãå€éšãµãŒããŒã«éä¿¡ããããæç€ºããæªæã®ãããã¡ã€ã«ãåŠçããå Žåããããã¯ãŒã¯å¶åŸ¡ããã®ãªã¯ãšã¹ããå®å šã«ãããã¯ã§ããŸãã
çµã¿èŸŒã¿ã»ãã¥ãªãã£æ©èœ
Claude Code ã«ã¯ãäžè¬çãªæžå¿µã«å¯Ÿå¿ããããã€ãã®ã»ãã¥ãªãã£æ©èœãå«ãŸããŠããŸãã詳现ã«ã€ããŠã¯ãã»ãã¥ãªãã£ããã¥ã¡ã³ããåç §ããŠãã ããã
- æš©éã·ã¹ãã : ãã¹ãŠã®ããŒã«ãš bash ã³ãã³ãã¯ãèš±å¯ããããã¯ããŸãã¯ãŠãŒã¶ãŒã®æ¿èªãããã³ããããããã«èšå®ã§ããŸããããã¹ãŠã® npm ã³ãã³ããèš±å¯ããŸãã¯ãsudo ãå«ãã³ãã³ãããããã¯ããªã©ã®ã«ãŒã«ãäœæããã«ã¯ãglob ãã¿ãŒã³ã䜿çšããŸããçµç¹ã¯ããã¹ãŠã®ãŠãŒã¶ãŒã«é©çšãããããªã·ãŒãèšå®ã§ããŸããæš©éãåç §ããŠãã ããã
- æš©éã®ããã®ã³ãã³ãè§£æ: bash ã³ãã³ããå®è¡ããåã«ãClaude Code ã¯ããã AST ã«è§£æããçµæãæš©éã«ãŒã«ãšç
§åããŸãããããã«è§£æã§ããªãã³ãã³ãããŸãã¯èš±å¯ã«ãŒã«ãšäžèŽããªãã³ãã³ãã¯ãæç€ºçãªæ¿èªãå¿
èŠã§ãã
evalãªã©ã®å°ããªã³ã³ã¹ãã©ã¯ãã»ããã¯ãèš±å¯ã«ãŒã«ã«é¢ä¿ãªãåžžã«æ¿èªãå¿ èŠã§ããããã¯æš©éã²ãŒãã§ããããµã³ãããã¯ã¹ã§ã¯ãããŸãããã¿ãŒã²ãããã¹ãŸãã¯å¹æããã³ãã³ããå±éºãã©ãããæšæž¬ããŸããã - ãŠã§ãæ€çŽ¢ã®èŠçŽ: æ€çŽ¢çµæã¯ãçã®ã³ã³ãã³ããã³ã³ããã¹ãã«çŽæ¥æž¡ãã®ã§ã¯ãªããèŠçŽãããŸããããã«ãããæªæã®ãããŠã§ãã³ã³ãã³ãããã®ããã³ããã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ã軜æžãããŸãã
- ãµã³ãããã¯ã¹ã¢ãŒã: Bash ã³ãã³ãã¯ããã¡ã€ã«ã·ã¹ãã ãšãããã¯ãŒã¯ã¢ã¯ã»ã¹ãå¶éãããµã³ãããã¯ã¹ç°å¢ã§å®è¡ã§ããŸãã詳现ã«ã€ããŠã¯ããµã³ãããã¯ã¹ããã¥ã¡ã³ããåç §ããŠãã ããã
ã»ãã¥ãªãã£ã®åå
Claude Code ã®ããã©ã«ããè¶ ãã远å ã®åŒ·åãå¿ èŠãªãããã€ã®å Žåããããã®ååã¯å©çšå¯èœãªãªãã·ã§ã³ãã¬ã€ãããŸãã
ã»ãã¥ãªãã£å¢ç
ã»ãã¥ãªãã£å¢çã¯ãç°ãªãä¿¡é Œã¬ãã«ãæã€ã³ã³ããŒãã³ããåé¢ããŸããé«ã»ãã¥ãªãã£ã®ãããã€ã®å Žåãæ©å¯ãªãœãŒã¹ïŒèªèšŒæ å ±ãªã©ïŒããšãŒãžã§ã³ããå«ãå¢çã®å€ã«é 眮ã§ããŸãããšãŒãžã§ã³ãã®ç°å¢ã§äœãåé¡ãçºçããå Žåããã®å¢çå€ã®ãªãœãŒã¹ã¯ä¿è·ããããŸãŸã§ãã
ããšãã°ããšãŒãžã§ã³ãã« API ããŒãžã®çŽæ¥ã¢ã¯ã»ã¹ãäžãã代ããã«ããšãŒãžã§ã³ãã®ç°å¢å€ã§å®è¡ããããããã·ãå®è¡ããŠãããŒããªã¯ãšã¹ãã«æ³šå ¥ããããšãã§ããŸãããšãŒãžã§ã³ã㯠API åŒã³åºããå®è¡ã§ããŸãããèªèšŒæ å ±èªäœã¯èŠãããšã¯ãããŸããããã®ãã¿ãŒã³ã¯ããã«ãããã³ã ãããã€ã¡ã³ããŸãã¯ä¿¡é Œã§ããªãã³ã³ãã³ããåŠçããå Žåã«åœ¹ç«ã¡ãŸãã
æå°æš©é
å¿ èŠã«å¿ããŠããšãŒãžã§ã³ããç¹å®ã®ã¿ã¹ã¯ã«å¿ èŠãªæ©èœã®ã¿ã«å¶éã§ããŸãã
| ãªãœãŒã¹ | å¶éãªãã·ã§ã³ |
|---|---|
| ãã¡ã€ã«ã·ã¹ãã | å¿ èŠãªãã£ã¬ã¯ããªã®ã¿ãããŠã³ããèªã¿åãå°çšãåªå |
| ãããã¯ãŒã¯ | ãããã·çµç±ã§ç¹å®ã®ãšã³ããã€ã³ãã«å¶é |
| èªèšŒæ å ± | çŽæ¥å ¬éããã®ã§ã¯ãªãããããã·çµç±ã§æ³šå ¥ |
| ã·ã¹ãã æ©èœ | ã³ã³ããå ã® Linux æ©èœããããã |
å€å±€é²åŸ¡
é«ã»ãã¥ãªãã£ç°å¢ã§ã¯ãè€æ°ã®å¶åŸ¡ãã¬ã€ã€ãŒåããããšã§è¿œå ã®ä¿è·ãæäŸãããŸãããªãã·ã§ã³ã«ã¯ä»¥äžãå«ãŸããŸãã
- ã³ã³ããåé¢
- ãããã¯ãŒã¯å¶é
- ãã¡ã€ã«ã·ã¹ãã å¶åŸ¡
- ãããã·ã§ã®ãªã¯ãšã¹ãæ€èšŒ
é©åãªçµã¿åããã¯ãè åšã¢ãã«ãšéçšèŠä»¶ã«ãã£ãŠç°ãªããŸãã
åé¢ãã¯ãããžãŒ
ç°ãªãåé¢ãã¯ãããžãŒã¯ãã»ãã¥ãªãã£åŒ·åºŠãããã©ãŒãã³ã¹ãéçšã®è€éãã®éã§ç°ãªããã¬ãŒããªããæäŸããŸãã
ããããã¹ãŠã®æ§æã§ã¯ãClaude CodeïŒãŸã㯠Agent SDK ã¢ããªã±ãŒã·ã§ã³ïŒã¯åé¢å¢çïŒãµã³ãããã¯ã¹ãã³ã³ããããŸã㯠VMïŒå ã§å®è¡ãããŸãã以äžã§èª¬æããã»ãã¥ãªãã£å¶åŸ¡ã¯ããšãŒãžã§ã³ãããã®å¢çå ããã¢ã¯ã»ã¹ã§ãããã®ãå¶éããŸãã
| ãã¯ãããžãŒ | åé¢åŒ·åºŠ | ããã©ãŒãã³ã¹ãªãŒããŒããã | è€éã |
|---|---|---|---|
| Sandbox runtime | è¯å¥œïŒå®å šãªããã©ã«ãïŒ | éåžžã«äœã | äœã |
| ã³ã³ããïŒDockerïŒ | ã»ããã¢ããã«äŸå | äœã | äžçšåºŠ |
| gVisor | åªç§ïŒæ£ããã»ããã¢ããã§ïŒ | äžçšåºŠ/é«ã | äžçšåºŠ |
| VMïŒFirecrackerãQEMUïŒ | åªç§ïŒæ£ããã»ããã¢ããã§ïŒ | é«ã | äžçšåºŠ/é«ã |
Sandbox runtime
ã³ã³ãããªãã§è»œéãªåé¢ãè¡ãã«ã¯ãsandbox-runtime ã OS ã¬ãã«ã§ãã¡ã€ã«ã·ã¹ãã ãšãããã¯ãŒã¯ã®å¶éã匷å¶ããŸãã
äž»ãªå©ç¹ã¯ã·ã³ãã«ãã§ããDocker èšå®ãã³ã³ããã€ã¡ãŒãžããŸãã¯ãããã¯ãŒã¯èšå®ã¯å¿ èŠãããŸããããããã·ãšãã¡ã€ã«ã·ã¹ãã ã®å¶éã¯çµã¿èŸŒãŸããŠããŸããèš±å¯ããããã¡ã€ã³ãšãã¹ãæå®ããèšå®ãã¡ã€ã«ãæäŸããŸãã
åäœæ¹æ³:
- ãã¡ã€ã«ã·ã¹ãã : OS ããªããã£ãïŒLinux ã§ã¯
bubblewrapãmacOS ã§ã¯sandbox-execïŒã䜿çšããŠãèšå®ããããã¹ãžã®èªã¿åã/æžã蟌ã¿ã¢ã¯ã»ã¹ãå¶éããŸã - ãããã¯ãŒã¯: ãããã¯ãŒã¯åå空éãåé€ïŒLinuxïŒãŸã㯠Seatbelt ãããã¡ã€ã«ã䜿çšïŒmacOSïŒããŠããããã¯ãŒã¯ãã©ãã£ãã¯ãçµã¿èŸŒã¿ãããã·çµç±ã§ã«ãŒãã£ã³ã°ããŸã
- èšå®: ãã¡ã€ã³ãšãã¡ã€ã«ã·ã¹ãã ãã¹ã® JSON ããŒã¹ã®èš±å¯ãªã¹ã
ã»ããã¢ãã:
npm install @anthropic-ai/sandbox-runtime
次ã«ãèš±å¯ããããã¹ãšãã¡ã€ã³ãæå®ããèšå®ãã¡ã€ã«ãäœæããŸãã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé :
-
åäžãã¹ãã«ãŒãã«: VM ãšã¯ç°ãªãããµã³ãããã¯ã¹åãããããã»ã¹ã¯ãã¹ãã«ãŒãã«ãå ±æããŸããã«ãŒãã«ã®è匱æ§ã¯çè«çã«ã¯è±åºãå¯èœã«ããå¯èœæ§ããããŸããäžéšã®è åšã¢ãã«ã§ã¯ããã¯èš±å®¹å¯èœã§ãããã«ãŒãã«ã¬ãã«ã®åé¢ãå¿ èŠãªå Žåã¯ãgVisor ãŸãã¯å¥ã® VM ã䜿çšããŠãã ããã
-
TLS ã€ã³ã¹ãã¯ã·ã§ã³ãªã: ãããã·ã¯ãã¯ã©ã€ã¢ã³ããæäŸãããã¹ãåã«åºã¥ããŠãã¡ã€ã³ãèš±å¯ãªã¹ãã«ç»é²ããæå·åããããã©ãã£ãã¯ãçµäºãŸãã¯æ€æ»ããŸããããµã³ãããã¯ã¹å ã§å®è¡ãããŠããã³ãŒãã¯ããã¡ã€ã³ããã³ãã£ã³ã°ãŸãã¯åæ§ã®æè¡ã䜿çšããŠãèš±å¯ãªã¹ãå€ã®ãã¹ãã«å°éããå¯èœæ§ããããŸããè åšã¢ãã«ããã匷åãªä¿èšŒãå¿ èŠãšããå Žåã¯ãTLS çµäºãããã·ãèšå®ããŠãã ããã詳现ã«ã€ããŠã¯ããµã³ãããã¯ã¹ã»ãã¥ãªãã£ã®å¶éãåç §ããŠãã ãããå¥éããšãŒãžã§ã³ããèš±å¯ããããã¡ã€ã³ã«å¯Ÿããå¯å®¹ãªèªèšŒæ å ±ãæã£ãŠããå Žåããã®ãã¡ã€ã³ã䜿çšããŠä»ã®ãããã¯ãŒã¯ãªã¯ãšã¹ããããªã¬ãŒããããããŒã¿ãæµåºããããã§ããªãããã«ããŠãã ããã
å€ãã®åäžéçºè ããã³ CI/CD ãŠãŒã¹ã±ãŒã¹ã§ã¯ãsandbox-runtime ã¯æå°éã®ã»ããã¢ããã§å€§å¹ ã«æ¹åãããŸãã以äžã®ã»ã¯ã·ã§ã³ã§ã¯ããã匷åãªåé¢ãå¿ èŠãªãããã€ã¡ã³ãçšã®ã³ã³ãããš VM ã«ã€ããŠèª¬æããŸãã
ã³ã³ãã
ã³ã³ãã㯠Linux åå空éãéããŠåé¢ãæäŸããŸããåã³ã³ããã¯ãã¡ã€ã«ã·ã¹ãã ãããã»ã¹ããªãŒããããã¯ãŒã¯ã¹ã¿ãã¯ã®ç¬èªã®ãã¥ãŒãæã¡ãªããããã¹ãã«ãŒãã«ãå ±æããŸãã
ã»ãã¥ãªãã£ã匷åãããã³ã³ããèšå®ã¯æ¬¡ã®ããã«ãªããŸãã
docker run \
--cap-drop ALL \
--security-opt no-new-privileges \
--security-opt seccomp=/path/to/seccomp-profile.json \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=100m \
--tmpfs /home/agent:rw,noexec,nosuid,size=500m \
--network none \
--memory 2g \
--cpus 2 \
--pids-limit 100 \
--user 1000:1000 \
-v /path/to/code:/workspace:ro \
-v /var/run/proxy.sock:/var/run/proxy.sock:ro \
agent-image
åãªãã·ã§ã³ã®æ©èœã¯æ¬¡ã®ãšããã§ãã
| ãªãã·ã§ã³ | ç®ç |
|---|---|
--cap-drop ALL |
NET_ADMIN ã SYS_ADMIN ãªã©ã®æš©éææ Œãå¯èœã«ããå¯èœæ§ã®ãã Linux æ©èœãåé€ããŸã |
--security-opt no-new-privileges |
setuid ãã€ããªãéããŠããã»ã¹ãæš©éãååŸããã®ãé²ããŸã |
--security-opt seccomp=... |
å©çšå¯èœãªã·ã¹ãã ã³ãŒã«ãå¶éããŸããDocker ã®ããã©ã«ãã¯çŽ 44 ããããã¯ããã«ã¹ã¿ã ãããã¡ã€ã«ã¯ããã«ãããã¯ã§ããŸã |
--read-only |
ã³ã³ããã®ã«ãŒããã¡ã€ã«ã·ã¹ãã ãäžå€ã«ãããšãŒãžã§ã³ãã倿Žãæ°žç¶åããã®ãé²ããŸã |
--tmpfs /tmp:... |
ã³ã³ããã忢ãããšãã«ã¯ãªã¢ãããæžã蟌ã¿å¯èœãªäžæãã£ã¬ã¯ããªãæäŸããŸã |
--network none |
ãã¹ãŠã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ãåé€ããŸãããšãŒãžã§ã³ãã¯ããŠã³ãããã Unix ãœã±ããçµç±ã§éä¿¡ããŸã |
--memory 2g |
ã¡ã¢ãªäœ¿çšéã 2GB ã«å¶éããŠããªãœãŒã¹æ¯æžãé²ããŸã |
--pids-limit 100 |
ããã»ã¹æ°ãå¶éããŠãã©ãŒã¯ãã ãé²ããŸã |
--user 1000:1000 |
éã«ãŒããŠãŒã¶ãŒãšããŠå®è¡ããŸã |
-v ...:/workspace:ro |
ã³ãŒããèªã¿åãå°çšã§ããŠã³ãããŠããšãŒãžã§ã³ããåæã§ããã倿Žã§ããªãããã«ããŸãã~/.sshã~/.awsã~/.config ãªã©ã®æ©å¯ãã¹ããã£ã¬ã¯ããªã®ããŠã³ãã¯é¿ããŠãã ãã |
-v .../proxy.sock:... |
ã³ã³ããå€ã§å®è¡ãããŠãããããã·ã«æ¥ç¶ããã Unix ãœã±ãããããŠã³ãããŸãïŒä»¥äžãåç §ïŒ |
Unix ãœã±ããã¢ãŒããã¯ãã£:
--network none ã䜿çšãããšãã³ã³ããã¯ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ãæã¡ãŸããããšãŒãžã§ã³ããå€éšäžçã«å°éããå¯äžã®æ¹æ³ã¯ãããŠã³ãããã Unix ãœã±ããçµç±ã§ããããã¯ãã¹ãã§å®è¡ãããŠãããããã·ã«æ¥ç¶ããŸãããã®ãããã·ã¯ãã¡ã€ã³èš±å¯ãªã¹ãã匷å¶ããèªèšŒæ
å ±ãæ³šå
¥ãããã¹ãŠã®ãã©ãã£ãã¯ããã°ã«èšé²ã§ããŸãã
ãã㯠sandbox-runtime ã§äœ¿çšãããã®ãšåãã¢ãŒããã¯ãã£ã§ãããšãŒãžã§ã³ããããã³ããã€ã³ãžã§ã¯ã·ã§ã³çµç±ã§äŸµå®³ãããå Žåã§ããä»»æã®ãµãŒããŒã«ããŒã¿ãæµåºãããããšã¯ã§ããŸããããããã·çµç±ã§ã®ã¿éä¿¡ã§ãããããã·ã¯å°éå¯èœãªãã¡ã€ã³ãå¶åŸ¡ããŸãã詳现ã«ã€ããŠã¯ãClaude Code ãµã³ãããã¯ã¹ããã°æçš¿ãåç §ããŠãã ããã
远å ã®åŒ·åãªãã·ã§ã³:
| ãªãã·ã§ã³ | ç®ç |
|---|---|
--userns-remap |
ã³ã³ããã«ãŒããéç¹æš©ãã¹ããŠãŒã¶ãŒã«ãããããŸããããŒã¢ã³èšå®ãå¿ èŠã§ãããã³ã³ãããšã¹ã±ãŒãããã®ãã¡ãŒãžãå¶éããŸã |
--ipc private |
ããã»ã¹ééä¿¡ãåé¢ããŠãã¯ãã¹ã³ã³ããæ»æãé²ããŸã |
gVisor
æšæºã³ã³ããã¯ãã¹ãã«ãŒãã«ãå ±æããŸããã³ã³ããå ã®ã³ãŒããã·ã¹ãã ã³ãŒã«ãå®è¡ãããšããã¹ããå®è¡ããã®ãšåãã«ãŒãã«ã«çŽæ¥ç§»åããŸããããã¯ãã«ãŒãã«ã®è匱æ§ãã³ã³ãããšã¹ã±ãŒããèš±å¯ããå¯èœæ§ãããããšãæå³ããŸããgVisor ã¯ãŠãŒã¶ãŒã¹ããŒã¹ã§ã·ã¹ãã ã³ãŒã«ãã€ã³ã¿ãŒã»ããããŠãã¹ãã«ãŒãã«ã«å°éããåã«ãã»ãšãã©ã®ã·ã¹ãã ã³ãŒã«ãå®éã®ã«ãŒãã«ãé¢äžãããã«åŠçããç¬èªã®äºææ§ã¬ã€ã€ãŒãå®è£ ããããšã§ããã«å¯ŸåŠããŸãã
ãšãŒãžã§ã³ããæªæã®ããã³ãŒããå®è¡ããå ŽåïŒããããããã³ããã€ã³ãžã§ã¯ã·ã§ã³ãåå ïŒããã®ã³ãŒãã¯ã³ã³ããå ã§å®è¡ãããã«ãŒãã«ãšã¯ã¹ããã€ãã詊ã¿ãå¯èœæ§ããããŸããgVisor ã䜿çšãããšãæ»æé¢ã¯å€§å¹ ã«å°ãããªããŸããæªæã®ããã³ãŒãã¯æåã« gVisor ã®ãŠãŒã¶ãŒã¹ããŒã¹å®è£ ãæªçšããå¿ èŠããããå®éã®ã«ãŒãã«ãžã®ã¢ã¯ã»ã¹ã¯éå®çã§ãã
Docker ã§ gVisor ã䜿çšããã«ã¯ãrunsc ã©ã³ã¿ã€ã ãã€ã³ã¹ããŒã«ããŠããŒã¢ã³ãèšå®ããŸãã
// /etc/docker/daemon.json
{
"runtimes": {
"runsc": {
"path": "/usr/local/bin/runsc"
}
}
}
次ã«ã以äžã䜿çšããŠã³ã³ãããå®è¡ããŸãã
docker run --runtime=runsc agent-image
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé :
| ã¯ãŒã¯ããŒã | ãªãŒããŒããã |
|---|---|
| CPU ããŠã³ãèšç® | çŽ 0%ïŒã·ã¹ãã ã³ãŒã«ã€ã³ã¿ãŒã»ãã·ã§ã³ãªãïŒ |
| ã·ã³ãã«ãªã·ã¹ãã ã³ãŒã« | çŽ 2 åé ã |
| ãã¡ã€ã« I/O éçŽç | 倧éã®ãªãŒãã³/ã¯ããŒãºãã¿ãŒã³ã§æå€§ 10ïœ200 åé ã |
ãã«ãããã³ãç°å¢ãŸãã¯ä¿¡é Œã§ããªãã³ã³ãã³ããåŠçããå Žåã远å ã®åé¢ã¯ãã°ãã°äŸ¡å€ããããŸãã
ä»®æ³ãã·ã³
VM 㯠CPU ä»®æ³åæ¡åŒµæ©èœãéããŠããŒããŠã§ã¢ã¬ãã«ã®åé¢ãæäŸããŸããå VM ã¯ç¬èªã®ã«ãŒãã«ãå®è¡ãã匷åãªå¢çãäœæããŸããã²ã¹ãã«ãŒãã«ã®è匱æ§ã¯ãã¹ããçŽæ¥äŸµå®³ããŸããããã ããVM ã¯èªåçã« gVisor ãªã©ã®ä»£æ¿æ¡ãããããå®å šãã§ã¯ãããŸãããVM ã»ãã¥ãªãã£ã¯ãã€ããŒãã€ã¶ãŒãšããã€ã¹ãšãã¥ã¬ãŒã·ã§ã³ã³ãŒãã«å€§ããäŸåããŸãã
Firecracker ã¯è»œéãã€ã¯ã VM åé¢çšã«èšèšãããŠããŸãã125ms 以äžã§ VM ãããŒãã§ããã¡ã¢ãªãªãŒããŒããã㯠5 MiB æªæºã§ãäžèŠãªããã€ã¹ãšãã¥ã¬ãŒã·ã§ã³ãåé€ããŠæ»æé¢ãåæžããŸãã
ãã®ã¢ãããŒãã§ã¯ããšãŒãžã§ã³ã VM ã¯å€éšãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ãæã¡ãŸããã代ããã«ãvsockïŒä»®æ³ãœã±ããïŒãéããŠéä¿¡ããŸãããã¹ãŠã®ãã©ãã£ãã¯ã¯ vsock çµç±ã§ãã¹ãäžã®ãããã·ã«ã«ãŒãã£ã³ã°ããããããã·ãèš±å¯ãªã¹ãã匷å¶ãããªã¯ãšã¹ãã転éããåã«èªèšŒæ
å ±ãæ³šå
¥ããŸãã
ã¯ã©ãŠããããã€ã¡ã³ã
ã¯ã©ãŠããããã€ã¡ã³ãã®å Žåãäžèšã®åé¢ãã¯ãããžãŒã®ãããããã¯ã©ãŠããã€ãã£ããããã¯ãŒã¯å¶åŸ¡ãšçµã¿åãããããšãã§ããŸãã
- ãšãŒãžã§ã³ãã³ã³ãããã€ã³ã¿ãŒãããã²ãŒããŠã§ã€ãªãã®ãã©ã€ããŒããµããããã§å®è¡ããŸã
- ã¯ã©ãŠããã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ïŒAWS ã»ãã¥ãªãã£ã°ã«ãŒããGCP VPC ãã¡ã€ã¢ãŠã©ãŒã«ïŒãèšå®ããŠããããã·ä»¥å€ãžã®ãã¹ãŠã®éä¿¡ããããã¯ããŸã
- ãªã¯ãšã¹ããæ€èšŒãããã¡ã€ã³èš±å¯ãªã¹ãã匷å¶ããèªèšŒæ
å ±ãæ³šå
¥ããå€éš API ã«è»¢éãã Envoy ãªã©ã®ãããã·ïŒ
credential_injectorãã£ã«ã¿ãŒä»ãïŒãå®è¡ããŸã - ãšãŒãžã§ã³ãã®ãµãŒãã¹ã¢ã«ãŠã³ãã«æå°éã® IAM æš©éãå²ãåœãŠãæ©å¯ã¢ã¯ã»ã¹ããããã·çµç±ã§ã«ãŒãã£ã³ã°ããŸã
- ç£æ»ç®çã§ãããã·ã§ãã¹ãŠã®ãã©ãã£ãã¯ããã°ã«èšé²ããŸã
èªèšŒæ å ±ç®¡ç
ãšãŒãžã§ã³ãã¯ãAPI ãåŒã³åºãããªããžããªã«ã¢ã¯ã»ã¹ããã¯ã©ãŠããµãŒãã¹ãšçžäºäœçšããããã«èªèšŒæ å ±ãå¿ èŠãªããšããããããŸãã課é¡ã¯ãèªèšŒæ å ±èªäœãå ¬éããããšãªãããã®ã¢ã¯ã»ã¹ãæäŸããããšã§ãã
ãããã·ãã¿ãŒã³
æšå¥šãããã¢ãããŒãã¯ããšãŒãžã§ã³ãã®ã»ãã¥ãªãã£å¢çã®å€ã§ãããã·ãå®è¡ããŠãéä¿¡ãªã¯ãšã¹ãã«èªèšŒæ å ±ãæ³šå ¥ããããšã§ãããšãŒãžã§ã³ãã¯èªèšŒæ å ±ãªãã§ãªã¯ãšã¹ããéä¿¡ãããããã·ããããã远å ããŠããªã¯ãšã¹ããå®å ã«è»¢éããŸãã
ãã®ãã¿ãŒã³ã«ã¯ããã€ãã®å©ç¹ããããŸãã
- ãšãŒãžã§ã³ãã¯å®éã®èªèšŒæ å ±ãèŠãããšã¯ãããŸãã
- ãããã·ã¯èš±å¯ããããšã³ããã€ã³ãã®èš±å¯ãªã¹ãã匷å¶ã§ããŸã
- ãããã·ã¯ãã¹ãŠã®ãªã¯ãšã¹ããç£æ»çšã«ãã°ã«èšé²ã§ããŸã
- èªèšŒæ å ±ã¯åãšãŒãžã§ã³ãã«åæ£ãããã®ã§ã¯ãªãã1 ã€ã®å®å šãªå Žæã«ä¿åãããŸã
Claude Code ããããã·ã䜿çšããããã«èšå®ãã
Claude Code ã¯ããµã³ããªã³ã°ãªã¯ãšã¹ãããããã·çµç±ã§ã«ãŒãã£ã³ã°ããããã® 2 ã€ã®æ¹æ³ããµããŒãããŠããŸãã
ãªãã·ã§ã³ 1: ANTHROPIC_BASE_URLïŒã·ã³ãã«ã§ãããµã³ããªã³ã° API ãªã¯ãšã¹ãã®ã¿ïŒ
export ANTHROPIC_BASE_URL="http://localhost:8080"
ããã«ãããClaude Code ãš Agent SDK ã¯ãClaude API ã«çŽæ¥ã§ã¯ãªãããããã·ã«ãµã³ããªã³ã°ãªã¯ãšã¹ããéä¿¡ããããã«æç€ºãããŸãããããã·ã¯ãã¬ãŒã³ããã¹ã HTTP ãªã¯ãšã¹ããåãåããæ€æ»ããã³å€æŽïŒèªèšŒæ å ±ã®æ³šå ¥ãå«ãïŒããŠãããå®éã® API ã«è»¢éã§ããŸãã
ãªãã·ã§ã³ 2: HTTP_PROXY / HTTPS_PROXYïŒã·ã¹ãã å šäœïŒ
export HTTP_PROXY="http://localhost:8080"
export HTTPS_PROXY="http://localhost:8080"
Claude Code ãš Agent SDK ã¯ãããã®æšæºç°å¢å€æ°ãå°éãããã¹ãŠã® HTTP ãã©ãã£ãã¯ããããã·çµç±ã§ã«ãŒãã£ã³ã°ããŸããHTTPS ã®å Žåããããã·ã¯æå·åããã CONNECT ãã³ãã«ãäœæããŸããTLS ã€ã³ã¿ãŒã»ãã·ã§ã³ãªãã§ã¯ããªã¯ãšã¹ãã³ã³ãã³ããèŠãã倿Žãããããããšã¯ã§ããŸããã
ãããã·ã®å®è£
ç¬èªã®ãããã·ãæ§ç¯ããããæ¢åã®ãããã·ã䜿çšã§ããŸãã
- Envoy Proxy: èªèšŒããããŒã远å ããããã®
credential_injectorãã£ã«ã¿ãŒä»ãã®ãããã¯ã·ã§ã³ã°ã¬ãŒããããã· - mitmproxy: HTTPS ãã©ãã£ãã¯ãæ€æ»ããã³å€æŽããããã® TLS çµäºãããã·
- Squid: ã¢ã¯ã»ã¹å¶åŸ¡ãªã¹ãä»ãã®ãã£ãã·ã³ã°ãããã·
- LiteLLM: èªèšŒæ å ±æ³šå ¥ãšã¬ãŒãå¶éãåãã LLM ã²ãŒããŠã§ã€
ä»ã®ãµãŒãã¹ã®èªèšŒæ å ±
Claude API ããã®ãµã³ããªã³ã°ãè¶ ããŠããšãŒãžã§ã³ã㯠git ãªããžããªãããŒã¿ããŒã¹ãå éš API ãªã©ã®ä»ã®ãµãŒãã¹ãžã®èªèšŒæžã¿ã¢ã¯ã»ã¹ãå¿ èŠãªããšããããããŸãã䞻㫠2 ã€ã®ã¢ãããŒãããããŸãã
ã«ã¹ã¿ã ããŒã«
MCP ãµãŒããŒãŸãã¯ã«ã¹ã¿ã ããŒã«ãéããŠã¢ã¯ã»ã¹ãæäŸãããšãŒãžã§ã³ãã®ã»ãã¥ãªãã£å¢çã®å€ã§å®è¡ãããŠãããµãŒãã¹ã«ãªã¯ãšã¹ããã«ãŒãã£ã³ã°ããŸãããšãŒãžã§ã³ãã¯ããŒã«ãåŒã³åºããŸãããå®éã®èªèšŒæžã¿ãªã¯ãšã¹ãã¯å€éšã§çºçããŸããããŒã«åŒã³åºãã¯ãããã·ã«å¯ŸããŠè¡ããããããã·ãèªèšŒæ å ±ãæ³šå ¥ããŸãã
ããšãã°ãgit MCP ãµãŒããŒã¯ãšãŒãžã§ã³ãããã®ã³ãã³ããåãå ¥ããããšãã§ããŸããããã¹ãã§å®è¡ãããŠãã git ãããã·ã«ãããã転éãããããã·ããªã¢ãŒããªããžããªã«æ¥ç¶ããåã«èªèšŒã远å ããŸãããšãŒãžã§ã³ãã¯èªèšŒæ å ±ãèŠãããšã¯ãããŸããã
å©ç¹:
- TLS ã€ã³ã¿ãŒã»ãã·ã§ã³ãªã: å€éšãµãŒãã¹ã¯èªèšŒæžã¿ãªã¯ãšã¹ããçŽæ¥å®è¡ããŸã
- èªèšŒæ å ±ã¯å€éšã«çãŸã: ãšãŒãžã§ã³ãã¯ããŒã«ã€ã³ã¿ãŒãã§ãŒã¹ã®ã¿ãèŠãŠãåºç€ãšãªãèªèšŒæ å ±ã¯èŠãŸãã
ãã©ãã£ãã¯è»¢é
Claude API åŒã³åºãã®å ŽåãANTHROPIC_BASE_URL ã䜿çšãããšããã¬ãŒã³ããã¹ãã§ãªã¯ãšã¹ããæ€æ»ããã³å€æŽã§ãããããã·ã«ãªã¯ãšã¹ããã«ãŒãã£ã³ã°ã§ããŸãããã ããä»ã® HTTPS ãµãŒãã¹ïŒGitHubãnpm ã¬ãžã¹ããªãå
éš APIïŒã®å Žåããã©ãã£ãã¯ã¯ãã°ãã°ãšã³ãããŒãšã³ãã§æå·åãããŸããHTTP_PROXY çµç±ã§ãããã·çµç±ã§ã«ãŒãã£ã³ã°ããŠãããããã·ã¯äžéæãª TLS ãã³ãã«ã®ã¿ãèŠãŠãèªèšŒæ
å ±ãæ³šå
¥ããããšã¯ã§ããŸããã
ã«ã¹ã¿ã ããŒã«ã䜿çšããã«ä»»æã®ãµãŒãã¹ãžã® HTTPS ãã©ãã£ãã¯ã倿Žããã«ã¯ããã©ãã£ãã¯ã埩å·åããæ€æ»ãŸãã¯å€æŽããŠããã転éããåã«åæå·åãã TLS çµäºãããã·ãå¿ èŠã§ããããã«ã¯ä»¥äžãå¿ èŠã§ãã
- ãšãŒãžã§ã³ãã®ã³ã³ããã®å€ã§ãããã·ãå®è¡ãã
- ãããã·ã® CA èšŒææžããšãŒãžã§ã³ãã®ä¿¡é Œã¹ãã¢ã«ã€ã³ã¹ããŒã«ããïŒãšãŒãžã§ã³ãããããã·ã®èšŒææžãä¿¡é ŒããããïŒ
HTTP_PROXY/HTTPS_PROXYãèšå®ããŠãã©ãã£ãã¯ããããã·çµç±ã§ã«ãŒãã£ã³ã°ãã
ãã®ã¢ãããŒãã¯ã«ã¹ã¿ã ããŒã«ãèšè¿°ããããšãªããHTTP ããŒã¹ã®ãµãŒãã¹ãåŠçããŸãããèšŒææžç®¡çã®è€éããå¢ããŸãã
ãã¹ãŠã®ããã°ã©ã ã HTTP_PROXY/HTTPS_PROXY ãå°éããããã§ã¯ãªãããšã«æ³šæããŠãã ãããã»ãšãã©ã®ããŒã«ïŒcurlãpipãnpmãgitïŒã¯å°éããŸããããããã®å€æ°ããã€ãã¹ããŠçŽæ¥æ¥ç¶ããå ŽåããããŸããããšãã°ãNode.js fetch() ã¯ããã©ã«ãã§ã¯ãããã®å€æ°ãç¡èŠããŸããNode 24 以éã§ã¯ãNODE_USE_ENV_PROXY=1 ãèšå®ããŠãµããŒããæå¹ã«ã§ããŸããå
æ¬çãªã«ãã¬ããžã®å Žåãproxychains ã䜿çšããŠãããã¯ãŒã¯åŒã³åºããã€ã³ã¿ãŒã»ããããããiptables ãèšå®ããŠéä¿¡ãã©ãã£ãã¯ãééãããã·ã«ãªãã€ã¬ã¯ãã§ããŸãã
ééãããã·ã¯ãããã¯ãŒã¯ã¬ãã«ã§ãã©ãã£ãã¯ãã€ã³ã¿ãŒã»ãããããããã¯ã©ã€ã¢ã³ãã¯ããã䜿çšããããã«èšå®ããå¿ èŠããããŸãããéåžžã®ãããã·ã¯ã¯ã©ã€ã¢ã³ããæç€ºçã«æ¥ç¶ã㊠HTTP CONNECT ãŸã㯠SOCKS ã話ãå¿ èŠããããŸããééãããã·ïŒSquid ãŸãã¯ééã¢ãŒãã® mitmproxy ãªã©ïŒã¯ããªãã€ã¬ã¯ããããçã® TCP æ¥ç¶ãåŠçã§ããŸãã
ã©ã¡ãã®ã¢ãããŒãã§ããTLS çµäºãããã·ãšä¿¡é Œããã CA èšŒææžãå¿ èŠã§ãããã©ãã£ãã¯ãå®éã«ãããã·ã«å°éããããšã確èªããã ãã§ãã
ãã¡ã€ã«ã·ã¹ãã èšå®
ãã¡ã€ã«ã·ã¹ãã å¶åŸ¡ã¯ããšãŒãžã§ã³ããèªã¿åãããã³æžã蟌ã¿ã§ãããã¡ã€ã«ã決å®ããŸãã
èªã¿åãå°çšã³ãŒãããŠã³ã
ãšãŒãžã§ã³ããã³ãŒããåæããå¿ èŠãããã倿Žããªãå Žåã¯ããã£ã¬ã¯ããªãèªã¿åãå°çšã§ããŠã³ãããŸãã
docker run -v /path/to/code:/workspace:ro agent-image
ã³ãŒããã£ã¬ã¯ããªãžã®èªã¿åãå°çšã¢ã¯ã»ã¹ã§ããèªèšŒæ å ±ãå ¬éããå¯èœæ§ããããŸããããŠã³ãåã«é€å€ãŸãã¯ãµãã¿ã€ãºããäžè¬çãªãã¡ã€ã«:
| ãã¡ã€ã« | ãªã¹ã¯ |
|---|---|
.envã.env.local |
API ããŒãããŒã¿ããŒã¹ãã¹ã¯ãŒããã·ãŒã¯ã¬ãã |
~/.git-credentials |
ãã¬ãŒã³ããã¹ãã® git ãã¹ã¯ãŒã/ããŒã¯ã³ |
~/.aws/credentials |
AWS ã¢ã¯ã»ã¹ã㌠|
~/.config/gcloud/application_default_credentials.json |
Google Cloud ADC ããŒã¯ã³ |
~/.azure/ |
Azure CLI èªèšŒæ å ± |
~/.docker/config.json |
Docker ã¬ãžã¹ããªèªèšŒããŒã¯ã³ |
~/.kube/config |
Kubernetes ã¯ã©ã¹ã¿ãŒèªèšŒæ å ± |
.npmrcã.pypirc |
ããã±ãŒãžã¬ãžã¹ããªããŒã¯ã³ |
*-service-account.json |
GCP ãµãŒãã¹ã¢ã«ãŠã³ãã㌠|
*.pemã*.key |
ç§å¯éµ |
å¿
èŠãªãœãŒã¹ãã¡ã€ã«ã®ã¿ãã³ããŒãããã.dockerignore ã¹ã¿ã€ã«ã®ãã£ã«ã¿ãªã³ã°ã䜿çšããããšãæ€èšããŠãã ããã
æžã蟌ã¿å¯èœãªå Žæ
ãšãŒãžã§ã³ãããã¡ã€ã«ãæžã蟌ãå¿ èŠãããå Žåã倿Žãæ°žç¶åãããã©ããã«å¿ããŠãããã€ãã®ãªãã·ã§ã³ããããŸãã
ã³ã³ããå
ã®äžæçãªã¯ãŒã¯ã¹ããŒã¹ã®å Žåãã¡ã¢ãªå
ã«ã®ã¿ååšããã³ã³ããã忢ãããšãã«ã¯ãªã¢ããã tmpfs ããŠã³ãã䜿çšããŸãã
docker run \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=100m \
--tmpfs /workspace:rw,noexec,size=500m \
agent-image
倿Žãæ°žç¶åããåã«ç¢ºèªãããå ŽåããªãŒããŒã¬ã€ãã¡ã€ã«ã·ã¹ãã ã䜿çšãããšããšãŒãžã§ã³ãã¯åºç€ãšãªããã¡ã€ã«ã倿Žããããšãªãæžã蟌ã¿ã§ããŸãã倿Žã¯å¥ã®ã¬ã€ã€ãŒã«ä¿åãããæ€æ»ãé©çšããŸãã¯ç Žæ£ã§ããŸããå®å šã«æ°žç¶çãªåºåã®å Žåãå°çšããªã¥ãŒã ãããŠã³ãããŸãããæ©å¯ãã£ã¬ã¯ããªãšã¯å¥ã«ä¿ã€ããã«ããŠãã ããã
ããã«è©³ãã
- Claude Code ã»ãã¥ãªãã£ããã¥ã¡ã³ã
- Agent SDK ã®ãã¹ãã£ã³ã°
- æš©éã®åŠç
- Sandbox runtime
- AI ãšãŒãžã§ã³ãã®èŽåœçãªäžã€çµ
- OWASP Top 10 for LLM Applications
- Docker ã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹
- gVisor ããã¥ã¡ã³ã
- Firecracker ããã¥ã¡ã³ã