Skip to content

fix: sandbox settings for go development. - #370

Merged
halkn merged 6 commits into
mainfrom
fix/go-dev-sandbox
Oct 14, 2026
Merged

halkn merged 6 commits into
mainfrom
fix/go-dev-sandbox

Conversation

@halkn

@halkn halkn commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

変更理由

Claude Code の sandbox の中で Go を開発すると、次の問題が出た。

  • go build が GOCACHE(~/.cache/go/build)に書けず失敗する。モジュールのキャッシュも読めない
  • staticcheck と gopls の既定のキャッシュ先は os.UserCacheDir() で、macOS では ~/Library/Caches の下になる。ここは sandbox から書けない
  • go env -w の設定(GOENV)は macOS では ~/Library/Application Support/go/env にあり、sandbox から読めない
  • ~/.claude/skills の symlink 先を Bash から読めない
  • git の公式 docs を curl で原文のまま確かめられない

OS 依存のパス(~/Library/...)を sandbox の許可に足さずに、他のツールと同じ形で解決する。つまり、置き場所を XDG のディレクトリに移し、~/.cache/<tool> をツール単位で開ける。

変更内容

  • .config/zsh/.zshenv: 次の 3 つを XDG に移す
    • GOENV=$XDG_CONFIG_HOME/go/env
    • GOPLSCACHE=$XDG_CACHE_HOME(gopls が /gopls を足す。gopls v0.23.0 の internal/filecache で確認)
    • STATICCHECK_CACHE=$XDG_CACHE_HOME/staticcheck(staticcheck v0.8.1 の lintcmd/cache で確認。絶対パスが要る)
  • claude/settings.json
    • allowRead と allowWrite: ~/.cache/go・~/.cache/gopls・~/.cache/staticcheck
    • allowRead: ~/.claude/skills
    • allowedDomains: git-scm.com
  • docs/claude-code.md
    • 送信先の docs に git を足す
    • 匿名で公開の投稿を作れる API を持つホストは、docs でも足さないと書く
    • skills の読取を、版付きの実測として「決定と理由」に書く

途中のコミットで、Go だけを特別に塞ぐ案を入れてから取り下げた。案は、GOCACHE を sandbox 用に分ける、mise の go.set_gobin = false、GOMODCACHE を読取だけにする、の 3 つ。同じ種類の経路(sandbox から書けるキャッシュや data ディレクトリの中身を、外のプロセスが実行する)は uv・bun・mise にも残るので、ツールを問わず #371 で扱う。

影響範囲

対象: claude / zsh

  • sandbox で新しく許可するもの
    • 読取・書込: ~/.cache/go・~/.cache/gopls・~/.cache/staticcheck
    • 読取: ~/.claude/skills
    • 送信先: git-scm.com
  • GOENV が ~/.config/go/env に移る。go env -w で入れた設定があれば、移すか入れ直す
  • 新しいシェルを開き、Claude Code を再起動するまで反映されない

レビューの着目点

  • ~/.cache/go を丸ごと書込可にしたので、sandbox の外の go が使う GOCACHE(go run の実行ファイルを含む)を sandbox の中から書き換えられる。uv・bun のキャッシュと同じ扱いにして、対処は sandbox から書けるキャッシュと data ディレクトリを、外で実行されうるものとしてどう扱うか検討する #371 に回した
  • macOS では、sandbox の中の go が telemetry の設定(~/Library/Application Support/go/telemetry)を読めず、stderr にエラーを 1 行出す。telemetry のディレクトリは os.UserConfigDir() に固定されていて、darwin では XDG_CONFIG_HOME を見ず、移す環境変数も無い(go1.27.1 のソースで確認)。OS 依存のパスを足さないため、そのままにした

確認手順

$ mise run lint
(成功、exit 0)

sandbox の中の go run(小さな module)が成功することを、途中のコミットで確かめた。GOCACHE の置き場所が今の構成と違ったときの確認なので、今の構成では確かめていない。go1.27.1、Claude Code 2.1.296、macOS。

手動確認

  1. 新しいターミナルで go env GOCACHE GOENV と echo $GOPLSCACHE $STATICCHECK_CACHE を実行し、XDG の下を指すことを確かめる
  2. Claude Code を再起動し、sandbox の中で Go のモジュールに go build ./... と staticcheck ./... を実行して成功することを確かめる
  3. ~/.cache/staticcheck にキャッシュができることを確かめる

範囲外 / 既知の問題

@halkn
halkn merged commit d5c22ed into main Oct 14, 2026
1 check passed
@halkn
halkn deleted the fix/go-dev-sandbox branch October 14, 2026 13:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant