.devcontainer
基本情報
| 項目 |
内容 |
| モジュールパス |
.devcontainer |
| 種別 |
設定モジュール(開発環境構成) |
| ファイル数 |
2 |
| サブモジュール数 |
0 |
概要
VS Code Dev Containers および GitHub Codespaces で使用される LangChain プロジェクトの開発コンテナ環境を定義する設定モジュール。Docker Compose ベースでコンテナを構築し、Python 3.11 環境・uv パッケージマネージャー・VS Code 拡張機能・フォーマッタ設定を自動適用する。開発者はローカル環境を個別にセットアップすることなく、コンテナ作成後の uv sync 実行により即座にコーディングを開始できる。システム全体においては開発環境の標準化と再現性の確保を担い、オンボーディングコストの削減に寄与する。
設計パターン
| パターン名 |
適用範囲 |
説明 |
| 宣言的設定 |
モジュール全体 |
devcontainer.json と docker-compose.yaml による宣言的なインフラ定義。手続き的なスクリプトではなく、望ましい状態を記述する方式 |
| Composition |
devcontainer.json → docker-compose.yaml |
Dev Container 設定が Docker Compose 定義を参照し、複数の設定ファイルを組み合わせて環境を構成 |
アーキテクチャ
モジュール構成
.devcontainer/
├── devcontainer.json - VS Code Dev Containers および GitHub Codespaces で使用される開発コンテナの構成定義ファイル。
└── docker-compose.yaml - VS Code Dev Containers / GitHub Codespaces 向けの Docker Compose 設定ファイル。
コンポーネント関連図
Mermaid形式:
graph TD
VSCode[VS Code / Codespaces] --> DC[devcontainer.json]
DC -->|dockerComposeFile| Compose[docker-compose.yaml]
Compose -->|build| Dockerfile[libs/langchain/dev.Dockerfile]
DC -->|features| Features[Git, GitHub CLI]
DC -->|postCreateCommand| UVSync[uv sync]
DC -->|customizations| Extensions[VS Code 拡張・設定]
Compose -->|networks| Network[langchain-network<br/>bridge]
機能一覧
| 機能名 |
説明 |
主要ファイル |
| コンテナビルド定義 |
Python 3.11 ベースの開発コンテナイメージのビルド構成を定義 |
docker-compose.yaml |
| 開発環境自動セットアップ |
コンテナ作成後に uv sync で Python 依存関係を自動インストール |
devcontainer.json |
| VS Code 拡張自動適用 |
Python 開発に必要な拡張機能(デバッガー、型チェッカー、Jupyter 等)を自動インストール |
devcontainer.json |
| Python インタープリター設定 |
uv が作成する仮想環境のインタープリターパスを自動設定 |
devcontainer.json |
| フォーマット自動実行 |
Python ファイル保存時にフォーマットと import 整理を自動実行 |
devcontainer.json |
| ボリュームマウント |
named volume によるワークスペースマウントでファイルシステムパフォーマンスを向上 |
devcontainer.json |
| 開発ツール追加 |
Dev Container Features による Git・GitHub CLI の追加インストール |
devcontainer.json |
| ネットワーク定義 |
サービス間通信用ブリッジネットワークの定義(将来の複数サービス拡張に対応) |
docker-compose.yaml |
公開インターフェース
クラス / 関数
設定ファイルのみで構成されるモジュールのため、プログラム的なクラス・関数のインターフェースは提供しません。
設定インターフェース
| 名前 |
種別 |
用途 |
| devcontainer.json |
Dev Container 設定 |
VS Code / Codespaces が自動読み込みし、開発コンテナ環境を構築 |
| docker-compose.yaml |
Docker Compose 定義 |
devcontainer.json から参照され、コンテナのビルド・ネットワーク構成を提供 |
依存関係
外部依存(このモジュールが依存する外部パッケージ)
| パッケージ |
主要コンポーネント |
用途 |
| Docker / Docker Compose |
docker-compose CLI |
コンテナのビルド・起動・管理 |
| Dev Container 仕様 |
devcontainer.json spec |
VS Code / Codespaces による開発コンテナ定義の標準仕様 |
| ghcr.io/devcontainers/features/git:1 |
Git Feature |
コンテナへの Git インストール |
| ghcr.io/devcontainers/features/github-cli:1 |
GitHub CLI Feature |
コンテナへの GitHub CLI (gh) インストール |
| uv |
uv sync |
Python パッケージマネージャー(依存関係の同期) |
| VS Code 拡張: ms-python.python |
Python 言語サポート |
Python 開発の基本機能 |
| VS Code 拡張: ms-python.debugpy |
Python デバッガー |
デバッグ実行 |
| VS Code 拡張: ms-python.mypy-type-checker |
mypy 型チェッカー |
型チェック |
| VS Code 拡張: ms-python.isort |
import ソート |
import 文の自動整理 |
| VS Code 拡張: unifiedjs.vscode-mdx |
MDX サポート |
MDX ファイル編集 |
| VS Code 拡張: davidanson.vscode-markdownlint |
Markdown lint |
Markdown の構文チェック |
| VS Code 拡張: ms-toolsai.jupyter |
Jupyter Notebook |
ノートブック実行・編集 |
| VS Code 拡張: GitHub.copilot |
GitHub Copilot |
AI コード補完 |
| VS Code 拡張: GitHub.copilot-chat |
GitHub Copilot Chat |
AI チャット |
外部依存(このモジュールが依存する内部モジュール)
| 依存先モジュール |
主要ファイル |
用途 |
| libs/langchain |
dev.Dockerfile |
Python 3.11 ベースの開発用コンテナイメージ定義(uv、build-essential、git、vim 等のインストール) |
| libs/langchain_v1 |
pyproject.toml 等 |
postCreateCommand での uv sync 対象ディレクトリ(Python 依存関係の同期先) |
内部依存(このモジュールに依存するもの)
| 依存元 |
主要ファイル |
用途 |
| .devcontainer |
README.md |
Dev Container の使用方法ドキュメント(Codespaces / VS Code での起動手順を案内) |
設定ファイルモジュールのため、プロジェクト内の他のソースコードから直接参照されることはありません。VS Code / GitHub Codespaces のランタイムが devcontainer.json を自動的に検出・読み込みします。
データフロー
Mermaid形式:
flowchart TD
Start[VS Code / Codespaces 起動] --> ReadConfig[devcontainer.json 読み込み]
ReadConfig --> Compose[docker-compose.yaml 参照]
Compose --> Build[dev.Dockerfile ビルド]
Build --> Image[コンテナイメージ作成]
ReadConfig --> Features[Features インストール<br/>Git, GitHub CLI]
ReadConfig --> Volume[named volume マウント]
Image --> Run[コンテナ起動・接続]
Features --> Run
Volume --> Run
Run --> PostCreate[postCreateCommand<br/>uv sync 実行]
PostCreate --> Extensions[VS Code 拡張・設定の適用]
Extensions --> Ready[開発環境 Ready]
セキュリティ考慮
| 観点 |
対策状況 |
詳細 |
| 入力検証 |
該当なし |
設定ファイルのため外部入力を受け付けない |
| 認証/認可 |
該当なし |
アクセス制御の実装なし |
| 機密データ |
なし |
秘密情報は含まれない。環境変数 UV_LINK_MODE のみ設定 |
| コンテナセキュリティ |
あり |
Dockerfile 側で非 root ユーザー(vscode, UID 1000)を作成・使用。remoteUser: "root" はコメントアウトされており root 接続は無効 |
| ビルドコンテキスト |
注意 |
build.context が ..(リポジトリルート)のため、.dockerignore がない場合にリポジトリ全体がビルドコンテキストとして送信される |
技術的負債・既知の問題
| 種別 |
内容 |
影響範囲 |
優先度 |
| 非推奨 |
docker-compose.yaml で version: '3' を使用しているが、Docker Compose V2 では非推奨(無視される) |
docker-compose.yaml |
低 |
| 設計 |
postCreateCommand で libs/langchain_v1 を対象に uv sync を実行するが、Dockerfile 内でも同ディレクトリで uv sync を実行しており処理が重複する可能性がある(ボリュームマウントにより意図的と推測されるが、コメントなし) |
devcontainer.json |
低 |
| 設計 |
ネットワーク langchain-network を定義しているが、サービスが 1 つのみのため現時点では実用的な意味がない |
docker-compose.yaml |
低 |
| パス不整合 |
Dockerfile のパスは libs/langchain/dev.Dockerfile だが、Dockerfile 内の WORKDIR は libs/langchain_v1 を参照しており、ディレクトリ名 langchain と langchain_v1 に不一致の可能性がある |
docker-compose.yaml, devcontainer.json |
中 |
拡張ポイント
| 変更内容 |
修正対象ファイル |
手順・注意点 |
| 新サービスの追加(DB、Redis 等) |
docker-compose.yaml |
1. services に新サービス定義を追加 2. langchain-network に接続 3. 必要に応じて devcontainer.json の forwardPorts を有効化 |
| VS Code 拡張の追加 |
devcontainer.json |
customizations.vscode.extensions 配列に拡張機能 ID を追記 |
| Dev Container Feature の追加 |
devcontainer.json |
features オブジェクトに新エントリを追加(例: Node.js、Docker-in-Docker 等) |
| ポートフォワーディングの有効化 |
devcontainer.json |
コメントアウトされている forwardPorts を有効化し、ポート番号を指定 |
| 環境変数の追加 |
devcontainer.json |
containerEnv オブジェクトに新しいキーバリューを追加 |
注意点・特記事項
- 設計上の制約: Docker Compose ベースの構成のため、devcontainer.json の
image や build プロパティとの併用は不可。service プロパティで指定するサービス名は docker-compose.yaml 内のサービス定義と一致させる必要がある
- パフォーマンス: named volume を使用しているため、ホストファイルシステムとの直接同期は行われない。コンテナ外でのファイル変更はコンテナ内に反映されない点に注意。ビルドコンテキストがリポジトリルート全体のため、リポジトリサイズが大きい場合はビルド時間に影響する
- 互換性:
docker-compose.yaml の version: '3' は Docker Compose V2 では非推奨だが動作に影響なし。将来的に削除推奨
配下ドキュメント
サブモジュール
サブモジュールは存在しない。
ファイル