はじめに
こんにちは!
devcontainer内でClaude Codeを使い始めたのですが、「コンテナをリビルドするたびに、Claudeの認証情報や会話履歴が消えてしまう」のが不便と思いはや5日。
どうもふとんです。
毎回ログインし直したり、前の会話履歴を参照できなくて不便...と感じている方もいるのではないでしょうか?
この記事では、devcontainer.json
に簡単な設定を追記するだけで、この問題を解決し、devcontainer環境でもClaude Codeを快適に使い続けられる方法をご紹介します。
【重要】初めて設定する方へ:事前準備
今回の設定を行う前に、一つだけ重要なステップがあります。
ホストマシン(あなたのPC)でこれまで一度もClaude Codeを使ったことがない方は、devcontainerを起動する前に、ホストのターミナルで以下のコマンドを実行してください。
touch ~/.claude.json
なぜこの手順が必要か?
もしこの空ファイルが存在しない状態でコンテナを起動すると、Dockerの仕様により、mounts設定が.claude.jsonという名前のフォルダを自動で作成してしまいます。
結果として、Claude拡張機能が認証情報をファイルに書き込めず、正しく動作しなくなってしまうためです。
結論:ホストマシンと設定ファイルを共有する
結論から言うと、以下の設定をdevcontainer.json
に追記することで、Claude Codeの認証情報と履歴をdevcontainerの外(ホストマシン)に保存し、コンテナをリビルドしても設定が維持されるようになります。
{
// (中略) 他の設定
"features": {
// Claude Codeのdevcontainer Featureを有効化
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
},
// ↓↓↓ このマウント設定がポイント! ↓↓↓
"mounts": [
// 履歴や設定が保存されるディレクトリをマウント
"source=${localEnv:HOME}/.claude,target=/home/vscode/.claude,type=bind,consistency=cached",
// 認証情報が保存されるファイルをマウント
"source=${localEnv:HOME}/.claude.json,target=/home/vscode/.claude.json,type=bind,consistency=cached"
],
// (中略) 他の設定
}
※注意:
お使いのdevcontainerのユーザー名がvscode
でない場合(例:rails
, node
など)は、target
のパスも合わせて変更してください。
target=/home/rails/.claude
target=/home/rails/.claude.json
設定のポイント解説
1. features
まず、features
でClaude Codeのdevcontainer Featureを有効にします。これにより、コンテナ構築時にClaude Code拡張機能が自動でインストールされるようになります。
"features": {
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
},
2. mounts
(ここが最重要!)
今回のキモとなるのが、mounts
の設定です。
これは、ホストマシン(あなたのPC)のファイルやディレクトリを、コンテナ内の特定の場所に「接続(マウント)」する設定です。
"mounts": [
"source=${localEnv:HOME}/.claude,target=/home/vscode/.claude,type=bind,consistency=cached",
"source=${localEnv:HOME}/.claude.json,target=/home/vscode/.claude.json,type=bind,consistency=cached"
],
これにより、コンテナ内のClaude Codeが利用する設定ファイルが、実際にはホストマシンのファイルを参照・更新するようになります。コンテナ自体を削除・リビルドしても、ホストマシン上の設定ファイルは残るため、認証情報や履歴が維持されるという仕組みです。
Claudeの設定ファイルについて
マウントしている/.claude
ディレクトリと/.claude.json
ファイルは、Claude Code拡張機能が設定を保存するために使用するものです。公式情報によると、それぞれ以下の役割を持っています。
-
~/.claude/
(ディレクトリ)- 役割: 主に会話の履歴やキャッシュデータを保存します。
- このディレクトリを永続化することで、過去のやり取りをコンテナをまたいで参照できるようになります。
-
~/.claude.json
(ファイル)- 役割: ユーザーの認証情報(APIキーなど)を保存します。
- このファイルが永続化されることで、コンテナをリビルドするたびにログインを求められることがなくなります。
これらのファイルをホストマシンと共有することで、devcontainerの「使い捨てできる」というメリットを享受しつつ、Claude Codeの利便性を損なわない開発環境が実現できます。
まとめ
今回は、devcontainer.json
にmounts
設定を追記することで、devcontainer環境でClaude Codeの認証情報と履歴を永続化する方法を紹介しました。
この設定一つで、リビルドのたびに発生していた面倒な再設定から解放され、開発がもっとスムーズになるはずです。
devcontainerとClaude Codeを愛用している方は、ぜひ試してみてください!