設定
すべての設定はプロジェクトルートの .env ファイルに記述します。このファイルは gitignore されているため、コミットされることはありません。
AIプロバイダー
Section titled “AIプロバイダー”コンテナは2つの相互排他的な認証モードをサポートしています(優先順位順):
- LiteLLMプロキシ —
LITELLM_BASE_URLとLITELLM_API_KEYを設定してLiteLLMプロキシ経由でルーティングします(下記参照)。 - OAuthモード —
CLAUDE_CODE_OAUTH_TOKENのみを設定します(下記参照)。
モードを組み合わせないでください — いずれか1つのみを使用してください。
Claude Max(OAuth)
Section titled “Claude Max(OAuth)”| 変数 | 説明 | 例 |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN | Claude Maxサブスクリプションからの OAuthトークン | sk-ant-oat01-... |
設定すると、Claude CodeはOAuthを使用してAnthropicに直接認証します — APIキーやプロキシは不要です。トークンはClaude Codeの設定または Anthropicコンソール から取得できます。
LiteLLMプロキシ
Section titled “LiteLLMプロキシ”LiteLLM(またはその他の)プロキシがネイティブのAnthropic Messages API(web_search、ストリーミング、ツール使用を含む)に対応している場合、LITELLM_BASE_URL にプロキシドメインを設定します。コンテナはプロバイダー固有のURLを自動的に導出します:
- Anthropicエンドポイント →
${LITELLM_BASE_URL}/anthropic(Claude Codeが使用) - OpenAI互換エンドポイント →
${LITELLM_BASE_URL}/openai/v1
| 変数 | 説明 | 例 |
|---|---|---|
LITELLM_BASE_URL | LiteLLMプロキシのドメイン(パスサフィックスなし) | https://litellm.example.com |
LITELLM_API_KEY | プロキシ認証用のAPIキー | your-api-key またはデフォルトで litellm-proxy |
ユーザーはドメインのみを設定すれば、プロバイダーのパスサフィックスは自動的に付加されます。
実行時にエントリポイントが LITELLM_API_KEY から ANTHROPIC_API_KEY を導出するため、Claude Codeは別のユーザー向け変数を必要とせずにプロキシ認証情報を使用できます。
このモードではモデル名のリマッピングは行われません。Claude Codeは標準的なモデル識別子(例:claude-sonnet-4-6)を送信し、LiteLLMが設定されたバックエンドにルーティングします。
TLS証明書の検証
Section titled “TLS証明書の検証”デフォルトでは、Node.jsはすべてのHTTPS接続に対してTLS証明書を検証します。上流のAPIプロバイダーが自己署名証明書を使用している場合(内部のOpen WebUIやLiteLLMプロキシでよく見られます)、.env ファイルに以下を追加して検証を無効にできます:
NODE_TLS_REJECT_UNAUTHORIZED=0これは本番環境での使用は推奨されません。コンテナとAPIエンドポイント間のネットワークパスを信頼できる場合にのみ設定してください。
AIコーディングエージェント
Section titled “AIコーディングエージェント”コンテナにはClaude Codeに加えて、いくつかのAIコーディングエージェントが含まれています:
| エージェント | コマンド | プロバイダー |
|---|---|---|
| Codex | codex | OpenAI互換 |
| Pi | pi | マルチプロバイダー(実行時に設定) |
| Oh-My-Pi | omp | マルチプロバイダー(実行時に設定) |
PiとOh-My-Piはグローバルnpmパッケージとしてインストールされます。Codexは実行時に自動更新するスタンドアロンバイナリです。
リモートディスプレイ(noVNC)
Section titled “リモートディスプレイ(noVNC)”コンテナは、GUIブラウザの監視と操作のための仮想ディスプレイスタックを実行します。接続方法と環境変数(ENABLE_VNC、VNC_RESOLUTION、DISPLAY、NOVNC_HOST_PORT)については リモートディスプレイ(noVNC) を参照してください。
Chrome DevTools MCP
Section titled “Chrome DevTools MCP”コンテナには、ヘッドレスブラウザ自動化用に事前設定された Chrome DevTools MCP サーバーが含まれています。Claude Codeは追加のセットアップなしにWebページのナビゲーション、スクリーンショットの取得、DOMの検査が可能です。詳細は Chrome DevTools MCP を参照してください。
| 変数 | 説明 | 設定方法 |
|---|---|---|
GIT_AUTHOR_NAME | gitコミット用の名前 | git config user.name |
GIT_AUTHOR_EMAIL | gitコミット用のメールアドレス | git config user.email |
ホストでgitが設定されている場合、両方の値を自動的に取得できます:
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .envecho "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env| 変数 | 説明 | 設定方法 |
|---|---|---|
SSH_PRIVATE_KEY | Base64エンコードされた秘密鍵 | base64 < ~/.ssh/id_ed25519 |
GitHub CLI
Section titled “GitHub CLI”| 変数 | 説明 | 設定方法 |
|---|---|---|
GH_TOKEN | gh CLIおよびHTTPS git用のGitHubパーソナルアクセストークン | gh auth token(ローカルに gh がインストールされている場合) |
.env に GH_TOKEN を設定すると、gh CLIは自動的に認証されます — gh auth login を実行する必要はありません。エントリポイントは gh auth setup-git も実行し、git認証ヘルパーを設定するため、HTTPS での git clone と git push がSSHキーなしで動作します。
ホストマシンに gh がインストールされ認証済みの場合、トークンを直接取得できます:
echo "GH_TOKEN=$(gh auth token)" >> .envそれ以外の場合は、パーソナルアクセストークンを作成 して手動で追加してください。きめ細かいトークン(推奨)とクラシックトークンの両方が使用できます。きめ細かいトークンでは特定のリポジトリへのアクセスをスコープ指定できます。クラシックトークンではプライベートリポジトリへのアクセスに repo スコープが必要です。
コンテナ内で認証を確認するには:
gh auth statusツールのインストール方法
Section titled “ツールのインストール方法”すべての言語ランタイム、CLI、ツールはイメージのビルド時に Dockerfile 内で直接インストールされます。ビルド済みイメージは main へのプッシュごとに ghcr.io/f5-sales-demo/devcontainer:latest に公開されるため、ほとんどのユーザーはローカルでビルドする必要はありません。
docker compose up -d を実行すると、ビルド済みイメージが自動的にプルされます。Dockerfileをカスタマイズした後にローカルでビルドするには、ビルドファイルを明示的に指定します:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build詳細は ローカル開発 を参照してください。
podman-compose up -d を実行すると、ビルド済みイメージが自動的にプルされます。Dockerfileをカスタマイズした後にローカルでビルドするには、ビルドファイルを明示的に指定します:
podman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --build詳細は ローカル開発 を参照してください。
Dockerfileは、Dockerレイヤーキャッシュに最適化された2段階ビルドを使用しています。レイヤーの完全な内訳とビルドキャッシュの詳細については、ローカル開発 — 2段階ビルドアーキテクチャ を参照してください。
Claude Codeのツール認識
Section titled “Claude Codeのツール認識”コンテナには、Claude Codeがツール名を混同するのを防ぐビルトイン設定が含まれています。ツール認識は多層防御のために2つのメモリ階層にインストールされています:
- マネージドポリシー (
/etc/claude-code/CLAUDE.md) — Dockerビルド時にインストールされます。これはClaude Codeのメモリ階層で最も優先度が高く、作業ディレクトリにプロジェクトのCLAUDE.mdが存在する場合でも常にロードされます。 - ユーザーメモリ (
~/.claude/CLAUDE.md) — 初回起動時にエントリポイントによってシードされます。バックアップレイヤーと、ユーザーがカスタマイズ可能な表示コピーを提供します。
メモリ階層の優先順位
Section titled “メモリ階層の優先順位”Claude Codeは複数のメモリ階層から命令をロードします(優先度の高い順):
- マネージドポリシー (
/etc/claude-code/) — 常にロードされ、除外不可 - プロジェクトメモリ (
./CLAUDE.md) — プロジェクトディレクトリごとにロード - ユーザーメモリ (
~/.claude/CLAUDE.md) — すべてのセッションでグローバルにロード - ローカルメモリ (
./CLAUDE.local.md) — プロジェクトごとの個人的なオーバーライド
マネージドポリシー階層がなければ、ユーザーメモリ内のツール認識は大きなプロジェクトレベルの CLAUDE.md と競合した際に優先度が下がり、ClaudeがPascalCaseのツール名の認識を失う可能性があります。マネージド階層により、ツール認識が常に最高優先度でロードされることが保証されます。
セルフテスト
Section titled “セルフテスト”ビルトインのセルフテストを実行して設定を確認します:
claude-self-testこれにより、すべての設定ファイルが所定の場所にあり、期待されるツール参照が含まれていることが確認されます。
ツールの追加
Section titled “ツールの追加”イメージにツールを追加するには、Dockerfile を編集してローカルでリビルドします。APTパッケージ、npmツール、pipツール、バイナリダウンロードの追加方法については、ローカル開発 — ツールの追加 を参照してください。
VS Code拡張機能
Section titled “VS Code拡張機能”拡張機能は .devcontainer/devcontainer.json の customizations.vscode.extensions で設定され、VS Codeで開くと自動的にインストールされます。
データ永続化
Section titled “データ永続化”すべてのデータは名前付きボリュームに保存されます — ホストディレクトリはマウントされません:
| ボリューム | マウントポイント | 内容 |
|---|---|---|
workspace | /workspace | クローンしたリポジトリとプロジェクトファイル |
home | /home/vscode | シェル履歴、ツール設定、キャッシュ、SSHキー |
どちらもコンテナの再起動やリビルドをまたいで永続化されます。再起動前に docker compose pull を実行して最新のビルド済みイメージを取得してください。
| 操作 | データ |
|---|---|
docker compose down | 保持 |
docker compose down -v | 削除 |
どちらもコンテナの再起動やリビルドをまたいで永続化されます。再起動前に podman-compose pull を実行して最新のビルド済みイメージを取得してください。
| 操作 | データ |
|---|---|
podman-compose down | 保持 |
podman-compose down -v | 削除 |
ポートマッピング
Section titled “ポートマッピング”| ホスト | コンテナ | サービス |
|---|---|---|
127.0.0.1:${NOVNC_HOST_PORT:-6080} | 6080 | noVNCリモートディスプレイ(localhostのみ、NOVNC_HOST_PORT でオーバーライド可能) |
ポートは 127.0.0.1 にバインドされているため、ネットワークからではなくお使いのマシンからのみアクセス可能です。