[{"data":1,"prerenderedAt":2533},["ShallowReactive",2],{"content-/claude-code-safe-autonomous-setup":3,"all-pages-for-dir":2531,"og-image-/claude-code-safe-autonomous-setup":2532},{"id":4,"title":5,"body":6,"category":2511,"description":2512,"extension":2513,"meta":2514,"navigation":798,"ogImage":2515,"path":2516,"project_name":2517,"published":2518,"publishedAt":2519,"seo":2520,"stem":2521,"tags":2522,"todo":2515,"unpublished":2518,"updatedAt":2515,"__hash__":2530},"pages/2026-03/2026-03-20/claude-code-safe-autonomous-setup.md","Claude Code 安全な自律実行環境 構築ガイド",{"type":7,"value":8,"toc":2472},"minimark",[9,13,52,55,60,156,162,164,168,173,178,188,593,596,603,722,726,765,767,771,774,777,852,855,858,901,905,913,916,946,949,1006,1010,1039,1041,1045,1048,1051,1059,1063,1069,1078,1082,1087,1329,1333,1338,1439,1460,1464,1471,1476,1609,1618,1722,1726,1731,1746,1797,1802,1865,1870,1902,1906,1917,1922,1937,1942,1951,1957,1962,1985,1998,2000,2003,2006,2090,2094,2149,2152,2208,2210,2213,2219,2221,2224,2228,2265,2269,2325,2329,2349,2357,2367,2444,2448,2468],[10,11,5],"h1",{"id":12},"claude-code-安全な自律実行環境-構築ガイド",[14,15,16],"blockquote",{},[17,18,19,23,24,27,30,31,35,36,38,41,42,44,47,48,51],"p",{},[20,21,22],"strong",{},"対象環境:"," Windows + PowerShell + Docker Desktop",[25,26],"br",{},[20,28,29],{},"認証方式:"," Claude Pro/Max サブスクリプション（OAuth — ",[32,33,34],"code",{},"claude login","）",[25,37],{},[20,39,40],{},"作成日:"," 2026-03-19",[25,43],{},[20,45,46],{},"目的:"," ",[32,49,50],{},"--dangerously-skip-permissions"," を安全に使うための環境構築と運用手順",[53,54],"hr",{},[56,57,59],"h2",{"id":58},"概要3つのアプローチ","概要：3つのアプローチ",[61,62,63,85],"table",{},[64,65,66],"thead",{},[67,68,69,73,76,79,82],"tr",{},[70,71,72],"th",{},"レベル",[70,74,75],{},"方法",[70,77,78],{},"安全性",[70,80,81],{},"手軽さ",[70,83,84],{},"ホストへの影響",[86,87,88,111,135],"tbody",{},[67,89,90,96,102,105,108],{},[91,92,93],"td",{},[20,94,95],{},"Lv.1",[91,97,98,101],{},[32,99,100],{},"allowedTools"," 設定",[91,103,104],{},"◎ 高い",[91,106,107],{},"◎ 即使える",[91,109,110],{},"なし（許可した操作のみ）",[67,112,113,118,126,129,132],{},[91,114,115],{},[20,116,117],{},"Lv.2",[91,119,120,123,124],{},[32,121,122],{},"--worktree"," + ",[32,125,50],{},[91,127,128],{},"○ Git レベル隔離",[91,130,131],{},"○ 簡単",[91,133,134],{},"bash コマンドはホスト全体に到達しうる",[67,136,137,142,147,150,153],{},[91,138,139],{},[20,140,141],{},"Lv.3",[91,143,144,145],{},"devcontainer + ",[32,146,50],{},[91,148,149],{},"◎ OS レベル隔離",[91,151,152],{},"△ 初回構築が必要",[91,154,155],{},"コンテナ内に完全封じ込め",[17,157,158,161],{},[20,159,160],{},"推奨:"," 普段は Lv.1、自律的に回したいときは Lv.2、本当に何でもやらせたいときは Lv.3。",[53,163],{},[56,165,167],{"id":166},"lv1-allowedtools-での代替設定パーミッション不要にはしない","Lv.1: allowedTools での代替設定（パーミッション不要にはしない）",[17,169,170,172],{},[32,171,50],{}," を使わずに、よく使うツールだけ自動承認する方法。\n最も安全で、日常的にはこれで十分なケースが多い。",[174,175,177],"h3",{"id":176},"グローバル設定全プロジェクト共通","グローバル設定（全プロジェクト共通）",[17,179,180,183,184,187],{},[32,181,182],{},"~/.claude.json"," に記述する（Windows の場合 ",[32,185,186],{},"C:\\Users\\\u003Cユーザー名>\\.claude.json","）：",[189,190,195],"pre",{"className":191,"code":192,"language":193,"meta":194,"style":194},"language-json shiki shiki-themes vitesse-light vitesse-light","{\n  \"permissions\": {\n    \"allow\": [\n      \"Read\",\n      \"Edit(src/**)\",\n      \"Edit(tests/**)\",\n      \"Edit(docs/**)\",\n      \"Bash(npm run *)\",\n      \"Bash(npm test *)\",\n      \"Bash(npm install *)\",\n      \"Bash(git add *)\",\n      \"Bash(git commit *)\",\n      \"Bash(git diff *)\",\n      \"Bash(git log *)\",\n      \"Bash(git status)\",\n      \"Bash(ls *)\",\n      \"Bash(cat *)\",\n      \"Bash(mkdir *)\",\n      \"Bash(grep *)\",\n      \"Bash(find *)\"\n    ],\n    \"deny\": [\n      \"Bash(rm -rf *)\",\n      \"Bash(rm -r /*)\",\n      \"Bash(git push *)\",\n      \"Bash(git push)\",\n      \"Bash(curl *)\",\n      \"Bash(wget *)\",\n      \"Edit(.env*)\",\n      \"Edit(*.key)\",\n      \"Edit(*.pem)\"\n    ]\n  }\n}\n","json","",[32,196,197,206,226,242,258,270,282,294,306,318,330,342,354,366,378,390,402,414,426,438,449,455,469,481,493,505,517,529,541,553,565,575,581,587],{"__ignoreMap":194},[198,199,202],"span",{"class":200,"line":201},"line",1,[198,203,205],{"class":204},"shFtX","{\n",[198,207,209,213,217,220,223],{"class":200,"line":208},2,[198,210,212],{"class":211},"sqvqQ","  \"",[198,214,216],{"class":215},"sz8Xr","permissions",[198,218,219],{"class":211},"\"",[198,221,222],{"class":204},":",[198,224,225],{"class":204}," {\n",[198,227,229,232,235,237,239],{"class":200,"line":228},3,[198,230,231],{"class":211},"    \"",[198,233,234],{"class":215},"allow",[198,236,219],{"class":211},[198,238,222],{"class":204},[198,240,241],{"class":204}," [\n",[198,243,245,249,253,255],{"class":200,"line":244},4,[198,246,248],{"class":247},"sMJiu","      \"",[198,250,252],{"class":251},"sdGka","Read",[198,254,219],{"class":247},[198,256,257],{"class":204},",\n",[198,259,261,263,266,268],{"class":200,"line":260},5,[198,262,248],{"class":247},[198,264,265],{"class":251},"Edit(src/**)",[198,267,219],{"class":247},[198,269,257],{"class":204},[198,271,273,275,278,280],{"class":200,"line":272},6,[198,274,248],{"class":247},[198,276,277],{"class":251},"Edit(tests/**)",[198,279,219],{"class":247},[198,281,257],{"class":204},[198,283,285,287,290,292],{"class":200,"line":284},7,[198,286,248],{"class":247},[198,288,289],{"class":251},"Edit(docs/**)",[198,291,219],{"class":247},[198,293,257],{"class":204},[198,295,297,299,302,304],{"class":200,"line":296},8,[198,298,248],{"class":247},[198,300,301],{"class":251},"Bash(npm run *)",[198,303,219],{"class":247},[198,305,257],{"class":204},[198,307,309,311,314,316],{"class":200,"line":308},9,[198,310,248],{"class":247},[198,312,313],{"class":251},"Bash(npm test *)",[198,315,219],{"class":247},[198,317,257],{"class":204},[198,319,321,323,326,328],{"class":200,"line":320},10,[198,322,248],{"class":247},[198,324,325],{"class":251},"Bash(npm install *)",[198,327,219],{"class":247},[198,329,257],{"class":204},[198,331,333,335,338,340],{"class":200,"line":332},11,[198,334,248],{"class":247},[198,336,337],{"class":251},"Bash(git add *)",[198,339,219],{"class":247},[198,341,257],{"class":204},[198,343,345,347,350,352],{"class":200,"line":344},12,[198,346,248],{"class":247},[198,348,349],{"class":251},"Bash(git commit *)",[198,351,219],{"class":247},[198,353,257],{"class":204},[198,355,357,359,362,364],{"class":200,"line":356},13,[198,358,248],{"class":247},[198,360,361],{"class":251},"Bash(git diff *)",[198,363,219],{"class":247},[198,365,257],{"class":204},[198,367,369,371,374,376],{"class":200,"line":368},14,[198,370,248],{"class":247},[198,372,373],{"class":251},"Bash(git log *)",[198,375,219],{"class":247},[198,377,257],{"class":204},[198,379,381,383,386,388],{"class":200,"line":380},15,[198,382,248],{"class":247},[198,384,385],{"class":251},"Bash(git status)",[198,387,219],{"class":247},[198,389,257],{"class":204},[198,391,393,395,398,400],{"class":200,"line":392},16,[198,394,248],{"class":247},[198,396,397],{"class":251},"Bash(ls *)",[198,399,219],{"class":247},[198,401,257],{"class":204},[198,403,405,407,410,412],{"class":200,"line":404},17,[198,406,248],{"class":247},[198,408,409],{"class":251},"Bash(cat *)",[198,411,219],{"class":247},[198,413,257],{"class":204},[198,415,417,419,422,424],{"class":200,"line":416},18,[198,418,248],{"class":247},[198,420,421],{"class":251},"Bash(mkdir *)",[198,423,219],{"class":247},[198,425,257],{"class":204},[198,427,429,431,434,436],{"class":200,"line":428},19,[198,430,248],{"class":247},[198,432,433],{"class":251},"Bash(grep *)",[198,435,219],{"class":247},[198,437,257],{"class":204},[198,439,441,443,446],{"class":200,"line":440},20,[198,442,248],{"class":247},[198,444,445],{"class":251},"Bash(find *)",[198,447,448],{"class":247},"\"\n",[198,450,452],{"class":200,"line":451},21,[198,453,454],{"class":204},"    ],\n",[198,456,458,460,463,465,467],{"class":200,"line":457},22,[198,459,231],{"class":211},[198,461,462],{"class":215},"deny",[198,464,219],{"class":211},[198,466,222],{"class":204},[198,468,241],{"class":204},[198,470,472,474,477,479],{"class":200,"line":471},23,[198,473,248],{"class":247},[198,475,476],{"class":251},"Bash(rm -rf *)",[198,478,219],{"class":247},[198,480,257],{"class":204},[198,482,484,486,489,491],{"class":200,"line":483},24,[198,485,248],{"class":247},[198,487,488],{"class":251},"Bash(rm -r /*)",[198,490,219],{"class":247},[198,492,257],{"class":204},[198,494,496,498,501,503],{"class":200,"line":495},25,[198,497,248],{"class":247},[198,499,500],{"class":251},"Bash(git push *)",[198,502,219],{"class":247},[198,504,257],{"class":204},[198,506,508,510,513,515],{"class":200,"line":507},26,[198,509,248],{"class":247},[198,511,512],{"class":251},"Bash(git push)",[198,514,219],{"class":247},[198,516,257],{"class":204},[198,518,520,522,525,527],{"class":200,"line":519},27,[198,521,248],{"class":247},[198,523,524],{"class":251},"Bash(curl *)",[198,526,219],{"class":247},[198,528,257],{"class":204},[198,530,532,534,537,539],{"class":200,"line":531},28,[198,533,248],{"class":247},[198,535,536],{"class":251},"Bash(wget *)",[198,538,219],{"class":247},[198,540,257],{"class":204},[198,542,544,546,549,551],{"class":200,"line":543},29,[198,545,248],{"class":247},[198,547,548],{"class":251},"Edit(.env*)",[198,550,219],{"class":247},[198,552,257],{"class":204},[198,554,556,558,561,563],{"class":200,"line":555},30,[198,557,248],{"class":247},[198,559,560],{"class":251},"Edit(*.key)",[198,562,219],{"class":247},[198,564,257],{"class":204},[198,566,568,570,573],{"class":200,"line":567},31,[198,569,248],{"class":247},[198,571,572],{"class":251},"Edit(*.pem)",[198,574,448],{"class":247},[198,576,578],{"class":200,"line":577},32,[198,579,580],{"class":204},"    ]\n",[198,582,584],{"class":200,"line":583},33,[198,585,586],{"class":204},"  }\n",[198,588,590],{"class":200,"line":589},34,[198,591,592],{"class":204},"}\n",[174,594,595],{"id":595},"プロジェクト単位の設定",[17,597,598,599,602],{},"プロジェクトルートに ",[32,600,601],{},".claude/settings.json"," を作成：",[189,604,606],{"className":191,"code":605,"language":193,"meta":194,"style":194},"{\n  \"permissions\": {\n    \"allow\": [\n      \"Edit(src/**)\",\n      \"Edit(tests/**)\",\n      \"Bash(python *)\",\n      \"Bash(pip install *)\"\n    ],\n    \"deny\": [\n      \"Bash(rm -rf *)\",\n      \"Edit(.env*)\"\n    ]\n  }\n}\n",[32,607,608,612,624,636,646,656,667,676,680,692,702,710,714,718],{"__ignoreMap":194},[198,609,610],{"class":200,"line":201},[198,611,205],{"class":204},[198,613,614,616,618,620,622],{"class":200,"line":208},[198,615,212],{"class":211},[198,617,216],{"class":215},[198,619,219],{"class":211},[198,621,222],{"class":204},[198,623,225],{"class":204},[198,625,626,628,630,632,634],{"class":200,"line":228},[198,627,231],{"class":211},[198,629,234],{"class":215},[198,631,219],{"class":211},[198,633,222],{"class":204},[198,635,241],{"class":204},[198,637,638,640,642,644],{"class":200,"line":244},[198,639,248],{"class":247},[198,641,265],{"class":251},[198,643,219],{"class":247},[198,645,257],{"class":204},[198,647,648,650,652,654],{"class":200,"line":260},[198,649,248],{"class":247},[198,651,277],{"class":251},[198,653,219],{"class":247},[198,655,257],{"class":204},[198,657,658,660,663,665],{"class":200,"line":272},[198,659,248],{"class":247},[198,661,662],{"class":251},"Bash(python *)",[198,664,219],{"class":247},[198,666,257],{"class":204},[198,668,669,671,674],{"class":200,"line":284},[198,670,248],{"class":247},[198,672,673],{"class":251},"Bash(pip install *)",[198,675,448],{"class":247},[198,677,678],{"class":200,"line":296},[198,679,454],{"class":204},[198,681,682,684,686,688,690],{"class":200,"line":308},[198,683,231],{"class":211},[198,685,462],{"class":215},[198,687,219],{"class":211},[198,689,222],{"class":204},[198,691,241],{"class":204},[198,693,694,696,698,700],{"class":200,"line":320},[198,695,248],{"class":247},[198,697,476],{"class":251},[198,699,219],{"class":247},[198,701,257],{"class":204},[198,703,704,706,708],{"class":200,"line":332},[198,705,248],{"class":247},[198,707,548],{"class":251},[198,709,448],{"class":247},[198,711,712],{"class":200,"line":344},[198,713,580],{"class":204},[198,715,716],{"class":200,"line":356},[198,717,586],{"class":204},[198,719,720],{"class":200,"line":368},[198,721,592],{"class":204},[174,723,725],{"id":724},"allowedtools-のポイント","allowedTools のポイント",[727,728,729,735,743,750,759],"ul",{},[730,731,732,734],"li",{},[32,733,234],{}," に書いたツールは確認なしで即実行される",[730,736,737,739,740,742],{},[32,738,462],{}," は ",[32,741,234],{}," より優先される（deny が勝つ）",[730,744,745,746,749],{},"ワイルドカード ",[32,747,748],{},"*"," が使える",[730,751,752,754,755,758],{},[32,753,462],{}," に ",[32,756,757],{},"rm -rf"," を入れておけば致命的な事故は防げる",[730,760,761,764],{},[32,762,763],{},"/permissions"," コマンドで現在の設定を確認できる",[53,766],{},[56,768,770],{"id":769},"lv2-worktree-dangerously-skip-permissions","Lv.2: worktree + dangerously-skip-permissions",[17,772,773],{},"Git worktree で「壊れてもいい砂場」を作り、その中で自律実行する。",[174,775,776],{"id":776},"基本コマンド",[189,778,782],{"className":779,"code":780,"language":781,"meta":194,"style":194},"language-powershell shiki shiki-themes vitesse-light vitesse-light","# worktree を作って、その中で自律実行\nclaude --worktree my-experiment --dangerously-skip-permissions \"タスクの指示\"\n\n# 短縮形\nclaude -w my-experiment --dangerously-skip-permissions \"タスクの指示\"\n\n# インタラクティブモードで起動（指示は後から入力）\nclaude -w my-experiment --dangerously-skip-permissions\n\n# 予算上限も付ける\nclaude -w my-experiment --dangerously-skip-permissions --max-budget-usd 5.00\n\n# セッション名を付けて後で再開可能にする\nclaude -w my-experiment --dangerously-skip-permissions --resume session-name\n","powershell",[32,783,784,789,794,800,805,810,814,819,824,828,833,838,842,847],{"__ignoreMap":194},[198,785,786],{"class":200,"line":201},[198,787,788],{},"# worktree を作って、その中で自律実行\n",[198,790,791],{"class":200,"line":208},[198,792,793],{},"claude --worktree my-experiment --dangerously-skip-permissions \"タスクの指示\"\n",[198,795,796],{"class":200,"line":228},[198,797,799],{"emptyLinePlaceholder":798},true,"\n",[198,801,802],{"class":200,"line":244},[198,803,804],{},"# 短縮形\n",[198,806,807],{"class":200,"line":260},[198,808,809],{},"claude -w my-experiment --dangerously-skip-permissions \"タスクの指示\"\n",[198,811,812],{"class":200,"line":272},[198,813,799],{"emptyLinePlaceholder":798},[198,815,816],{"class":200,"line":284},[198,817,818],{},"# インタラクティブモードで起動（指示は後から入力）\n",[198,820,821],{"class":200,"line":296},[198,822,823],{},"claude -w my-experiment --dangerously-skip-permissions\n",[198,825,826],{"class":200,"line":308},[198,827,799],{"emptyLinePlaceholder":798},[198,829,830],{"class":200,"line":320},[198,831,832],{},"# 予算上限も付ける\n",[198,834,835],{"class":200,"line":332},[198,836,837],{},"claude -w my-experiment --dangerously-skip-permissions --max-budget-usd 5.00\n",[198,839,840],{"class":200,"line":344},[198,841,799],{"emptyLinePlaceholder":798},[198,843,844],{"class":200,"line":356},[198,845,846],{},"# セッション名を付けて後で再開可能にする\n",[198,848,849],{"class":200,"line":368},[198,850,851],{},"claude -w my-experiment --dangerously-skip-permissions --resume session-name\n",[174,853,854],{"id":854},"複数セッション並列実行",[17,856,857],{},"PowerShell のタブやウィンドウを分けて：",[189,859,861],{"className":779,"code":860,"language":781,"meta":194,"style":194},"# ターミナル 1\nclaude -w feature-auth --dangerously-skip-permissions\n\n# ターミナル 2\nclaude -w bugfix-api --dangerously-skip-permissions\n\n# ターミナル 3（メインブランチは手動作業用に温存）\nclaude\n",[32,862,863,868,873,877,882,887,891,896],{"__ignoreMap":194},[198,864,865],{"class":200,"line":201},[198,866,867],{},"# ターミナル 1\n",[198,869,870],{"class":200,"line":208},[198,871,872],{},"claude -w feature-auth --dangerously-skip-permissions\n",[198,874,875],{"class":200,"line":228},[198,876,799],{"emptyLinePlaceholder":798},[198,878,879],{"class":200,"line":244},[198,880,881],{},"# ターミナル 2\n",[198,883,884],{"class":200,"line":260},[198,885,886],{},"claude -w bugfix-api --dangerously-skip-permissions\n",[198,888,889],{"class":200,"line":272},[198,890,799],{"emptyLinePlaceholder":798},[198,892,893],{"class":200,"line":284},[198,894,895],{},"# ターミナル 3（メインブランチは手動作業用に温存）\n",[198,897,898],{"class":200,"line":296},[198,899,900],{},"claude\n",[174,902,904],{"id":903},"worktree-の構造","worktree の構造",[189,906,911],{"className":907,"code":909,"language":910},[908],"language-text","my-project/                          ← メインワーキングツリー（main ブランチ・手付かず）\n├── .git/                            ← 共有される Git データベース\n├── .claude/\n│   └── worktrees/\n│       ├── my-experiment/           ← worktree 1（独自ブランチ）\n│       └── feature-auth/            ← worktree 2（独自ブランチ）\n└── src/\n","text",[32,912,909],{"__ignoreMap":194},[174,914,915],{"id":915},"終了時の挙動",[61,917,918,928],{},[64,919,920],{},[67,921,922,925],{},[70,923,924],{},"状態",[70,926,927],{},"挙動",[86,929,930,938],{},[67,931,932,935],{},[91,933,934],{},"変更なし",[91,936,937],{},"worktree とブランチが自動削除される",[67,939,940,943],{},[91,941,942],{},"変更あり",[91,944,945],{},"keep（残す）か remove（削除）か聞かれる",[174,947,948],{"id":948},"手動クリーンアップ",[189,950,952],{"className":779,"code":951,"language":781,"meta":194,"style":194},"# worktree の一覧を確認\ngit worktree list\n\n# 特定の worktree を削除\ngit worktree remove .claude/worktrees/my-experiment\n\n# 強制削除（未コミットの変更があっても削除）\ngit worktree remove --force .claude/worktrees/my-experiment\n\n# 古い worktree のメタデータを掃除\ngit worktree prune\n",[32,953,954,959,964,968,973,978,982,987,992,996,1001],{"__ignoreMap":194},[198,955,956],{"class":200,"line":201},[198,957,958],{},"# worktree の一覧を確認\n",[198,960,961],{"class":200,"line":208},[198,962,963],{},"git worktree list\n",[198,965,966],{"class":200,"line":228},[198,967,799],{"emptyLinePlaceholder":798},[198,969,970],{"class":200,"line":244},[198,971,972],{},"# 特定の worktree を削除\n",[198,974,975],{"class":200,"line":260},[198,976,977],{},"git worktree remove .claude/worktrees/my-experiment\n",[198,979,980],{"class":200,"line":272},[198,981,799],{"emptyLinePlaceholder":798},[198,983,984],{"class":200,"line":284},[198,985,986],{},"# 強制削除（未コミットの変更があっても削除）\n",[198,988,989],{"class":200,"line":296},[198,990,991],{},"git worktree remove --force .claude/worktrees/my-experiment\n",[198,993,994],{"class":200,"line":308},[198,995,799],{"emptyLinePlaceholder":798},[198,997,998],{"class":200,"line":320},[198,999,1000],{},"# 古い worktree のメタデータを掃除\n",[198,1002,1003],{"class":200,"line":332},[198,1004,1005],{},"git worktree prune\n",[174,1007,1009],{"id":1008},"️-lv2-の注意点重要","⚠️ Lv.2 の注意点（重要）",[727,1011,1012,1017,1022,1029,1032],{},[730,1013,1014],{},[20,1015,1016],{},"worktree は Git レベルの隔離であり、OS レベルのサンドボックスではない",[730,1018,1019,1021],{},[32,1020,50],{}," はファイルシステム全体へのアクセス制限を解除する",[730,1023,1024,1025,1028],{},"Claude が ",[32,1026,1027],{},"rm -rf /"," のようなコマンドを実行しようとしても止まらない",[730,1030,1031],{},"メインブランチの Git 履歴は安全だが、ホストマシンのファイルが壊れるリスクはある",[730,1033,1034,1035,1038],{},"対策：こまめに ",[32,1036,1037],{},"git commit"," する、重要ファイルはバックアップしておく",[53,1040],{},[56,1042,1044],{"id":1043},"lv3-devcontainer-で完全隔離推奨","Lv.3: devcontainer で完全隔離（推奨）",[17,1046,1047],{},"Docker コンテナ内に Claude Code の実行環境を閉じ込める。\nコンテナが壊れてもホストには一切影響しない。",[174,1049,1050],{"id":1050},"前提条件",[727,1052,1053,1056],{},[730,1054,1055],{},"Docker Desktop インストール済み（WSL2 バックエンド有効）",[730,1057,1058],{},"VS Code + Dev Containers 拡張機能（推奨だが必須ではない）",[174,1060,1062],{"id":1061},"ステップ-1-プロジェクトに-devcontainer-設定を作成","ステップ 1: プロジェクトに devcontainer 設定を作成",[17,1064,598,1065,1068],{},[32,1066,1067],{},".devcontainer/"," ディレクトリを作成：",[189,1070,1072],{"className":779,"code":1071,"language":781,"meta":194,"style":194},"mkdir .devcontainer\n",[32,1073,1074],{"__ignoreMap":194},[198,1075,1076],{"class":200,"line":201},[198,1077,1071],{},[174,1079,1081],{"id":1080},"ステップ-2-devcontainerjson-を作成","ステップ 2: devcontainer.json を作成",[17,1083,1084,222],{},[32,1085,1086],{},".devcontainer/devcontainer.json",[189,1088,1090],{"className":191,"code":1089,"language":193,"meta":194,"style":194},"{\n  \"name\": \"Claude Code Sandbox\",\n  \"build\": {\n    \"dockerfile\": \"Dockerfile\"\n  },\n  \"features\": {\n    \"ghcr.io/devcontainers/features/git:1\": {},\n    \"ghcr.io/devcontainers/features/node:1\": {\n      \"version\": \"lts\"\n    }\n  },\n  \"postCreateCommand\": \"npm install -g @anthropic-ai/claude-code\",\n  \"mounts\": [\n    \"source=${localWorkspaceFolder},target=/workspace,type=bind\",\n    \"source=${localEnv:USERPROFILE}/.claude,target=/home/vscode/.claude,type=bind\"\n  ],\n  \"workspaceFolder\": \"/workspace\",\n  \"runArgs\": [\n    \"--network=host\"\n  ]\n}\n",[32,1091,1092,1096,1117,1130,1148,1153,1166,1180,1193,1211,1216,1220,1240,1253,1264,1273,1278,1298,1311,1320,1325],{"__ignoreMap":194},[198,1093,1094],{"class":200,"line":201},[198,1095,205],{"class":204},[198,1097,1098,1100,1103,1105,1107,1110,1113,1115],{"class":200,"line":208},[198,1099,212],{"class":211},[198,1101,1102],{"class":215},"name",[198,1104,219],{"class":211},[198,1106,222],{"class":204},[198,1108,1109],{"class":247}," \"",[198,1111,1112],{"class":251},"Claude Code Sandbox",[198,1114,219],{"class":247},[198,1116,257],{"class":204},[198,1118,1119,1121,1124,1126,1128],{"class":200,"line":228},[198,1120,212],{"class":211},[198,1122,1123],{"class":215},"build",[198,1125,219],{"class":211},[198,1127,222],{"class":204},[198,1129,225],{"class":204},[198,1131,1132,1134,1137,1139,1141,1143,1146],{"class":200,"line":244},[198,1133,231],{"class":211},[198,1135,1136],{"class":215},"dockerfile",[198,1138,219],{"class":211},[198,1140,222],{"class":204},[198,1142,1109],{"class":247},[198,1144,1145],{"class":251},"Dockerfile",[198,1147,448],{"class":247},[198,1149,1150],{"class":200,"line":260},[198,1151,1152],{"class":204},"  },\n",[198,1154,1155,1157,1160,1162,1164],{"class":200,"line":272},[198,1156,212],{"class":211},[198,1158,1159],{"class":215},"features",[198,1161,219],{"class":211},[198,1163,222],{"class":204},[198,1165,225],{"class":204},[198,1167,1168,1170,1173,1175,1177],{"class":200,"line":284},[198,1169,231],{"class":211},[198,1171,1172],{"class":215},"ghcr.io/devcontainers/features/git:1",[198,1174,219],{"class":211},[198,1176,222],{"class":204},[198,1178,1179],{"class":204}," {},\n",[198,1181,1182,1184,1187,1189,1191],{"class":200,"line":296},[198,1183,231],{"class":211},[198,1185,1186],{"class":215},"ghcr.io/devcontainers/features/node:1",[198,1188,219],{"class":211},[198,1190,222],{"class":204},[198,1192,225],{"class":204},[198,1194,1195,1197,1200,1202,1204,1206,1209],{"class":200,"line":308},[198,1196,248],{"class":211},[198,1198,1199],{"class":215},"version",[198,1201,219],{"class":211},[198,1203,222],{"class":204},[198,1205,1109],{"class":247},[198,1207,1208],{"class":251},"lts",[198,1210,448],{"class":247},[198,1212,1213],{"class":200,"line":320},[198,1214,1215],{"class":204},"    }\n",[198,1217,1218],{"class":200,"line":332},[198,1219,1152],{"class":204},[198,1221,1222,1224,1227,1229,1231,1233,1236,1238],{"class":200,"line":344},[198,1223,212],{"class":211},[198,1225,1226],{"class":215},"postCreateCommand",[198,1228,219],{"class":211},[198,1230,222],{"class":204},[198,1232,1109],{"class":247},[198,1234,1235],{"class":251},"npm install -g @anthropic-ai/claude-code",[198,1237,219],{"class":247},[198,1239,257],{"class":204},[198,1241,1242,1244,1247,1249,1251],{"class":200,"line":356},[198,1243,212],{"class":211},[198,1245,1246],{"class":215},"mounts",[198,1248,219],{"class":211},[198,1250,222],{"class":204},[198,1252,241],{"class":204},[198,1254,1255,1257,1260,1262],{"class":200,"line":368},[198,1256,231],{"class":247},[198,1258,1259],{"class":251},"source=${localWorkspaceFolder},target=/workspace,type=bind",[198,1261,219],{"class":247},[198,1263,257],{"class":204},[198,1265,1266,1268,1271],{"class":200,"line":380},[198,1267,231],{"class":247},[198,1269,1270],{"class":251},"source=${localEnv:USERPROFILE}/.claude,target=/home/vscode/.claude,type=bind",[198,1272,448],{"class":247},[198,1274,1275],{"class":200,"line":392},[198,1276,1277],{"class":204},"  ],\n",[198,1279,1280,1282,1285,1287,1289,1291,1294,1296],{"class":200,"line":404},[198,1281,212],{"class":211},[198,1283,1284],{"class":215},"workspaceFolder",[198,1286,219],{"class":211},[198,1288,222],{"class":204},[198,1290,1109],{"class":247},[198,1292,1293],{"class":251},"/workspace",[198,1295,219],{"class":247},[198,1297,257],{"class":204},[198,1299,1300,1302,1305,1307,1309],{"class":200,"line":416},[198,1301,212],{"class":211},[198,1303,1304],{"class":215},"runArgs",[198,1306,219],{"class":211},[198,1308,222],{"class":204},[198,1310,241],{"class":204},[198,1312,1313,1315,1318],{"class":200,"line":428},[198,1314,231],{"class":247},[198,1316,1317],{"class":251},"--network=host",[198,1319,448],{"class":247},[198,1321,1322],{"class":200,"line":440},[198,1323,1324],{"class":204},"  ]\n",[198,1326,1327],{"class":200,"line":451},[198,1328,592],{"class":204},[174,1330,1332],{"id":1331},"ステップ-3-dockerfile-を作成","ステップ 3: Dockerfile を作成",[17,1334,1335,222],{},[32,1336,1337],{},".devcontainer/Dockerfile",[189,1339,1342],{"className":1340,"code":1341,"language":1136,"meta":194,"style":194},"language-dockerfile shiki shiki-themes vitesse-light vitesse-light","FROM mcr.microsoft.com/devcontainers/base:ubuntu\n\n# 基本ツール\nRUN apt-get update && apt-get install -y \\\n    git \\\n    curl \\\n    jq \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Node.js LTS インストール（features は VS Code 経由のみ有効なため直接インストール）\nRUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \\\n    && apt-get install -y nodejs \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Claude Code をグローバルインストール\nRUN npm install -g @anthropic-ai/claude-code\n\n# 作業ユーザー設定\nUSER vscode\nWORKDIR /workspace\n",[32,1343,1344,1349,1353,1358,1363,1368,1373,1378,1383,1387,1392,1397,1402,1406,1410,1415,1420,1424,1429,1434],{"__ignoreMap":194},[198,1345,1346],{"class":200,"line":201},[198,1347,1348],{},"FROM mcr.microsoft.com/devcontainers/base:ubuntu\n",[198,1350,1351],{"class":200,"line":208},[198,1352,799],{"emptyLinePlaceholder":798},[198,1354,1355],{"class":200,"line":228},[198,1356,1357],{},"# 基本ツール\n",[198,1359,1360],{"class":200,"line":244},[198,1361,1362],{},"RUN apt-get update && apt-get install -y \\\n",[198,1364,1365],{"class":200,"line":260},[198,1366,1367],{},"    git \\\n",[198,1369,1370],{"class":200,"line":272},[198,1371,1372],{},"    curl \\\n",[198,1374,1375],{"class":200,"line":284},[198,1376,1377],{},"    jq \\\n",[198,1379,1380],{"class":200,"line":296},[198,1381,1382],{},"    && rm -rf /var/lib/apt/lists/*\n",[198,1384,1385],{"class":200,"line":308},[198,1386,799],{"emptyLinePlaceholder":798},[198,1388,1389],{"class":200,"line":320},[198,1390,1391],{},"# Node.js LTS インストール（features は VS Code 経由のみ有効なため直接インストール）\n",[198,1393,1394],{"class":200,"line":332},[198,1395,1396],{},"RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \\\n",[198,1398,1399],{"class":200,"line":344},[198,1400,1401],{},"    && apt-get install -y nodejs \\\n",[198,1403,1404],{"class":200,"line":356},[198,1405,1382],{},[198,1407,1408],{"class":200,"line":368},[198,1409,799],{"emptyLinePlaceholder":798},[198,1411,1412],{"class":200,"line":380},[198,1413,1414],{},"# Claude Code をグローバルインストール\n",[198,1416,1417],{"class":200,"line":392},[198,1418,1419],{},"RUN npm install -g @anthropic-ai/claude-code\n",[198,1421,1422],{"class":200,"line":404},[198,1423,799],{"emptyLinePlaceholder":798},[198,1425,1426],{"class":200,"line":416},[198,1427,1428],{},"# 作業ユーザー設定\n",[198,1430,1431],{"class":200,"line":428},[198,1432,1433],{},"USER vscode\n",[198,1435,1436],{"class":200,"line":440},[198,1437,1438],{},"WORKDIR /workspace\n",[14,1440,1441],{},[17,1442,1443,47,1446,1449,1450,1452,1453,1455,1456,1459],{},[20,1444,1445],{},"⚠️ 注意:",[32,1447,1448],{},"devcontainer.json"," の ",[32,1451,1159],{}," や ",[32,1454,1226],{}," は VS Code の Dev Containers 拡張経由でのみ適用される。",[32,1457,1458],{},"docker build"," で直接ビルドする場合は、Node.js と Claude Code を Dockerfile 内でインストールする必要がある。",[174,1461,1463],{"id":1462},"ステップ-4-ネットワーク制限付きより安全","ステップ 4: ネットワーク制限付き（より安全）",[17,1465,1466,1467,1470],{},"通信先を制限したい場合、",[32,1468,1469],{},"docker-compose.yml"," を追加：",[17,1472,1473,222],{},[32,1474,1475],{},".devcontainer/docker-compose.yml",[189,1477,1481],{"className":1478,"code":1479,"language":1480,"meta":194,"style":194},"language-yaml shiki shiki-themes vitesse-light vitesse-light","version: \"3.8\"\nservices:\n  claude-sandbox:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    volumes:\n      - ..:/workspace:cached\n      - ${USERPROFILE}/.claude:/home/vscode/.claude\n    # ネットワーク制限（必要な通信先のみ許可）\n    dns:\n      - 8.8.8.8\n    cap_drop:\n      - ALL\n    security_opt:\n      - no-new-privileges:true\n","yaml",[32,1482,1483,1496,1504,1511,1518,1529,1539,1546,1554,1561,1567,1574,1581,1588,1595,1602],{"__ignoreMap":194},[198,1484,1485,1487,1489,1491,1494],{"class":200,"line":201},[198,1486,1199],{"class":215},[198,1488,222],{"class":204},[198,1490,1109],{"class":247},[198,1492,1493],{"class":251},"3.8",[198,1495,448],{"class":247},[198,1497,1498,1501],{"class":200,"line":208},[198,1499,1500],{"class":215},"services",[198,1502,1503],{"class":204},":\n",[198,1505,1506,1509],{"class":200,"line":228},[198,1507,1508],{"class":215},"  claude-sandbox",[198,1510,1503],{"class":204},[198,1512,1513,1516],{"class":200,"line":244},[198,1514,1515],{"class":215},"    build",[198,1517,1503],{"class":204},[198,1519,1520,1523,1525],{"class":200,"line":260},[198,1521,1522],{"class":215},"      context",[198,1524,222],{"class":204},[198,1526,1528],{"class":1527},"sM54T"," .\n",[198,1530,1531,1534,1536],{"class":200,"line":272},[198,1532,1533],{"class":215},"      dockerfile",[198,1535,222],{"class":204},[198,1537,1538],{"class":251}," Dockerfile\n",[198,1540,1541,1544],{"class":200,"line":284},[198,1542,1543],{"class":215},"    volumes",[198,1545,1503],{"class":204},[198,1547,1548,1551],{"class":200,"line":296},[198,1549,1550],{"class":204},"      -",[198,1552,1553],{"class":251}," ..:/workspace:cached\n",[198,1555,1556,1558],{"class":200,"line":308},[198,1557,1550],{"class":204},[198,1559,1560],{"class":251}," ${USERPROFILE}/.claude:/home/vscode/.claude\n",[198,1562,1563],{"class":200,"line":320},[198,1564,1566],{"class":1565},"sxvE3","    # ネットワーク制限（必要な通信先のみ許可）\n",[198,1568,1569,1572],{"class":200,"line":332},[198,1570,1571],{"class":215},"    dns",[198,1573,1503],{"class":204},[198,1575,1576,1578],{"class":200,"line":344},[198,1577,1550],{"class":204},[198,1579,1580],{"class":1527}," 8.8.8.8\n",[198,1582,1583,1586],{"class":200,"line":356},[198,1584,1585],{"class":215},"    cap_drop",[198,1587,1503],{"class":204},[198,1589,1590,1592],{"class":200,"line":368},[198,1591,1550],{"class":204},[198,1593,1594],{"class":251}," ALL\n",[198,1596,1597,1600],{"class":200,"line":380},[198,1598,1599],{"class":215},"    security_opt",[198,1601,1503],{"class":204},[198,1603,1604,1606],{"class":200,"line":392},[198,1605,1550],{"class":204},[198,1607,1608],{"class":251}," no-new-privileges:true\n",[17,1610,1611,1613,1614,1617],{},[32,1612,1448],{}," を ",[32,1615,1616],{},"docker-compose"," 対応に変更：",[189,1619,1621],{"className":191,"code":1620,"language":193,"meta":194,"style":194},"{\n  \"name\": \"Claude Code Sandbox\",\n  \"dockerComposeFile\": \"docker-compose.yml\",\n  \"service\": \"claude-sandbox\",\n  \"workspaceFolder\": \"/workspace\",\n  \"postCreateCommand\": \"npm install -g @anthropic-ai/claude-code\"\n}\n",[32,1622,1623,1627,1645,1664,1684,1702,1718],{"__ignoreMap":194},[198,1624,1625],{"class":200,"line":201},[198,1626,205],{"class":204},[198,1628,1629,1631,1633,1635,1637,1639,1641,1643],{"class":200,"line":208},[198,1630,212],{"class":211},[198,1632,1102],{"class":215},[198,1634,219],{"class":211},[198,1636,222],{"class":204},[198,1638,1109],{"class":247},[198,1640,1112],{"class":251},[198,1642,219],{"class":247},[198,1644,257],{"class":204},[198,1646,1647,1649,1652,1654,1656,1658,1660,1662],{"class":200,"line":228},[198,1648,212],{"class":211},[198,1650,1651],{"class":215},"dockerComposeFile",[198,1653,219],{"class":211},[198,1655,222],{"class":204},[198,1657,1109],{"class":247},[198,1659,1469],{"class":251},[198,1661,219],{"class":247},[198,1663,257],{"class":204},[198,1665,1666,1668,1671,1673,1675,1677,1680,1682],{"class":200,"line":244},[198,1667,212],{"class":211},[198,1669,1670],{"class":215},"service",[198,1672,219],{"class":211},[198,1674,222],{"class":204},[198,1676,1109],{"class":247},[198,1678,1679],{"class":251},"claude-sandbox",[198,1681,219],{"class":247},[198,1683,257],{"class":204},[198,1685,1686,1688,1690,1692,1694,1696,1698,1700],{"class":200,"line":260},[198,1687,212],{"class":211},[198,1689,1284],{"class":215},[198,1691,219],{"class":211},[198,1693,222],{"class":204},[198,1695,1109],{"class":247},[198,1697,1293],{"class":251},[198,1699,219],{"class":247},[198,1701,257],{"class":204},[198,1703,1704,1706,1708,1710,1712,1714,1716],{"class":200,"line":272},[198,1705,212],{"class":211},[198,1707,1226],{"class":215},[198,1709,219],{"class":211},[198,1711,222],{"class":204},[198,1713,1109],{"class":247},[198,1715,1235],{"class":251},[198,1717,448],{"class":247},[198,1719,1720],{"class":200,"line":284},[198,1721,592],{"class":204},[174,1723,1725],{"id":1724},"ステップ-5-起動方法","ステップ 5: 起動方法",[17,1727,1728],{},[20,1729,1730],{},"方法 A: VS Code から（推奨）",[1732,1733,1734,1737,1743],"ol",{},[730,1735,1736],{},"VS Code でプロジェクトを開く",[730,1738,1739,1740],{},"コマンドパレット → ",[32,1741,1742],{},"Dev Containers: Reopen in Container",[730,1744,1745],{},"コンテナ内のターミナルで：",[189,1747,1751],{"className":1748,"code":1749,"language":1750,"meta":194,"style":194},"language-bash shiki shiki-themes vitesse-light vitesse-light","claude --dangerously-skip-permissions \"タスクの指示\"\n\n# worktree との併用も可能\nclaude -w my-experiment --dangerously-skip-permissions \"タスクの指示\"\n","bash",[32,1752,1753,1770,1774,1779],{"__ignoreMap":194},[198,1754,1755,1759,1763,1765,1768],{"class":200,"line":201},[198,1756,1758],{"class":1757},"senZ8","claude",[198,1760,1762],{"class":1761},"snbK4"," --dangerously-skip-permissions",[198,1764,1109],{"class":247},[198,1766,1767],{"class":251},"タスクの指示",[198,1769,448],{"class":247},[198,1771,1772],{"class":200,"line":208},[198,1773,799],{"emptyLinePlaceholder":798},[198,1775,1776],{"class":200,"line":228},[198,1777,1778],{"class":1565},"# worktree との併用も可能\n",[198,1780,1781,1783,1786,1789,1791,1793,1795],{"class":200,"line":244},[198,1782,1758],{"class":1757},[198,1784,1785],{"class":1761}," -w",[198,1787,1788],{"class":251}," my-experiment",[198,1790,1762],{"class":1761},[198,1792,1109],{"class":247},[198,1794,1767],{"class":251},[198,1796,448],{"class":247},[17,1798,1799],{},[20,1800,1801],{},"方法 B: Docker CLI から直接",[189,1803,1805],{"className":779,"code":1804,"language":781,"meta":194,"style":194},"# イメージをビルド\ndocker build -t claude-sandbox .devcontainer/\n\n# コンテナを起動してログイン\ndocker run -it --rm `\n  -v \"${PWD}:/workspace\" `\n  -v \"$env:USERPROFILE/.claude:/home/vscode/.claude\" `\n  -w /workspace `\n  claude-sandbox bash\n\n# コンテナ内で Claude Code を実行\nclaude --dangerously-skip-permissions \"タスクの指示\"\n",[32,1806,1807,1812,1817,1821,1826,1831,1836,1841,1846,1851,1855,1860],{"__ignoreMap":194},[198,1808,1809],{"class":200,"line":201},[198,1810,1811],{},"# イメージをビルド\n",[198,1813,1814],{"class":200,"line":208},[198,1815,1816],{},"docker build -t claude-sandbox .devcontainer/\n",[198,1818,1819],{"class":200,"line":228},[198,1820,799],{"emptyLinePlaceholder":798},[198,1822,1823],{"class":200,"line":244},[198,1824,1825],{},"# コンテナを起動してログイン\n",[198,1827,1828],{"class":200,"line":260},[198,1829,1830],{},"docker run -it --rm `\n",[198,1832,1833],{"class":200,"line":272},[198,1834,1835],{},"  -v \"${PWD}:/workspace\" `\n",[198,1837,1838],{"class":200,"line":284},[198,1839,1840],{},"  -v \"$env:USERPROFILE/.claude:/home/vscode/.claude\" `\n",[198,1842,1843],{"class":200,"line":296},[198,1844,1845],{},"  -w /workspace `\n",[198,1847,1848],{"class":200,"line":308},[198,1849,1850],{},"  claude-sandbox bash\n",[198,1852,1853],{"class":200,"line":320},[198,1854,799],{"emptyLinePlaceholder":798},[198,1856,1857],{"class":200,"line":332},[198,1858,1859],{},"# コンテナ内で Claude Code を実行\n",[198,1861,1862],{"class":200,"line":344},[198,1863,1864],{},"claude --dangerously-skip-permissions \"タスクの指示\"\n",[17,1866,1867],{},[20,1868,1869],{},"方法 C: 使い捨てコンテナでワンショット実行",[189,1871,1873],{"className":779,"code":1872,"language":781,"meta":194,"style":194},"docker run --rm `\n  -v \"${PWD}:/workspace\" `\n  -v \"$env:USERPROFILE/.claude:/home/vscode/.claude\" `\n  -w /workspace `\n  claude-sandbox `\n  claude -p --dangerously-skip-permissions \"全テストを修正して\" --output-format json\n",[32,1874,1875,1880,1884,1888,1892,1897],{"__ignoreMap":194},[198,1876,1877],{"class":200,"line":201},[198,1878,1879],{},"docker run --rm `\n",[198,1881,1882],{"class":200,"line":208},[198,1883,1835],{},[198,1885,1886],{"class":200,"line":228},[198,1887,1840],{},[198,1889,1890],{"class":200,"line":244},[198,1891,1845],{},[198,1893,1894],{"class":200,"line":260},[198,1895,1896],{},"  claude-sandbox `\n",[198,1898,1899],{"class":200,"line":272},[198,1900,1901],{},"  claude -p --dangerously-skip-permissions \"全テストを修正して\" --output-format json\n",[174,1903,1905],{"id":1904},"ステップ-6-認証の設定oauth-claudeai-サブスクリプション","ステップ 6: 認証の設定（OAuth — claude.ai サブスクリプション）",[17,1907,1908,1909,1912,1913,1916],{},"Claude Pro/Max サブスクリプションの場合、API キーではなく OAuth 認証を使う。\n認証情報は ",[32,1910,1911],{},"~/.claude/"," ディレクトリ（Windows: ",[32,1914,1915],{},"%USERPROFILE%\\.claude\\","）に保存される。",[17,1918,1919],{},[20,1920,1921],{},"初回セットアップ（ホスト側で1回だけ）：",[189,1923,1925],{"className":779,"code":1924,"language":781,"meta":194,"style":194},"# ホスト側でログイン（ブラウザが開いて認証する）\nclaude login\n",[32,1926,1927,1932],{"__ignoreMap":194},[198,1928,1929],{"class":200,"line":201},[198,1930,1931],{},"# ホスト側でログイン（ブラウザが開いて認証する）\n",[198,1933,1934],{"class":200,"line":208},[198,1935,1936],{},"claude login\n",[17,1938,1939],{},[20,1940,1941],{},"コンテナでの認証の仕組み：",[17,1943,1944,1945,1947,1948,1950],{},"上記の devcontainer 設定では、ホストの ",[32,1946,1911],{}," をコンテナ内にマウントしている。\nこれにより、ホストで ",[32,1949,34],{}," した認証情報がコンテナ内でもそのまま使える。",[189,1952,1955],{"className":1953,"code":1954,"language":910},[908],"ホスト: %USERPROFILE%\\.claude\\   →  コンテナ: /home/vscode/.claude/\n        （認証トークン等）                  （マウントで共有）\n",[32,1956,1954],{"__ignoreMap":194},[17,1958,1959],{},[20,1960,1961],{},"認証が切れた場合：",[189,1963,1965],{"className":779,"code":1964,"language":781,"meta":194,"style":194},"# ホスト側で再ログイン\nclaude login\n\n# コンテナを再起動すれば反映される（マウントなので即時反映の場合もあり）\n",[32,1966,1967,1972,1976,1980],{"__ignoreMap":194},[198,1968,1969],{"class":200,"line":201},[198,1970,1971],{},"# ホスト側で再ログイン\n",[198,1973,1974],{"class":200,"line":208},[198,1975,1936],{},[198,1977,1978],{"class":200,"line":228},[198,1979,799],{"emptyLinePlaceholder":798},[198,1981,1982],{"class":200,"line":244},[198,1983,1984],{},"# コンテナを再起動すれば反映される（マウントなので即時反映の場合もあり）\n",[14,1986,1987],{},[17,1988,1989,47,1992,1994,1995,1997],{},[20,1990,1991],{},"注意:",[32,1993,1911],{}," にはセッショントークンが含まれるため、\nコンテナ内で ",[32,1996,50],{}," を使う場合でも、\nこの認証情報はホストと共有されている点に留意すること。",[53,1999],{},[56,2001,2002],{"id":2002},"よく使うコマンド早見表",[174,2004,2005],{"id":2005},"基本操作",[189,2007,2009],{"className":779,"code":2008,"language":781,"meta":194,"style":194},"# 通常起動\nclaude\n\n# YOLO モード（パーミッション全スキップ）\nclaude --dangerously-skip-permissions\n\n# worktree 隔離 + YOLO\nclaude -w sandbox --dangerously-skip-permissions\n\n# ワンショット実行（非インタラクティブ）\nclaude -p --dangerously-skip-permissions \"指示内容\"\n\n# 予算制限付き\nclaude --dangerously-skip-permissions --max-budget-usd 3.00\n\n# セッション再開\nclaude --dangerously-skip-permissions --resume my-session\n",[32,2010,2011,2016,2020,2024,2029,2034,2038,2043,2048,2052,2057,2062,2066,2071,2076,2080,2085],{"__ignoreMap":194},[198,2012,2013],{"class":200,"line":201},[198,2014,2015],{},"# 通常起動\n",[198,2017,2018],{"class":200,"line":208},[198,2019,900],{},[198,2021,2022],{"class":200,"line":228},[198,2023,799],{"emptyLinePlaceholder":798},[198,2025,2026],{"class":200,"line":244},[198,2027,2028],{},"# YOLO モード（パーミッション全スキップ）\n",[198,2030,2031],{"class":200,"line":260},[198,2032,2033],{},"claude --dangerously-skip-permissions\n",[198,2035,2036],{"class":200,"line":272},[198,2037,799],{"emptyLinePlaceholder":798},[198,2039,2040],{"class":200,"line":284},[198,2041,2042],{},"# worktree 隔離 + YOLO\n",[198,2044,2045],{"class":200,"line":296},[198,2046,2047],{},"claude -w sandbox --dangerously-skip-permissions\n",[198,2049,2050],{"class":200,"line":308},[198,2051,799],{"emptyLinePlaceholder":798},[198,2053,2054],{"class":200,"line":320},[198,2055,2056],{},"# ワンショット実行（非インタラクティブ）\n",[198,2058,2059],{"class":200,"line":332},[198,2060,2061],{},"claude -p --dangerously-skip-permissions \"指示内容\"\n",[198,2063,2064],{"class":200,"line":344},[198,2065,799],{"emptyLinePlaceholder":798},[198,2067,2068],{"class":200,"line":356},[198,2069,2070],{},"# 予算制限付き\n",[198,2072,2073],{"class":200,"line":368},[198,2074,2075],{},"claude --dangerously-skip-permissions --max-budget-usd 3.00\n",[198,2077,2078],{"class":200,"line":380},[198,2079,799],{"emptyLinePlaceholder":798},[198,2081,2082],{"class":200,"line":392},[198,2083,2084],{},"# セッション再開\n",[198,2086,2087],{"class":200,"line":404},[198,2088,2089],{},"claude --dangerously-skip-permissions --resume my-session\n",[174,2091,2093],{"id":2092},"worktree-管理","worktree 管理",[189,2095,2097],{"className":779,"code":2096,"language":781,"meta":194,"style":194},"# worktree 一覧\ngit worktree list\n\n# 手動で worktree 作成（Claude Code の -w を使わない場合）\ngit worktree add ../my-sandbox -b experiment/my-sandbox\n\n# worktree 削除\ngit worktree remove .claude/worktrees/sandbox-name\n\n# 古い worktree メタデータのクリーンアップ\ngit worktree prune\n",[32,2098,2099,2104,2108,2112,2117,2122,2126,2131,2136,2140,2145],{"__ignoreMap":194},[198,2100,2101],{"class":200,"line":201},[198,2102,2103],{},"# worktree 一覧\n",[198,2105,2106],{"class":200,"line":208},[198,2107,963],{},[198,2109,2110],{"class":200,"line":228},[198,2111,799],{"emptyLinePlaceholder":798},[198,2113,2114],{"class":200,"line":244},[198,2115,2116],{},"# 手動で worktree 作成（Claude Code の -w を使わない場合）\n",[198,2118,2119],{"class":200,"line":260},[198,2120,2121],{},"git worktree add ../my-sandbox -b experiment/my-sandbox\n",[198,2123,2124],{"class":200,"line":272},[198,2125,799],{"emptyLinePlaceholder":798},[198,2127,2128],{"class":200,"line":284},[198,2129,2130],{},"# worktree 削除\n",[198,2132,2133],{"class":200,"line":296},[198,2134,2135],{},"git worktree remove .claude/worktrees/sandbox-name\n",[198,2137,2138],{"class":200,"line":308},[198,2139,799],{"emptyLinePlaceholder":798},[198,2141,2142],{"class":200,"line":320},[198,2143,2144],{},"# 古い worktree メタデータのクリーンアップ\n",[198,2146,2147],{"class":200,"line":332},[198,2148,1005],{},[174,2150,2151],{"id":2151},"コンテナ操作",[189,2153,2155],{"className":779,"code":2154,"language":781,"meta":194,"style":194},"# devcontainer をビルド\ndocker build -t claude-sandbox .devcontainer/\n\n# コンテナ起動（インタラクティブ）\ndocker run -it --rm -v \"${PWD}:/workspace\" -v \"$env:USERPROFILE/.claude:/home/vscode/.claude\" -w /workspace claude-sandbox bash\n\n# 実行中コンテナの確認\ndocker ps\n\n# コンテナの停止\ndocker stop \u003Ccontainer-id>\n",[32,2156,2157,2162,2166,2170,2175,2180,2184,2189,2194,2198,2203],{"__ignoreMap":194},[198,2158,2159],{"class":200,"line":201},[198,2160,2161],{},"# devcontainer をビルド\n",[198,2163,2164],{"class":200,"line":208},[198,2165,1816],{},[198,2167,2168],{"class":200,"line":228},[198,2169,799],{"emptyLinePlaceholder":798},[198,2171,2172],{"class":200,"line":244},[198,2173,2174],{},"# コンテナ起動（インタラクティブ）\n",[198,2176,2177],{"class":200,"line":260},[198,2178,2179],{},"docker run -it --rm -v \"${PWD}:/workspace\" -v \"$env:USERPROFILE/.claude:/home/vscode/.claude\" -w /workspace claude-sandbox bash\n",[198,2181,2182],{"class":200,"line":272},[198,2183,799],{"emptyLinePlaceholder":798},[198,2185,2186],{"class":200,"line":284},[198,2187,2188],{},"# 実行中コンテナの確認\n",[198,2190,2191],{"class":200,"line":296},[198,2192,2193],{},"docker ps\n",[198,2195,2196],{"class":200,"line":308},[198,2197,799],{"emptyLinePlaceholder":798},[198,2199,2200],{"class":200,"line":320},[198,2201,2202],{},"# コンテナの停止\n",[198,2204,2205],{"class":200,"line":332},[198,2206,2207],{},"docker stop \u003Ccontainer-id>\n",[53,2209],{},[56,2211,2212],{"id":2212},"判断フローチャート",[189,2214,2217],{"className":2215,"code":2216,"language":910},[908],"タスクの種類は？\n│\n├─ 通常の開発作業\n│   → Lv.1: allowedTools 設定で十分\n│\n├─ 長時間の自律タスク（リファクタ・テスト修正など）\n│   ├─ ホストのファイルを壊されても困らない？\n│   │   ├─ Yes → Lv.2: worktree + --dangerously-skip-permissions\n│   │   └─ No  → Lv.3: devcontainer + --dangerously-skip-permissions\n│   │\n│   └─ 外部ネットワークアクセスも制限したい？\n│       └─ Yes → Lv.3 + docker-compose でネットワーク制限\n│\n└─ CI/CD パイプラインでの自動実行\n    → Lv.3: コンテナ + -p + --dangerously-skip-permissions + --output-format json\n",[32,2218,2216],{"__ignoreMap":194},[53,2220],{},[56,2222,2223],{"id":2223},"トラブルシューティング",[174,2225,2227],{"id":2226},"claude-code-がコンテナ内で見つからない","Claude Code がコンテナ内で見つからない",[189,2229,2231],{"className":1748,"code":2230,"language":1750,"meta":194,"style":194},"# パスを確認\nwhich claude\n# なければ再インストール\nnpm install -g @anthropic-ai/claude-code\n",[32,2232,2233,2238,2246,2251],{"__ignoreMap":194},[198,2234,2235],{"class":200,"line":201},[198,2236,2237],{"class":1565},"# パスを確認\n",[198,2239,2240,2243],{"class":200,"line":208},[198,2241,2242],{"class":215},"which",[198,2244,2245],{"class":251}," claude\n",[198,2247,2248],{"class":200,"line":228},[198,2249,2250],{"class":1565},"# なければ再インストール\n",[198,2252,2253,2256,2259,2262],{"class":200,"line":244},[198,2254,2255],{"class":1757},"npm",[198,2257,2258],{"class":251}," install",[198,2260,2261],{"class":1761}," -g",[198,2263,2264],{"class":251}," @anthropic-ai/claude-code\n",[174,2266,2268],{"id":2267},"認証が通らないコンテナ内","認証が通らない（コンテナ内）",[189,2270,2272],{"className":1748,"code":2271,"language":1750,"meta":194,"style":194},"# コンテナ内で認証ファイルの存在を確認\nls -la ~/.claude/\n\n# ファイルがなければマウントが失敗している\n# → docker run の -v オプションのパスを確認\n\n# 認証が期限切れの場合はホスト側で再ログイン\n# （ホストの PowerShell で実行）\nclaude login\n",[32,2273,2274,2279,2290,2294,2299,2304,2308,2313,2318],{"__ignoreMap":194},[198,2275,2276],{"class":200,"line":201},[198,2277,2278],{"class":1565},"# コンテナ内で認証ファイルの存在を確認\n",[198,2280,2281,2284,2287],{"class":200,"line":208},[198,2282,2283],{"class":1757},"ls",[198,2285,2286],{"class":1761}," -la",[198,2288,2289],{"class":251}," ~/.claude/\n",[198,2291,2292],{"class":200,"line":228},[198,2293,799],{"emptyLinePlaceholder":798},[198,2295,2296],{"class":200,"line":244},[198,2297,2298],{"class":1565},"# ファイルがなければマウントが失敗している\n",[198,2300,2301],{"class":200,"line":260},[198,2302,2303],{"class":1565},"# → docker run の -v オプションのパスを確認\n",[198,2305,2306],{"class":200,"line":272},[198,2307,799],{"emptyLinePlaceholder":798},[198,2309,2310],{"class":200,"line":284},[198,2311,2312],{"class":1565},"# 認証が期限切れの場合はホスト側で再ログイン\n",[198,2314,2315],{"class":200,"line":296},[198,2316,2317],{"class":1565},"# （ホストの PowerShell で実行）\n",[198,2319,2320,2322],{"class":200,"line":308},[198,2321,1758],{"class":1757},[198,2323,2324],{"class":251}," login\n",[174,2326,2328],{"id":2327},"worktree-が削除できない","worktree が削除できない",[189,2330,2332],{"className":779,"code":2331,"language":781,"meta":194,"style":194},"# ロックファイルがある場合\nRemove-Item .git/worktrees/\u003Cname>/locked -ErrorAction SilentlyContinue\ngit worktree remove .claude/worktrees/\u003Cname> --force\n",[32,2333,2334,2339,2344],{"__ignoreMap":194},[198,2335,2336],{"class":200,"line":201},[198,2337,2338],{},"# ロックファイルがある場合\n",[198,2340,2341],{"class":200,"line":208},[198,2342,2343],{},"Remove-Item .git/worktrees/\u003Cname>/locked -ErrorAction SilentlyContinue\n",[198,2345,2346],{"class":200,"line":228},[198,2347,2348],{},"git worktree remove .claude/worktrees/\u003Cname> --force\n",[174,2350,2352,2353,2356],{"id":2351},"git-bash-から-docker-run-すると-w-workspace-が変換される","Git Bash から docker run すると ",[32,2354,2355],{},"-w /workspace"," が変換される",[17,2358,2359,2360,2362,2363,2366],{},"Git Bash (MSYS2) はパスを自動的に Windows パスに変換する。",[32,2361,2355],{}," が ",[32,2364,2365],{},"-w C:/Program Files/Git/workspace"," に化ける。",[189,2368,2370],{"className":1748,"code":2369,"language":1750,"meta":194,"style":194},"# ❌ NG — Git Bash がパスを変換してしまう\ndocker run --rm -w /workspace claude-sandbox bash\n\n# ✅ OK — MSYS_NO_PATHCONV=1 で変換を抑制\nMSYS_NO_PATHCONV=1 docker run --rm -w /workspace claude-sandbox bash\n\n# ✅ OK — PowerShell から実行すればそもそも問題なし\n",[32,2371,2372,2377,2399,2403,2408,2435,2439],{"__ignoreMap":194},[198,2373,2374],{"class":200,"line":201},[198,2375,2376],{"class":1565},"# ❌ NG — Git Bash がパスを変換してしまう\n",[198,2378,2379,2382,2385,2388,2390,2393,2396],{"class":200,"line":208},[198,2380,2381],{"class":1757},"docker",[198,2383,2384],{"class":251}," run",[198,2386,2387],{"class":1761}," --rm",[198,2389,1785],{"class":1761},[198,2391,2392],{"class":251}," /workspace",[198,2394,2395],{"class":251}," claude-sandbox",[198,2397,2398],{"class":251}," bash\n",[198,2400,2401],{"class":200,"line":228},[198,2402,799],{"emptyLinePlaceholder":798},[198,2404,2405],{"class":200,"line":244},[198,2406,2407],{"class":1565},"# ✅ OK — MSYS_NO_PATHCONV=1 で変換を抑制\n",[198,2409,2410,2414,2417,2420,2423,2425,2427,2429,2431,2433],{"class":200,"line":260},[198,2411,2413],{"class":2412},"s4oTP","MSYS_NO_PATHCONV",[198,2415,2416],{"class":204},"=",[198,2418,2419],{"class":251},"1",[198,2421,2422],{"class":1757}," docker",[198,2424,2384],{"class":251},[198,2426,2387],{"class":1761},[198,2428,1785],{"class":1761},[198,2430,2392],{"class":251},[198,2432,2395],{"class":251},[198,2434,2398],{"class":251},[198,2436,2437],{"class":200,"line":272},[198,2438,799],{"emptyLinePlaceholder":798},[198,2440,2441],{"class":200,"line":284},[198,2442,2443],{"class":1565},"# ✅ OK — PowerShell から実行すればそもそも問題なし\n",[174,2445,2447],{"id":2446},"コンテナ内で-git-push-できない","コンテナ内で git push できない",[189,2449,2451],{"className":1748,"code":2450,"language":1750,"meta":194,"style":194},"# SSH キーをマウントする（必要な場合のみ）\n# docker run に追加: -v \"$HOME/.ssh:/home/vscode/.ssh:ro\"\n# ※ YOLO モードでは SSH キーのマウントは慎重に\n",[32,2452,2453,2458,2463],{"__ignoreMap":194},[198,2454,2455],{"class":200,"line":201},[198,2456,2457],{"class":1565},"# SSH キーをマウントする（必要な場合のみ）\n",[198,2459,2460],{"class":200,"line":208},[198,2461,2462],{"class":1565},"# docker run に追加: -v \"$HOME/.ssh:/home/vscode/.ssh:ro\"\n",[198,2464,2465],{"class":200,"line":228},[198,2466,2467],{"class":1565},"# ※ YOLO モードでは SSH キーのマウントは慎重に\n",[2469,2470,2471],"style",{},"html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sqvqQ, html code.shiki .sqvqQ{--shiki-default:#99841877;--shiki-dark:#99841877}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}",{"title":194,"searchDepth":208,"depth":208,"links":2473},[2474,2475,2480,2488,2497,2502,2503],{"id":58,"depth":208,"text":59},{"id":166,"depth":208,"text":167,"children":2476},[2477,2478,2479],{"id":176,"depth":228,"text":177},{"id":595,"depth":228,"text":595},{"id":724,"depth":228,"text":725},{"id":769,"depth":208,"text":770,"children":2481},[2482,2483,2484,2485,2486,2487],{"id":776,"depth":228,"text":776},{"id":854,"depth":228,"text":854},{"id":903,"depth":228,"text":904},{"id":915,"depth":228,"text":915},{"id":948,"depth":228,"text":948},{"id":1008,"depth":228,"text":1009},{"id":1043,"depth":208,"text":1044,"children":2489},[2490,2491,2492,2493,2494,2495,2496],{"id":1050,"depth":228,"text":1050},{"id":1061,"depth":228,"text":1062},{"id":1080,"depth":228,"text":1081},{"id":1331,"depth":228,"text":1332},{"id":1462,"depth":228,"text":1463},{"id":1724,"depth":228,"text":1725},{"id":1904,"depth":228,"text":1905},{"id":2002,"depth":208,"text":2002,"children":2498},[2499,2500,2501],{"id":2005,"depth":228,"text":2005},{"id":2092,"depth":228,"text":2093},{"id":2151,"depth":228,"text":2151},{"id":2212,"depth":208,"text":2212},{"id":2223,"depth":208,"text":2223,"children":2504},[2505,2506,2507,2508,2510],{"id":2226,"depth":228,"text":2227},{"id":2267,"depth":228,"text":2268},{"id":2327,"depth":228,"text":2328},{"id":2351,"depth":228,"text":2509},"Git Bash から docker run すると -w /workspace が変換される",{"id":2446,"depth":228,"text":2447},"dev","Windows + PowerShell + Docker Desktop環境で、--dangerously-skip-permissionsを安全に使うための環境構築と運用手順。allowedTools、worktree、devcontainerの3レベルの隔離方式を比較。","md",{},null,"/claude-code-safe-autonomous-setup","claude-code-tools",false,"2026-03-20T00:00:00.000Z",{"title":5,"description":2512},"2026-03/2026-03-20/claude-code-safe-autonomous-setup",[2523,2524,2525,2526,2527,2528,2529],"Claude Code","Docker","devcontainer","worktree","PowerShell","Windows","セキュリティ","Az-awznFIRQz7rxvnres13pTe6FF_411MsUH0cvomms",[],"https://log.eurekapu.com/og/blog/claude-code-safe-autonomous-setup.png?v=2026-03-20T00%3A00%3A00.000Z&title=Claude%20Code%20%E5%AE%89%E5%85%A8%E3%81%AA%E8%87%AA%E5%BE%8B%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%20%E6%A7%8B%E7%AF%89%E3%82%AC%E3%82%A4%E3%83%89&author=Kei%20Komatsu&sig=99c2df7707c541ec",1782528819241]