1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

devcontainer上でClaude CodeをAmazon Bedrock経由で動かしてみた

1
Last updated at Posted at 2026-02-27

はじめに

Claude Codeは、ターミナルから直接AIペアプログラミングができる強力なツールです。本記事では、devcontainer(開発コンテナ)環境でClaude CodeをAmazon Bedrock経由で動かす方法を、実際の構築手順とともに詳しく解説します。

なぜこの構成が良いと考えたか

  • devcontainer: チーム全体で開発環境を統一でき、セキュリティも確保
  • Amazon Bedrock: 企業のAWSインフラと統合でき、コスト管理が容易
  • AWS SSO: 一元的な認証管理で、セキュアなアクセス制御が可能

前提条件

  • Docker Desktop がインストール済み
  • VS Code + Remote Containers 拡張機能
  • AWS CLI v2
  • AWS SSO でログイン可能なアカウント
  • Amazon Bedrock へのアクセス権限

必要なIAM権限

今回使用したIAMポリシーは以下の通りです:

Bedrock用のカスタムポリシー

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Effect": "Allow",
      "Action": [
        "bedrock:InvokeModel",
        "bedrock:InvokeModelWithResponseStream"
      ],
      "Resource": ["*"]
    }
  ]
}

追加で付与した権限

  • ReadOnlyAccess: AWSリソースの読み取り専用アクセス(開発作業で必要な情報参照用)

この最小権限の組み合わせにより、Bedrockの利用とリソースの確認が可能になります。

ディレクトリ構成

your-project/
├── .devcontainer/
│   ├── devcontainer.json
│   └── Dockerfile
├── .gitignore
└── README.md

セットアップ手順

1. AWS SSOの設定

まず、ローカルマシンでAWS SSOを設定します:

# AWS SSOの設定
aws configure sso

# ログイン
aws sso login --profile your-profile-name

# 認証確認
aws sts get-caller-identity --profile your-profile-name

2. Dockerfile の作成

.devcontainer/Dockerfile を作成します:

# Node.js 20ベースのdevcontainer
FROM mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye

# rootユーザーで必要なツールをインストール
USER root

