mcpField
S
setup-devcontainer

setup-devcontainer

github.com/fellowship-dev開発3173 回インストール2 週間前に更新
リポジトリ

setup-devcontainer について

リポジトリを解析して devcontainer 設定を生成するスキルです。Gitpod/Ona の設定やテスト環境の検証にも対応し、開発環境の新規導入、移行、確認に使えます。

主な機能

  1. 01フレームワーク、DB、旧設定の検出
  2. 02Dockerfile と devcontainer.json の生成
  3. 03Ona 自動化設定の任意生成
  4. 04Gitpod プロジェクトとシークレットの設定
  5. 05テスト環境の作成と検証

活用シーン

  1. 01新しいリポジトリ向けの開発コンテナ作成
  2. 02旧 .gitpod.yml 設定の移行
  3. 03スタック変更後の設定再生成
  4. 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 → Rails
  • package.json に next が含まれる → Next.js
  • package.json に strapi が含まれる → Strapi
  • manage.py / settings.py → Django
  • composer.json に laravel が含まれる → Laravel
  • composer.json に symfony が含まれる → Symfony
  • package.json に express が含まれる → Express
  • package.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 ユーザーへの確認

検出したスタックを確認してから、次の項目を質問します。

  1. オプションのタスク:Fly.io CLI、S3 からのデータベースのバックアップ/復元
  2. 追加の VS Code 拡張機能
  3. カスタムポートの上書き
  4. 既存の .devcontainer/ または .ona/ ファイルを保持しますか?
1.3 ファイルの生成
  1. .devcontainer/Dockerfile — 汎用ベースと、検出した DB パッケージ
  2. .devcontainer/devcontainer.json — Features、拡張機能、ポート
  3. .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 へのアクセス(ポッド内の gh CLI 用)
  • プロジェクト固有のシークレット(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-a1145383a73c2 vCPU / 8 GiB
標準0198bec9-2af2-704f-a4f9-927101d8b8444 vCPU / 16 GiB
大0198bec9-2af2-7049-a4db-caaca7016e9f8 vCPU / 32 GiB

主なルール

  • シークレットをハードコードしないでください — トークンはプロジェクトのシークレットに保存します
  • Claude Code のインストール:必ず curl -fsSL https://claude.ai/install.sh | sh を使用してください(npm は使用しないでください)
  • ユーザーが別途指定しない限り、標準クラスをデフォルトにしてください
  • --keep-open が指定されていない限り、テスト環境は必ず終了してください
  • SSH の形式:gitpod environment ssh <env-id> -- "<command>"
  • このスキルの対象はプロジェクトのセットアップであり、オーケストレーションではありません — ディスパッチとスケジューリングは別途処理されます

コメント