Windows(WSL)+VSCode(devcontainer)でClaude Codeを始める

Claude Code Pro Max 5x を契約したので。Codex CLI?知らんな

効率悪いと思いつつ、新しく何かをClaude Codeを始めるときの環境づくりでやってることを書く

前提

環境とか

  • Windows + WSL + Ubuntu 24.04(WSL)
  • VSCode devcontainer
  • podmanは趣味で使っている。dockerでも可

claudeコマンドでTUIを起動するところまで。

作業

VSCodeにdevcontainer機能拡張を入れる

https://code.visualstudio.com/docs/devcontainers/tutorial

WSLを起動する

learn.microsoft.com

WSLは適当に有効化しておく。PowerShellかcmdを開いてwslを起動。

wsl

もし、WSLのストレージ先を変更したい(デフォルトはシステムドライブに配置されるはず)、同じディストリビューションを複数環境作りたい、とかあれば、一度エクスポートしたりインポートする必要がある。(FAQも参照)

以降はWSLの作業。

Optional: WSL上にpodmanを導入する

podmanはデーモンレス、rootlessがよい。基本的なCLIコマンドはdockerとある程度互換性がある。個人的な趣味なのでdockerでもいい。

podman.io

インストールしたらpodman run --rm hello-world が動くことを確認して次に。

Optional: Podmanを使う場合、VSCodeのユーザ設定にて、devcontainerにpodmanを使うよう設定しておく

ユーザのsettings.jsonを開き以下を追記

    "dev.containers.dockerPath": "podman",
    "dev.containers.dockerComposePath": "podman-compose",

VSCodeをWSLで起動する

WSL上で code コマンド(VSCode)を使うとWSLで開いてくれる。PATHが通っていれば。

mkdir プロジェクト名
code プロジェクト名

devcontainer.jsonを作成

VSCodeのコマンドパレット(Ctrl+P)を開き、>Dev Containers: Add Dev Container Configuration Files と入力。目的のランタイムを選び .devcontainer/devcontainer.jsonを作成

.devcontainer/devcontainer.json を開き、featuresを足してclaudeが動作するようにする(nodeも最新を入れる)

see: devcontainer-features/src/claude-code at main · anthropics/devcontainer-features · GitHub

 "features": {
        "ghcr.io/devcontainers/features/node:1": {},
        "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
    },

devcontainer.jsonを使ってDevContainerを起動

VSCodeのコマンドパレット(Ctrl+P)を開き、>Dev Containers: Open Folder in Container を選択して起動。

無事起動することを祈る。(podmanだとコンテナによっては、ここでコケることが多い)

以降はdevcontainerの作業。続きを始めたいときはdevcontainerを開けばよい。

.claude/settings.json を用意する

.claude/settings.json を開き書き足す

{
    "env": {
        "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
        "MAX_THINKING_TOKENS": "16000"
    },
    "permissions": {
        "defaultMode": "bypassPermissions"
    },
    "enabledMcpjsonServers": [
        "mcp-server-name"
    ]
}
  • env
    • "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" => 色々無効化。例えばclaudeは定期的にupdateをチェックして最新化しようとするが、devcontainerはfeatureで入れた環境は素直にupdateできないので。updateしたいときはコンテナをrebuildしている
    • "MAX_THINKING_TOKENS": "16000" => 31999で常時ultlathinkと同じらしい。なくても良いかも
  • permissions
    • defaultMode: "bypassPermissions" => claude --dangerously-skip-permissions と等価。許可を求めなくなる
  • enabledMcpjsonServers: [ "mcp-server-name" ] => プロジェクトで利用を許可するMCPサーバを指定する。野良リポジトリを使う場合はここの値に注意するべき(claude起動→STDIOならMCPサーバ起動=任意コード実行になるので)でも趣味プロジェクトならいいよね?

claudeの利用開始

featureによりnode, claude codeのCLIが使えるようになっているはず。

claude

初回はログイン作業が発生する。.claude.jsonをマウントして共有するのもいいかもしれない。ccusageとかで使用量みたいとかだと.claudeもマウントしたほうがいいかもしれない。

あとはclaudeしたりgit initしたりして頑張る。