Docker ComposeでBedrock Engineerを使う方法：完全ガイド

## はじめに

こんにちは！今回は、最新のAI技術を活用したソフトウェア開発支援ツール「Bedrock Engineer」をDocker Composeを使って簡単に始める方法をご紹介します。

このガイドでは、DockerやDocker Composeについての基本的な説明から、Bedrock Engineerの具体的な設定方法まで、ステップバイステップで解説していきます。

技術に詳しくない方でも理解できるよう、できるだけ分かりやすい言葉で説明していきますので、ぜひ最後までお付き合いください！

## デモ動画

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">Bedrock EngineerのREADMEを日本語化＋Dockerでワンぽちで起動できるように改造しました！（PR提案中。。。）<br>🐳 <a href="https://t.co/MKRctK6Yc8">https://t.co/MKRctK6Yc8</a> <a href="https://t.co/godZpX9HLh">https://t.co/godZpX9HLh</a> <a href="https://t.co/hVD1kmu0Vd">pic.twitter.com/hVD1kmu0Vd</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1813492404466680147?ref_src=twsrc%5Etfw">July 17, 2024</a></blockquote> 

## Bedrock Engineerとは

まずは、Bedrock Engineerについて簡単に説明しましょう。

Bedrock Engineerは、ソフトウェア開発者の強力な味方となるAIツールです。このツールは、大規模言語モデル（LLM）の力を借りて、次のような機能を提供します：

- コードの分析と改善提案
- プロジェクト構造の作成と管理
- ファイル操作の自動化
- Web検索機能
- AWSクラウドリソースの構築とデプロイ

つまり、Bedrock Engineerは、開発者の頭脳を拡張し、より効率的かつ高品質な開発作業を支援するAIアシスタントだと言えます。

```mermaid
%%{init: {"themeVariables": { "primaryColor": "#ffcccc", "secondaryColor": "#ccffcc", "tertiaryColor": "#ccccff", "mainBkg": "#fff0f0", "nodeBorder": "#ff9999", "clusterBkg": "#fffaf0", "clusterBorder": "#ffe4b5", "lineColor": "#ff9999", "fontFamily": "arial"}}}%%

graph TD
    A[Bedrock Engineer] --> B[コード分析・改善]
    A --> C[プロジェクト構造管理]
    A --> D[ファイル操作自動化]
    A --> E[Web検索機能]
    A --> F[AWSクラウドリソース管理]
    style A fill:#f9d5e5,stroke:#333,stroke-width:4px
```

## Dockerとは

次に、Dockerについて説明しましょう。

Dockerは、アプリケーションを素早く構築、テスト、デプロイするためのプラットフォームです。Dockerを使うと、アプリケーションとその依存関係を「コンテナ」と呼ばれる軽量な実行環境にパッケージ化できます。

Dockerを使うメリットは以下の通りです：

1. **環境の一貫性**: 開発、テスト、本番環境を同じ設定で維持できます。
2. **移植性**: どのような環境でも同じように動作します。
3. **効率性**: システムリソースを効率的に使用します。
4. **分離**: アプリケーション間の干渉を防ぎます。

```mermaid
%%{init: {"themeVariables": { "primaryColor": "#ffcccc", "secondaryColor": "#ccffcc", "tertiaryColor": "#ccccff", "mainBkg": "#fff0f0", "nodeBorder": "#ff9999", "clusterBkg": "#fffaf0", "clusterBorder": "#ffe4b5", "lineColor": "#ff9999", "fontFamily": "arial"}}}%%
graph TD
    A[Docker] --> B[環境の一貫性]
    A --> C[移植性]
    A --> D[効率性]
    A --> E[分離]
    style A fill:#d5f5e3,stroke:#333,stroke-width:4px

```

## Docker Composeとは

Docker Composeは、複数のDockerコンテナを定義し、実行するためのツールです。

例えば、ウェブアプリケーション、データベース、キャッシュサーバーなど、複数のサービスで構成されるアプリケーションがあるとします。Docker Composeを使えば、これらのサービスを1つの設定ファイル（通常は`docker-compose.yml`）で定義し、単一のコマンドで全てのサービスを起動できます。

Docker Composeの主な利点は以下の通りです：

1. **簡素化**: 複雑なアプリケーションの起動を簡単にします。
2. **再現性**: 同じ環境を簡単に再現できます。
3. **開発効率の向上**: ローカル開発環境の構築が容易になります。

```mermaid
%%{init: {"themeVariables": { "primaryColor": "#ffcccc", "secondaryColor": "#ccffcc", "tertiaryColor": "#ccccff", "mainBkg": "#fff0f0", "nodeBorder": "#ff9999", "clusterBkg": "#fffaf0", "clusterBorder": "#ffe4b5", "lineColor": "#ff9999", "fontFamily": "arial"}}}%%
graph TD
    A[Docker Compose] --> B[簡素化]
    A --> C[再現性]
    A --> D[開発効率の向上]
    style A fill:#d5e8f5,stroke:#333,stroke-width:4px

```

## Bedrock EngineerのDocker設定

では、いよいよBedrock EngineerのDocker設定について説明しましょう。

Bedrock Engineerのリポジトリには、すでにDockerfile（Dockerイメージを定義するファイル）とdocker-compose.yml（Docker Compose設定ファイル）が用意されています。

これらのファイルにより、Bedrock Engineerを簡単にDockerコンテナ内で実行できるようになっています。

## Docker Composeファイルの詳細解説

Bedrock EngineerのDocker Compose設定ファイル（`docker-compose.yml`）を詳しく見ていきましょう。