# 基本ツールのインストール
RUN apt-get update && apt-get install -y \
    curl \
    git \
    vim \
    zsh \
    fzf \
    unzip \
    jq \
    less \
    && rm -rf /var/lib/apt/lists/*

# AWS CLI v2のインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && ./aws/install \
    && rm -rf awscliv2.zip aws

# Claude Codeのインストール(最新版)
RUN curl -fsSL https://claude.ai/install.sh | bash

# ZSHをデフォルトシェルに設定
RUN chsh -s $(which zsh) node

# nodeユーザーに切り替え
USER node

# Oh My Zshのインストール(オプション)
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended || true

# .zshrcの基本設定
RUN echo 'export ZSH="$HOME/.oh-my-zsh"' >> ~/.zshrc \
    && echo 'ZSH_THEME="robbyrussell"' >> ~/.zshrc \
    && echo 'plugins=(git aws)' >> ~/.zshrc \
    && echo 'source $ZSH/oh-my-zsh.sh' >> ~/.zshrc \
    && echo '' >> ~/.zshrc \
    && echo '# AWS環境変数' >> ~/.zshrc \
    && echo 'export AWS_REGION=ap-northeast-1' >> ~/.zshrc \
    && echo 'export AWS_PROFILE=your-profile-name' >> ~/.zshrc \
    && echo '' >> ~/.zshrc \
    && echo '# Claude Code設定' >> ~/.zshrc \
    && echo 'export CLAUDE_CODE_USE_BEDROCK=1' >> ~/.zshrc

# 作業ディレクトリの設定
WORKDIR /workspace

# デフォルトコマンド
CMD ["/bin/zsh"]

3. devcontainer.json の作成

.devcontainer/devcontainer.json を作成します:

{
  "name": "Claude Code with Bedrock (Tokyo Region)",
  "build": {
    "dockerfile": "Dockerfile",
    "context": "."
  },

  "containerEnv": {
    "CLAUDE_CODE_USE_BEDROCK": "1",
    "AWS_REGION": "ap-northeast-1",
    "AWS_PROFILE": "your-profile-name",
    "ANTHROPIC_MODEL": "global.anthropic.claude-sonnet-4-5-20250929-v1:0",
    "ANTHROPIC_SMALL_FAST_MODEL": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "4096",
    "MAX_THINKING_TOKENS": "1024",
    "ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION": "us-east-1"
  },

  "mounts": [
    "source=${localEnv:USERPROFILE}${localEnv:HOME}/.aws,target=/home/node/.aws,type=bind,consistency=cached"
  ],

  "postCreateCommand": "bash -c 'mkdir -p ~/.config/claude-code && cat > ~/.config/claude-code/settings.json << EOF\n{\n  \"awsAuthRefresh\": \"aws sso login --profile your-profile-name\",\n  \"env\": {\n    \"AWS_PROFILE\": \"your-profile-name\",\n    \"AWS_REGION\": \"ap-northeast-1\"\n  }\n}\nEOF\n'",

  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "eamodio.gitlens",
        "ms-azuretools.vscode-docker"
      ],
      "settings": {
        "terminal.integrated.defaultProfile.linux": "zsh",
        "editor.formatOnSave": true
      }
    }
  },

  "remoteUser": "node",

  "features": {
    "ghcr.io/devcontainers/features/git:1": {},
    "ghcr.io/devcontainers/features/github-cli:1": {}
  }
}

4. .gitignore の作成

機密情報を誤ってコミットしないよう、.gitignore を設定:

# AWS認証情報
.aws/
*.pem
*.key

# 環境変数ファイル
.env
.env.local
.env.*.local

# Claude Code設定
.claude-code/
settings.json

# Node.js
node_modules/
npm-debug.log*

# IDE設定
.vscode/*
!.vscode/settings.json
.idea/

# OS
.DS_Store
Thumbs.db

# ログ
*.log
logs/

5. コンテナの起動

  1. VS Codeでプロジェクトフォルダを開く
  2. コマンドパレット(Cmd/Ctrl+Shift+P)を開く
  3. "Remote-Containers: Reopen in Container" を選択
  4. 初回は数分かかります(イメージのビルド)

6. 動作確認

コンテナ内のターミナルで以下を実行:

# 環境変数の確認
echo $AWS_REGION          # ap-northeast-1
echo $AWS_PROFILE         # your-profile-name
echo $CLAUDE_CODE_USE_BEDROCK  # 1

# AWS認証確認
aws sts get-caller-identity

# Bedrock利用可能モデル確認
aws bedrock list-inference-profiles --region ap-northeast-1

# Claude Code起動
claude

Claude Codeが正常に起動すると、以下のような画面が表示されます:

20260216081019.png

7. Claude Codeを使ってみる

プロンプトで試してみましょう:

# 機能確認
> what can you do?

プロンプト送信!
20260216081245.png

返ってきました!
20260216081417.png

全文はこちら:

╭─── Claude Code v2.1.42 ────────────────────────────────────────────────────────────────────────────────╮
│                                                    │ Tips for getting started                          │
│                    Welcome back!                   │ Run /init to create a CLAUDE.md file with instru… │
│                                                    │ ───────────────────────────────────────────────── │
│                                                    │ Recent activity                                   │
│                       ▐▛███▜▌                      │ No recent activity                                │
│                      ▝▜█████▛▘                     │                                                   │
│                        ▘▘ ▝▝                       │                                                   │
│ global.anthropic.claude-sonne… · API Usage Billing │                                                   │
│          /workspaces/lab-claude-code-book          │                                                   │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  /model to try Opus 4.6. Note: you may need to request access from your cloud provider

❯ what can you do? 

● I'm Claude Code, an AI assistant designed to help you with software engineering tasks. Here's what I can
   do:
                                                                                                          
  Core Capabilities

  Code Development
  - Read, write, and edit code across multiple files
  - Debug issues and fix bugs
  - Add new features and functionality
  - Refactor and improve existing code
  - Explain how code works

  File Operations
  - Search for files and code patterns
  - Read and analyze codebases
  - Create and modify files (though I prefer editing existing ones)

  Git Operations
  - Create commits with meaningful messages
  - Create pull requests
  - Check status, diffs, and logs
  - Work with branches

  Command Execution
  - Run terminal commands
  - Execute tests
  - Install dependencies
  - Work with build tools

  Research & Analysis
  - Explore codebases to understand structure
  - Search for specific implementations
  - Fetch and analyze web content
  - Answer questions about code

  Interactive Work
  - Ask clarifying questions when needed
  - Break down complex tasks
  - Work through problems step-by-step

  I can see you have a markdown file open about running Claude Code on Amazon Bedrock via devcontainer.
  Would you like help with that documentation or something else in your project?

最後の二行みるにこのプロジェクトの目的を、存在するファイルから推測して提案までしてくれているようです。
かくしてClaude Codeジャーニーが始まったのでした。これから様々な機能を試したいしたいところです...

Windows環境での注意点

Windows環境では、パス解決の問題が発生する場合があります。その場合は以下を試してください:

方法1: 絶対パス指定

devcontainer.json のマウント設定を修正:

"mounts": [
  "source=C:/Users/YOUR_USERNAME/.aws,target=/home/node/.aws,type=bind"
]

方法2: WSL2を使用(推奨)

  1. VS Code左下の緑ボタン → "Reopen in WSL"
  2. WSL2内で aws sso login --profile your-profile-name を実行
  3. そのまま "Reopen in Container"

WSL2を使う場合、元の設定のままでOKです。

トラブルシューティング

認証エラーが出る場合

# ホストマシンで再度SSOログイン
aws sso login --profile your-profile-name

# コンテナを再起動
# VS Code: Cmd/Ctrl+Shift+P → "Rebuild Container"

モデルが見つからない場合

# 東京リージョンで使えるモデルを確認
aws bedrock list-inference-profiles --region ap-northeast-1

# グローバルinference profilesを使用(推奨)
export ANTHROPIC_MODEL="global.anthropic.claude-sonnet-4-5-20250929-v1:0"

Claude Codeがインストールされていない場合

# npm経由で手動インストール
npm install -g @anthropic-ai/claude-code

# 確認
claude --version

次にやりたいこと

今回、環境構築が終わったということでClaude Codeに少しずつ慣れていくためにもさまざまな機能を試してみたいです。
様々な機能がありますが、まずは以下から:

プロジェクト初期化

# Claude Code内で
> /init

# CLAUDE.mdファイルが作成され、プロジェクト固有の指示を記録可能

Git操作

> what files have changed?
> create a commit with a descriptive message
> create a new branch called feature/new-api

コードレビュー

> review the changes I just made and suggest improvements
> check for security issues in this authentication code

セキュリティのベストプラクティス

  1. 最小権限の原則: 必要最小限のIAM権限のみ付与
  2. 認証情報の保護: .gitignore.awsディレクトリを除外
  3. 定期的なログイン: SSOトークンの有効期限に注意
  4. 監査ログ: CloudTrailでBedrock APIの呼び出しを監視
  5. コスト管理: AWS Cost Explorerで使用量を定期的に確認

コスト管理のヒント

  • Claude Code専用のAWSアカウントを作成すると、コスト追跡が容易
  • CLAUDE_CODE_MAX_OUTPUT_TOKENS=4096 で出力トークンを制限
  • 定期的にAWS Cost Explorerでコストを確認
  • 開発用途では、より安価なHaikuモデルの利用も検討

まとめ

devcontainer + Claude Code + Bedrock の組み合わせにより、以下のメリットが得られると感じました:

  • 統一された開発環境: チーム全体で同じ環境を共有
  • セキュアなアクセス: AWS SSOによる一元管理
  • 企業インフラ統合: 既存のAWS環境との統合が容易
  • コスト管理: Bedrockの料金体系で明確な課金管理
  • スケーラビリティ: チームの拡大にも柔軟に対応

この構成により、プロダクション環境に近い形でAI支援開発を進めることができます。

参考リンク


この記事が、Claude Codeとdevcontainerを使った開発環境構築の参考になれば幸いです。質問やフィードバックがあれば、お気軽にコメントください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?