mcpField
D
devcontainers

devcontainers

github.com/digitalocean-labs開発3883 回インストール4 日前に更新
リポジトリ

devcontainers について

DigitalOcean App Platformアプリ向けにローカル開発コンテナーを設定するスキルです。アプリのサービスをComposeプロファイルに対応付ける手順を提供し、IDE利用とコマンドラインのみの作業に対応します。

主な機能

  1. 01新規プロジェクト用devcontainerの複製と設定
  2. 02App Platformのサービスをローカルプロファイルに対応付け
  3. 037種類のバックエンドサービス用プロファイル
  4. 04ローカル環境変数マッピングの作成
  5. 05サービス接続テストの実行

活用シーン

  1. 01新しいアプリ向けにデータベース付きローカル環境を準備
  2. 02既存のApp Platformアプリをローカルで実行
  3. 03IDEを使わずにコンテナーサービスをテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/digitalocean-labs/do-app-platform-skills --skill devcontainers

インストール後、Claude Code で/devcontainersを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
reference/
agent-verification.md
cli-workflow.md
language-configurations.md
s3-storage-patterns.md
service-templates.md

詳細

Dev Containers スキル

DigitalOcean App Platform アプリケーション向けに、本番環境と同等のローカル開発環境をセットアップします。

主な価値:7分のデプロイサイクルではなく、30秒のフィードバックループを実現します。

すぐに判断する

What do you need?
├── New project setup → Workflow 1
├── Existing App Platform app → Workflow 2
└── CLI-only testing (no IDE) → See cli-workflow.md

クイックスタート:クローンしてコピー

# Clone the reference devcontainer
git clone --depth 1 https://github.com/bikramkgupta/do-app-devcontainer.git /tmp/devcontainer-ref

# Copy to your project
cp -r /tmp/devcontainer-ref/.devcontainer /path/to/your-project/

# Clean up
rm -rf /tmp/devcontainer-ref

次に、.devcontainer/devcontainer.json の COMPOSE_PROFILES をカスタマイズします:

"containerEnv": {
  "COMPOSE_PROFILES": "app,postgres,minio"
}

利用可能なプロファイル

プロファイルサービス用途
postgresPostgreSQL 18SQL データベース
mysqlMySQL 8MySQL データベース
mongoMongoDB 8ドキュメントデータベース
valkeyValkey 8Redis 互換キャッシュ
kafkaConfluent Kafka 7.7メッセージストリーミング
minioRustFSS3 互換ストレージ
opensearchOpenSearch 3.0全文検索

接続文字列

サービス接続文字列
PostgreSQLpostgresql://postgres:password@postgres:5432/app
MySQLmysql://mysql:mysql@mysql:3306/app
MongoDBmongodb://mongodb:mongodb@mongo:27017/app?authSource=admin
Valkeyredis://valkey:6379
Kafkakafka:9092
RustFShttp://minio:9000(認証情報:rustfsadmin/rustfsadmin)
OpenSearchhttp://opensearch:9200

コンテナ内:サービス名を使用します(例:postgres:5432) ホストから:docker compose port を使ってマッピングされたポートを確認します


ワークフロー 1:新規プロジェクトのセットアップ

トリガー:「[言語] アプリを [サービス] と一緒に開発しています」

  1. 参照リポジトリから .devcontainer/ をコピーします(クイックスタートを参照)
  2. 必要なサービスに基づいて COMPOSE_PROFILES を設定します
  3. 接続文字列を含む env-devcontainer.example を作成します
  4. VS Code/Cursor で開き、「コンテナーで再度開く」を選択します

devcontainer.json テンプレート:

{
  "name": "App Platform Dev Environment",
  "dockerComposeFile": "docker-compose.yml",
  "service": "app",
  "workspaceFolder": "/workspaces/app",
  "features": {
    "ghcr.io/devcontainers/features/github-cli:1": {},
    "ghcr.io/devcontainers/features/node:1": {},
    "ghcr.io/devcontainers/features/python:1": {},
    "ghcr.io/devcontainers-extra/features/uv:1": {},
    "ghcr.io/devcontainers-extra/features/digitalocean-cli:1": {},
    "ghcr.io/anthropics/devcontainer-features/claude-code:1": {},
    "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}
  },
  "containerEnv": {
    "COMPOSE_PROFILES": "app,postgres"
  },
  "initializeCommand": "cd \"${localWorkspaceFolder}\" && bash .devcontainer/init.sh",
  "postCreateCommand": ".devcontainer/post-create.sh",
  "remoteUser": "vscode",
  "shutdownAction": "stopCompose"
}