```yaml
version: '3.8'

services:
  bedrock-engineer:
    build: .
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    tty: true
    env_file:
      - .env
```

この設定ファイルを1行ずつ解説していきます：

1. `version: '3.8'`: Docker Composeファイルのバージョンを指定しています。

2. `services:`: ここから、実行するサービス（コンテナ）の定義が始まります。

3. `bedrock-engineer:`: このサービスの名前です。

4. `build: .`: カレントディレクトリにあるDockerfileを使ってイメージをビルドします。

5. `volumes:`: ホストとコンテナ間でデータを共有するための設定です。
   - `. : /app`: カレントディレクトリをコンテナの`/app`ディレクトリにマウントします。
   - `/app/node_modules`: node_modulesディレクトリを独立したボリュームとして保持します。

6. `ports: - "3000:3000"`: ホストのポート3000をコンテナのポート3000にマッピングします。

7. `environment: - NODE_ENV=production`: 環境変数を設定します。ここではNode.jsの実行環境を本番モードに設定しています。

8. `tty: true`: コンテナに疑似TTYを割り当てます。これにより、コンテナ内でインタラクティブなコマンドを実行できます。

9. `env_file: - .env`: `.env`ファイルから環境変数を読み込みます。

```mermaid
%%{init: {"themeVariables": { "primaryColor": "#ffcccc", "secondaryColor": "#ccffcc", "tertiaryColor": "#ccccff", "mainBkg": "#fff0f0", "nodeBorder": "#ff9999", "clusterBkg": "#fffaf0", "clusterBorder": "#ffe4b5", "lineColor": "#ff9999", "fontFamily": "arial"}}}%%
graph TD
    A[docker-compose.yml] --> B[version]
    A --> C[services]
    C --> D[bedrock-engineer]
    D --> E[build]
    D --> F[volumes]
    D --> G[ports]
    D --> H[environment]
    D --> I[tty]
    D --> J[env_file]
    style A fill:#f5e1d5,stroke:#333,stroke-width:4px

```

## Bedrock Engineerの起動方法

さて、Docker Composeの設定ファイルについて理解したところで、実際にBedrock Engineerを起動する方法を説明しましょう。

1. まず、Bedrock Engineerのリポジトリをクローンします：

   ```bash
   git clone https://github.com/daisuke-awaji/bedrock-engineer
   cd bedrock-engineer
   ```

2. 次に、Docker Composeを使ってコンテナをビルドし、起動します：

   ```bash
   docker-compose up --build
   ```

   このコマンドは、Dockerイメージをビルドし、コンテナを起動します。初回は少し時間がかかるかもしれません。

3. コンテナが起動したら、別のターミナルウィンドウを開き、次のコマンドでコンテナ内にシェルを開きます：

   ```bash
   docker-compose exec bedrock-engineer /bin/bash
   ```

4. コンテナ内のシェルで、Bedrock Engineerを起動します：

   ```bash
   npm run start
   ```

これで、Bedrock Engineerが起動し、使用可能になりました！

```mermaid
%%{
  init: {
    'theme': 'base',
    'themeVariables': {
      'primaryColor': '#ffcccc',
      'secondaryColor': '#ccffcc',
      'tertiaryColor': '#ccccff',
      'mainBkg': '#fff0f0',
      'nodeBorder': '#ff9999',
      'clusterBkg': '#fffaf0',
      'clusterBorder': '#ffe4b5',
      'lineColor': '#ff9999',
      'fontFamily': 'arial'
    }
  }
}%%
sequenceDiagram
    participant User
    participant Docker
    participant BEContainer
    User->>Docker: docker-compose up --build
    Docker->>BEContainer: コンテナを起動
    User->>Docker: docker-compose exec bedrock-engineer /bin/bash
    Docker->>BEContainer: コンテナ内にシェルを開く
    User->>BEContainer: npm run start
    BEContainer->>User: Bedrock Engineer起動完了

```

## トラブルシューティング

Bedrock Engineerの起動時に問題が発生した場合、以下のような対処法を試してみてください：

1. **ポートの競合**: 3000番ポートが既に使用されている場合は、`docker-compose.yml`ファイルのポート設定を変更してみましょう。

2. **ビルドエラー**: `docker-compose up --build`コマンドでエラーが発生する場合は、Dockerイメージを再ビルドしてみてください：

   ```bash
   docker-compose build --no-cache
   ```

3. **環境変数の問題**: `.env`ファイルが正しく設定されていることを確認してください。

4. **コンテナ内でのエラー**: コンテナ内で`npm run start`を実行してエラーが発生する場合は、次のコマンドで依存関係を再インストールしてみてください：

   ```bash
   npm ci
   ```

問題が解決しない場合は、Bedrock EngineerのGitHubリポジトリのIssuesセクションで支援を求めることができます。

## まとめ

以上が、Docker Composeを使ってBedrock Engineerを起動する方法の詳細ガイドでした。

Dockerを使うことで、Bedrock Engineerの環境構築が大幅に簡素化され、どのようなシステム上でも一貫した動作を保証できます。

Bedrock Engineerは非常にパワフルなAIアシスタントツールです。Docker Composeを使って簡単に始められるこのツールを、ぜひ皆さんの開発プロジェクトに取り入れてみてください。AIの力を借りて、より効率的で創造的な開発を行いましょう！

何か質問や不明点があれば、お気軽にコメントしてください。Happy coding!


## 元のリポジトリ

https://github.com/daisuke-awaji/bedrock-engineer

## 日本語化＋Dockerに改造したリポジトリ

https://github.com/Sunwood-ai-labs/bedrock-engineer/blob/feature/docker/docs/README_JP.md

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>