setup-devcontainer について
リポジトリを解析して devcontainer 設定を生成するスキルです。Gitpod/Ona の設定やテスト環境の検証にも対応し、開発環境の新規導入、移行、確認に使えます。
主な機能
- 01フレームワーク、DB、旧設定の検出
- 02Dockerfile と devcontainer.json の生成
- 03Ona 自動化設定の任意生成
- 04Gitpod プロジェクトとシークレットの設定
- 05テスト環境の作成と検証
活用シーン
- 01新しいリポジトリ向けの開発コンテナ作成
- 02旧 .gitpod.yml 設定の移行
- 03スタック変更後の設定再生成
- 04開発コンテナとサービスの動作確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fellowship-dev/ dogfooded-skills --skill setup-devcontainerインストール後、Claude Code で/setup-devcontainerを入力して読み込まれたか確認します。
詳細
Devcontainer のセットアップ
任意のリポジトリ向けに devcontainer の設定を生成します。オプションで Gitpod/Ona プロジェクトを作成し、テスト環境で検証できます。
使用するタイミング
- リポジトリで初めて devcontainer をセットアップするとき
- 旧式の
.gitpod.ymlから移行するとき - スタックに大きな変更を加えた後に設定を再生成するとき
- 既存の devcontainer セットアップが機能することを検証するとき
フェーズ 1:設定の生成
1.1 フレームワークの検出
リポジトリを直接スキャンします(前提ファイルは不要です)。
Gemfile/config/routes.rb→ Railspackage.jsonにnextが含まれる → Next.jspackage.jsonにstrapiが含まれる → Strapimanage.py/settings.py→ Djangocomposer.jsonにlaravelが含まれる → Laravelcomposer.jsonにsymfonyが含まれる → Symfonypackage.jsonにexpressが含まれる → Expresspackage.jsonに@nestjsが含まれる → NestJS- サブディレクトリに複数の
package.jsonがある → モノレポ
次の項目も検出します。
- データベース:PostgreSQL、MySQL、MongoDB、SQLite(設定ファイル、Gemfile、package.json から)
- デフォルトブランチ:
git symbolic-ref refs/remotes/origin/HEADを実行するか、main/masterを確認 - CLAUDE.md:存在しない場合は
setup-harnessの実行を提案しますが、処理はブロックしません - Speckit:
.specify/ディレクトリが存在する場合 → 利用可能な speckit コマンドを知らせます - 旧式の設定:
.gitpod.ymlが存在する場合 → 移行の参考としてポート、タスク、拡張機能を抽出します
1.2 ユーザーへの確認
検出したスタックを確認してから、次の項目を質問します。
- オプションのタスク:Fly.io CLI、S3 からのデータベースのバックアップ/復元
- 追加の VS Code 拡張機能
- カスタムポートの上書き
- 既存の
.devcontainer/または.ona/ファイルを保持しますか?
1.3 ファイルの生成
.devcontainer/Dockerfile— 汎用ベースと、検出した DB パッケージ.devcontainer/devcontainer.json— Features、拡張機能、ポート.ona/automations.yaml(Gitpod/Ona を使用する場合) — サービスとタスク:- 標準タスク:
setup_node、setup_git_config、setup_gnupg、setup_ssh、setup_aws install_claude_code—curl -fsSL https://claude.ai/install.sh | sh(常に含めます)- フレームワーク固有のサービスと依存関係のインストールタスク
- ユーザーの選択に基づくオプションのタスク
- 標準タスク:
1.4 検証
- プレースホルダー値(
[dbname]、[backend-dir]など)が残っていない - ポートが検出したフレームワークに合っている
- 拡張機能が検出したフレームワークに合っている
- 必要な場合、DB サービスが設定されている
フェーズ 2:Gitpod/Ona プロジェクトのセットアップ(オプション)
Gitpod/Ona を使用しない場合は、このフェーズをスキップします。
2.1 前提条件
gitpod version && gitpod whoami
認証されていない場合、ユーザーは gitpod login --token "<PAT>" --non-interactive を実行する必要があります。
2.2 既存のプロジェクトを確認
gitpod project list --timeout 30s
出力からリポジトリ URL を検索します。プロジェクトが存在する場合は、2.4 に進みます。
2.3 プロジェクトを作成
REPO_URL=$(git remote get-url origin)
gitpod project create "$REPO_URL" --timeout 30s
出力からプロジェクト ID を取得します。
2.4 シークレットの設定
Gitpod には 2 種類のシークレットスコープがあります。完全に機能する環境には、両方が必要です。
プロジェクトシークレット(プロジェクト単位、CLI で設定)
既存のシークレットを確認します。
gitpod project secret list <project-id> -o json --timeout 15s
必須のプロジェクトシークレット:
CLAUDE_CODE_OAUTH_TOKEN— Claude Code の認証GH_TOKEN— GitHub API へのアクセス(ポッド内のghCLI 用)- プロジェクト固有のシークレット(
ENV_PASS、AWS_*など)
不足しているものを設定します。
gitpod project secret set <project-id> CLAUDE_CODE_OAUTH_TOKEN "<token>"
gitpod project secret set <project-id> GH_TOKEN "<token>"
トークン値を直接扱わないでください。ユーザーが提供します。
個人用シークレット(ユーザーレベル、ダッシュボードで設定)
アカウントごとに一度設定すると、すべての環境に適用されます。CLI ではなく、ユーザー設定の Web ダッシュボードで設定します。
必須の個人用シークレット:
GITCONFIG—~/.gitconfigを Base64 エンコードしたものGPG_1からGPG_5— Base64 エンコードした GPG キーリングの tar.gz を 5 つに分割したものSSH_PRIVATE_KEY— Base64 エンコードした SSH 秘密鍵SSH_PUBLIC_KEY— Base64 エンコードした SSH 公開鍵SSH_KNOWN_HOSTS— Base64 エンコードした known_hosts
2.5 出力
次の項目を報告します。
- プロジェクト ID
- リポジトリ URL
- プールの命名規則:
{project}-{purpose}-runner-{n} - 設定済みのシークレット
フェーズ 3:テスト環境(オプション)
3.1 テスト環境の作成
gitpod environment create <project-id> \
--name "<project>-setup-test" \
--class-id 0198bec9-2af2-704f-a4f9-927101d8b844 \
--set-as-context --dont-wait
3.2 実行状態になるまでポーリング
10 秒ごとに確認し、タイムアウトは 3 分です。
gitpod environment get <env-id> --timeout 15s
3.3 確認チェックリスト
SSH で接続して、チェックを実行します。
gitpod environment ssh <env-id> -- "<command>"
- Claude Code がインストールされている:
claude --version - Git のユーザー情報が設定されている:
git config --global user.name && git config --global user.email - リポジトリレベルの Git 設定による上書きがない:
git config --local user.nameが空またはエラーを返すこと - デフォルトブランチがクリーンである:
git status --porcelainの出力が空であること - サービスが稼働している:DB が応答すること(
pg_isreadyまたはmysqladmin ping) - アプリサーバーが起動する:フレームワークの起動コマンドが、すぐにクラッシュすることなく実行されること
- Speckit が利用できる:フェーズ 1 で検出された場合は
ls .specify/
3.4 環境の終了
gitpod environment stop <env-id>
gitpod environment delete <env-id>
ユーザーが --keep-open を指定した場合は、環境 ID と SSH コマンドのみを報告します。
環境クラス
| クラス | ID | 仕様 |
|---|---|---|
| 小 | 0198bec9-2af2-7056-b500-a1145383a73c | 2 vCPU / 8 GiB |
| 標準 | 0198bec9-2af2-704f-a4f9-927101d8b844 | 4 vCPU / 16 GiB |
| 大 | 0198bec9-2af2-7049-a4db-caaca7016e9f | 8 vCPU / 32 GiB |
主なルール
- シークレットをハードコードしないでください — トークンはプロジェクトのシークレットに保存します
- Claude Code のインストール:必ず
curl -fsSL https://claude.ai/install.sh | shを使用してください(npm は使用しないでください) - ユーザーが別途指定しない限り、標準クラスをデフォルトにしてください
--keep-openが指定されていない限り、テスト環境は必ず終了してください- SSH の形式:
gitpod environment ssh <env-id> -- "<command>" - このスキルの対象はプロジェクトのセットアップであり、オーケストレーションではありません — ディスパッチとスケジューリングは別途処理されます