> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# コンテナ化

> このチュートリアルでは、Devinがチームの開発環境を標準化するためにDockerコンテナを設定する方法を紹介します。

<div id="creating-a-docker-container">
  ## Docker コンテナの作成
</div>

Devin はターミナルにアクセスでき、自身のサーバー上でソフトウェアを設定・実行できるため、Docker コンテナのセットアップも問題なく行うことができます。

ここで扱うサンプルアプリケーションは、データストアに MongoDB を使用する Go プロジェクトです。このセッションは、実際の開発者がオープンソースプロジェクトに作成・送信したプルリクエストを、Devin が行ったバージョンです。ライブ実行の内容は[こちら](https://app.devin.ai/sessions/379eb9a40ff2433db49e51c95c7d9bc1?ts=1729908167981)から確認できます。

<div id="start-with-a-github-issue">
  #### GitHub Issue から始める
</div>

まずは元の GitHub Issue から始めます。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/e8a410ab96ee363911b146bcbd923da43c25b03a-1856x746.png)
</Frame>

次に、この Issue が求めている内容に基づいて、Devin 向けのシンプルなプロンプトを作成します。上記の GitHub Issue を追加のコンテキストとして読むよう指示しつつ、提案されている解決策の要約と、Devin に生成してほしい成果物をこちらからも伝えます。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/4caecf4fd393f5573536a5b6d57d7246b684d699-1312x612.png)
</Frame>

<div id="investigating-the-codebase">
  #### コードベースの調査
</div>

Devin はまずコードベースの調査から開始し、リンクされた GitHub Issue を読み、必要な依存関係を把握するために、プロジェクトの実際のコードおよび設定ファイルを[スキャン](/ja/release-notes#repo-knowledge)します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/4f146e093bd0374b5d816c5fd9f49d6a411d6c8f-1334x844.png)
</Frame>

分析が完了すると、Devin はローカルマシンに Docker をインストールし、コンテナセットアップのテストを開始できるように、初期の Dockerfile、docker-compose.yml、.dockerignore を作成します。また、アプリケーションが新しく構成されたコンテナバックエンド上で動作できるように、.env ファイルも設定します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/710b051e9b5f75d3b5492f554fee786e212dc129-1314x1370.png)
</Frame>

<div id="testing-the-container">
  #### コンテナのテスト
</div>

その後 Devin は各コンテナのテストに進み、まず MongoDB サーバーをテストしてから、続いて Go 環境をテストします。コンテナが立ち上がると、Devin はアプリケーションそのもののテストに移ります。Devin の[コマンド履歴](/ja/work-with-devin/devin-session-tools#shell-command-history)を確認すると、Swagger の API 定義を見つけて組み込みの [Browser](/ja/work-with-devin/devin-session-tools#interactive-browser) に読み込み、バックエンド API の動作を確認していることが分かります。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/3cee193ba84dcea344e4a7fd829ae39c0d602270-2720x1422.png)
</Frame>

続いて Devin は、バックエンド API が稼働しており、設計仕様どおりに結果を返すことを確認するための curl リクエストを組み立てました。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/de15b455421e2320b5dd6023bd0d4d47aaff2e7c-1208x710.png)
</Frame>

<div id="debugging">
  #### デバッグ
</div>

**Connection refused** エラーが発生したため、Devin は直ちにデバッグに進み、Docker 設定の修正を行います。これは、セッションを進めながら Devin が自動的にエラーを修正していく、よくあるパターンです。Devin はすぐに設定上の問題を修正し、Docker コンテナを再起動し、行った作業をまとめて要約します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/ad2d884abb70c7dd74614addbe1d8e111ebf7d53-1356x2208.png)
</Frame>

Devin の作業内容を[実際のプロジェクトの PR](https://github.com/Ratnesh-Team/Rehabify/pull/137) と比較すると、いくつか顕著な差分と改善点があります。

* Devin は Dockerfile に加えて、docker-compose.yml ファイルをセットアップします。これにより、ネットワークの構成方法、ボリュームの設定方法、どのサービスが互いに依存しているかといった、より具体的なオーケストレーション設定が可能になります。
* Devin はビルドプロセスを `go mod tidy` から変更し、Docker ビルド内で一部の依存関係をキャッシュできる方法に切り替えます。
* Devin は動的リンクではなく静的リンクされた Go バイナリをビルドし、Docker イメージをより軽量にします。
* Devin は HTTPS 用の CA 証明書を設定し、環境変数を直接渡すのではなく、.env ファイルを使って設定できるようにします。
* そして何より重要なのは、プロジェクトの PR にはない MongoDB サービスを Docker 設定に追加している点です。PR 側は、開発者がすでに別の MongoDB インスタンスを起動していることを前提としています。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/7607ba8b57199a26812cb8f4c7129ee5a97ffcdb-1818x1206.png)
</Frame>

13 分で、Devin はこのプロジェクトのバックエンド用 Docker コンテナをベストプラクティスに従って構築し、テストし、その作業内容について包括的な概要を書き上げました。チーム向けの Devin アカウントに[サインアップ](https://cognition.com/get-started#company)して、自身のコードベースに対してコンテナ化用のプロンプトを試してみてください。
