devcontainers について
DigitalOcean App Platformアプリ向けにローカル開発コンテナーを設定するスキルです。アプリのサービスをComposeプロファイルに対応付ける手順を提供し、IDE利用とコマンドラインのみの作業に対応します。
主な機能
- 01新規プロジェクト用devcontainerの複製と設定
- 02App Platformのサービスをローカルプロファイルに対応付け
- 037種類のバックエンドサービス用プロファイル
- 04ローカル環境変数マッピングの作成
- 05サービス接続テストの実行
活用シーン
- 01新しいアプリ向けにデータベース付きローカル環境を準備
- 02既存のApp Platformアプリをローカルで実行
- 03IDEを使わずにコンテナーサービスをテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ digitalocean-labs/ do-app-platform-skills --skill devcontainersインストール後、Claude Code で/devcontainersを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreference/agent-verification.mdcli-workflow.mdlanguage-configurations.mds3-storage-patterns.mdservice-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"
}
利用可能なプロファイル
| プロファイル | サービス | 用途 |
|---|---|---|
postgres | PostgreSQL 18 | SQL データベース |
mysql | MySQL 8 | MySQL データベース |
mongo | MongoDB 8 | ドキュメントデータベース |
valkey | Valkey 8 | Redis 互換キャッシュ |
kafka | Confluent Kafka 7.7 | メッセージストリーミング |
minio | RustFS | S3 互換ストレージ |
opensearch | OpenSearch 3.0 | 全文検索 |
接続文字列
| サービス | 接続文字列 |
|---|---|
| PostgreSQL | postgresql://postgres:password@postgres:5432/app |
| MySQL | mysql://mysql:mysql@mysql:3306/app |
| MongoDB | mongodb://mongodb:mongodb@mongo:27017/app?authSource=admin |
| Valkey | redis://valkey:6379 |
| Kafka | kafka:9092 |
| RustFS | http://minio:9000(認証情報:rustfsadmin/rustfsadmin) |
| OpenSearch | http://opensearch:9200 |
コンテナ内:サービス名を使用します(例:postgres:5432)
ホストから:docker compose port を使ってマッピングされたポートを確認します
ワークフロー 1:新規プロジェクトのセットアップ
トリガー:「[言語] アプリを [サービス] と一緒に開発しています」
- 参照リポジトリから
.devcontainer/をコピーします(クイックスタートを参照) - 必要なサービスに基づいて
COMPOSE_PROFILESを設定します - 接続文字列を含む
env-devcontainer.exampleを作成します - 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 アプリがあるので、ローカルで実行できるようにしてください」
.do/app.yamlを読み取り、サービスを検出します- App Platform からローカルコンテナーへマッピングします:
| App Platform | ローカルプロファイル |
|---|---|
databases[].engine: PG | postgres |
databases[].engine: MYSQL | mysql |
databases[].engine: MONGODB | mongo |
databases[].engine: REDIS | valkey |
| Spaces アタッチメント | minio |
- 環境変数のマッピングを生成します:
# 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 |
| Kafka | 60s+(KRaft の初期化) |
| OpenSearch | 30-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.md | docker-compose のサービスブロック全 7 種 |
| s3-storage-patterns.md | RustFS のセットアップ、ローカルと本番環境の違い |
| agent-verification.md | AI エージェント向け CLI テストワークフロー |
| cli-workflow.md | ポートフォワーディング、環境変数の読み込み、起動 |
| language-configurations.md | Node、Python、Go のホットリロード設定 |
制限事項
このスキルでは、以下には対応していません:
- クラウドへのデプロイ → deployment スキルを使用します
- 本番アプリの仕様 → designer スキルを使用します
- データベースのマイグレーション → 任意のマイグレーションツールをご用意ください
- DigitalOcean Functions → コンテナー化できません
- SSL/TLS → ローカルでは HTTP を使用し、本番環境では SSL が自動的に処理されます
他のスキルとの連携
- → designer:ローカルでのテスト後に、本番アプリの仕様を設計します
- → deployment:GitHub Actions の CI/CD を設定します
- → postgres:マネージドデータベースの権限を設定します
- → troubleshooting:本番環境の問題をデバッグします
外部参照
コメント
Markdown 対応