ワークフロー 2:既存の App Platform アプリへの追加

トリガー:「App Platform アプリがあるので、ローカルで実行できるようにしてください」

  1. .do/app.yaml を読み取り、サービスを検出します
  2. App Platform からローカルコンテナーへマッピングします:
App Platformローカルプロファイル
databases[].engine: PGpostgres
databases[].engine: MYSQLmysql
databases[].engine: MONGODBmongo
databases[].engine: REDISvalkey
Spaces アタッチメントminio
  1. 環境変数のマッピングを生成します:
# Production (App Platform injects)
# DATABASE_URL=${db.DATABASE_URL}

# Local Development
DATABASE_URL=postgresql://postgres:password@postgres:5432/app

環境テンプレート

# env-devcontainer.example

# Database
DATABASE_URL=postgresql://postgres:password@postgres:5432/app

# Cache
REDIS_URL=redis://valkey:6379

# S3-compatible storage (RustFS)
SPACES_ENDPOINT=http://minio:9000
SPACES_KEY_ID=rustfsadmin
SPACES_SECRET_KEY=rustfsadmin
SPACES_BUCKET_NAME=my-app-local
SPACES_FORCE_PATH_STYLE=true

参照リポジトリで利用できるもの

.devcontainer/
├── devcontainer.json           # IDE configuration
├── docker-compose.yml          # All 7 backing services
├── init.sh                     # Git worktree support
├── post-create.sh              # Post-creation setup
├── .env                        # Generated (gitignored)
└── tests/                      # Service connectivity tests
    ├── agent-test.sh           # E2E validation
    ├── run-all-tests.sh        # Master test runner
    └── test-*.sh               # Individual service tests

サービスのテスト

# Test all running services
.devcontainer/tests/run-all-tests.sh --all

# Test specific services
.devcontainer/tests/run-all-tests.sh postgres minio

# List available tests
.devcontainer/tests/run-all-tests.sh --list

ヘルスチェックの所要時間

サービス起動完了までの時間
PostgreSQL、MySQL、MongoDB、Valkey、RustFS<10s
Kafka60s+(KRaft の初期化)
OpenSearch30-60s(JVM のウォームアップ)

トラブルシューティング

問題対処方法
ポートの競合設定では動的ポート(127.0.0.1:0:PORT)を使用するため、競合しないはずです
Git コマンドが失敗するコンテナーを再ビルドして init.sh を再実行します
Kafka の起動が遅い60s 以上待ち、docker compose logs kafka を確認します
OpenSearch の OOMヒープを増やします:OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
権限が拒否される次を実行します:sudo chown -R vscode:vscode /home/vscode

参照ファイル

ファイル内容
service-templates.mddocker-compose のサービスブロック全 7 種
s3-storage-patterns.mdRustFS のセットアップ、ローカルと本番環境の違い
agent-verification.mdAI エージェント向け CLI テストワークフロー
cli-workflow.mdポートフォワーディング、環境変数の読み込み、起動
language-configurations.mdNode、Python、Go のホットリロード設定

制限事項

このスキルでは、以下には対応していません:

  • クラウドへのデプロイ → deployment スキルを使用します
  • 本番アプリの仕様 → designer スキルを使用します
  • データベースのマイグレーション → 任意のマイグレーションツールをご用意ください
  • DigitalOcean Functions → コンテナー化できません
  • SSL/TLS → ローカルでは HTTP を使用し、本番環境では SSL が自動的に処理されます

他のスキルとの連携

  • → designer:ローカルでのテスト後に、本番アプリの仕様を設計します
  • → deployment:GitHub Actions の CI/CD を設定します
  • → postgres:マネージドデータベースの権限を設定します
  • → troubleshooting:本番環境の問題をデバッグします

外部参照

コメント