devcontainer間でClaudeのセッションを維持する方法

devcontainerを使った開発でClaude Codeを利用している際に、コンテナを再作成するたびにセッションがリセットされて毎回Get Startedから始まるのがうっとうしい問題を解決したときの備忘録。

TL;DR

以下の設定をdevcontainer.jsonに追記することで、devcontainerを再作成してもClaudeのセッションが維持される。

"remoteUser": "vscode",
"mounts": [
  "source=claude-code-config,target=/home/vscode/.claude,type=volume"
],
"postCreateCommand": "chown -R vscode:vscode ~"

問題の発生

devcontainerを立ち上げるたびに毎回Claude CodeのGet Startedから始まってしまう問題に遭遇した。 せっかく認証やプロジェクトの設定をしても、コンテナを作り直すたびにリセットされるのは非常に面倒。

解決への道のり

公式ドキュメントを参考にする

まずはAnthropic公式のドキュメントとサンプルを確認してみる。 - 公式ドキュメント - GitHubサンプル

設定ファイルのマウントを試す

Claudeの設定ファイルは/home/vscode/.claudeに保存されているので、これをvolumeでマウントしてみる。

"mounts": [
  "source=claude-code-config,target=/home/vscode/.claude,type=volume"
]

しかし、これだけだと権限問題でうまくいかない。

権限問題の解決

調べてみると、devcontainerでvolumeマウントしたファイルの権限はデフォルトでrootになってしまうらしい。 そのため、コンテナ起動時に権限をremoteUserで指定したユーザーに変更する必要がある。

最初は.claudeディレクトリだけの権限を変更しようとしたが、まだ作成中なのかエラーになってしまう。postCreateCommandは作成後に呼ばれるはずなのだが...

とりあえずhomeディレクトリ全体の権限を変更すると確実に動作するので、それで対応することにした。

"postCreateCommand": "chown -R vscode:vscode ~"

最終的な設定

結果的に、以下の3つの設定をdevcontainer.jsonに追加することで問題が解決した。

{
  "remoteUser": "vscode",
  "mounts": [
    "source=claude-code-config,target=/home/vscode/.claude,type=volume"
  ],
  "postCreateCommand": "chown -R vscode:vscode ~"
}

これでdevcontainerを再作成してもClaudeのセッションが維持され、毎回認証し直す必要がなくなった。