all-deploy
プロジェクトを検出、監査し、適切なホストにデプロイします。確認済みのプレビュー → 本番環境へのフローを提供します。独自の価値は 検出 → 監査 → 適切なCLIへのルーティング であり、CLIをラップすることではありません。
設定(デフォルトの動作を変更するには以下の行を編集してください)
CONFIRMATION_MODE: ask_at_start
# ask_at_start (デフォルト): 各クラウドデプロイの開始時に、フルオートかステップバイステップかをユーザーに尋ねます。
# full_auto: 質問をスキップします。監査 → プレビュー → 本番環境へのプロモーションを、本番環境移行前に5秒間のESCキャンセルウィンドウを設けて実行します。
# always_ask: 質問をスキップします。本番環境移行前に明示的な「はい」を要求します。
VISUAL_VERIFY: false # true → chrome-bridge-automation によるスクリーンショットプレビュー(フロントエンドのみ)
ALLOW_DIRTY_TREE: false # true → 「HEADがクリーンである」という監査チェックをスキップします
デフォルトの ask_at_start は、単独の作者とコミュニティユーザーの両方に適しています。モードの選択は実行時に委ねられます。full_auto または always_ask に固定するのは、インタラクティブに質問に答えられない自動化でこのスキルをラップする場合にのみ有用です。
ハードルール(絶対に違反しないでください。これらが安全性の契約です)
- 監査を決して迂回または緩和しないでください。 監査は、
full_autoモードにおいて、ユーザーの意図とライブインフラストラクチャの間にある唯一のゲートです。チェックが実行できない場合、それがスキップする理由ではなく、ブロックそのものです。 - 2xx/3xx のヘルスチェックが成功したプレビューより前に、本番環境にデプロイしないでください。 プレビュー → サマリー → 本番環境。同じセッションでグリーンプレビューなしに本番環境はありません。 (一部の静的ターゲットにはプレビュー環境がありません — GitHub Pages、ブラウザアップロードなど。その場合、グリーンアーティファクトは、正確な公開ディレクトリに対してローカルで
python3 -m http.serverを実行し、同じ方法でヘルスチェックしたものです。ゲートは引き続き必須であり、提供される場所のみが異なります。) - シークレットを決してコミット、印刷、またはログに記録しないでください。 追跡されたファイルにシークレットが見つかった場合は、停止し、ユーザーが承認した個別のステップとして、削除と履歴の書き換えをガイドします。シークレットの値は、サマリー、ログ、またはコミットメッセージに決して表示されません。
- サードパーティのCLIを自動インストールまたは自動認証しないでください。
!プレフィックスを付けて(例:! vercel login、! railway login)、ユーザーにコマンドを渡します。 - ターゲットCLIを、フラグを隠すカスタムスクリプトでラップしないでください。 リファレンスファイルは、ユーザーが読んで確認できる実際のコマンドを文書化します。
- 差分を最初に表示せずに、監査を通過させるためにコードを変更しないでください。
.gitignore、.env.example、Dockerfileのスキャフォールディング、ポートバインディングの修正 — すべて表示され、適用前に承認されます。 ALLOW_DIRTY_TREE: trueが設定されていない限り、ダーティなワーキングツリーからデプロイしないでください。 コミットされていない変更はロールバックを複雑にします。- 「待って」を尊重します。 プレビューと本番環境の間で、ためらいを示すと思われるユーザーの発言(待って/待機/停止/まだ/中止)があれば、本番環境のステップをクリーンに中止します。
2つのモード
ユーザーの表現から事前に決定します:
- クラウドデプロイ(デフォルト)— 以下のフェーズ0から6まで。トリガー:「デプロイ」、「公開」、「本番にプッシュ」、「オンラインにする」、「/all-deploy」。
- ローカル実行 — フェーズ0、1、2、その後ローカル実行ステップ。トリガー:「ローカルで実行」、「corre esto localmente」、「/all-deploy local」、「ただ実行する」、または
--local。
プロジェクトクラス(クラウドデプロイ内部で決定され、3番目のモードではありません)
クラウドデプロイは2つの形状をカバーし、クラスは検出されます — 決して尋ねられません:
app(デフォルト)— ランタイム、起動コマンド、ポートを持つサービス。static— Webサイト:ホストがCDNにコピーするファイルのフォルダ。サーバーなし、ポートなし、ランタイムなし。以下のフェーズ0.0で分類されます。フェーズ0、2、3.2、4、4.5、5、6が変更されます。調整の完全なセットについてはreferences/static-sites.mdを参照してください。
ローカル実行 モードでは、スコープ付き監査 を実行します — 追跡されたファイル内のシークレット、起動コマンドの存在、適切なポートバインディングのみ。以下をスキップします:git-remote、clean HEAD、npm audit/pip-audit、.env.example の完全性、環境変数の配信(配信先のリモートがないため)。その後、検出された起動コマンド(npm run dev / uvicorn main:app --reload --host 0.0.0.0 --port $PORT / docker compose up など)をフォアグラウンドで実行し、Monitor を介して出力をストリームします。ユーザーがローカルサーバーも公開するように要求した場合は、references/targets/cloudflared-tunnel.md にチェーンします。このファイルの他のすべてはクラウドデプロイに関するものです。
クラウドデプロイワークフロー
モード選択(ask_at_start モードではフェーズ0の前に実行)
この実行の有効な CONFIRMATION_MODE を解決します:
-
ユーザーの呼び出しに明示的なモードマーカーが含まれている場合、それを採用し、質問をスキップします:
full_autoトリガー:「auto」、「full auto」、「auto deploy」、「deploy auto」、「/all-deploy auto」、「yolo」。always_askトリガー:「step」、「step by step」、「one at a time」、「confirm each step」、「paso a paso」、「/all-deploy step」。
-
そうでなく、上記の設定ブロックで
CONFIRMATION_MODEがfull_autoまたはalways_askに固定されている場合、それを使用し、質問をスキップします。 -
それ以外の場合(
ask_at_start、デフォルト)、フェーズ0が実行される前に、ユーザーに一度尋ねます:「始める前に — デプロイをどのように実行しますか?
1. フルオート — 監査 → プレビュー → 本番環境へのプロモーションを順次実行します。本番環境は5秒間のESCキャンセルウィンドウ後に実行されます。 2. ステップバイステップ — 監査、プレビュー、本番環境の各段階であなたのOKを待ちます。
'auto' または 'step' で返信してください。」
選択されたモードはこの実行のみに適用されます。将来の呼び出しでは再度尋ねられます(ユーザーがトリガーフレーズを介して明示的にオプトインするか、設定ブロックが固定されていない限り)。
どの時点でも「待って」/「停止」/「中止」は、両方のモードで本番環境ステップを中止します(ハードルール8)。違いは、本番環境コマンドが実行される前に、5秒間のESCキャンセルウィンドウ(full_auto)が得られるか、明示的な「はい」が必要な一時停止(always_ask)が得られるかです。
フェーズ0.0 — プロジェクトクラス(最初に実行され、前提条件の前に)
ルートまたは dist/、_site/、public/、build/、out/、site/ にHTMLファイルがあり、かつ ルートに package.json、pyproject.toml、requirements.txt、Pipfile、Dockerfile、docker-compose.yml、Procfile、go.mod、Gemfile のいずれも存在しない場合、PROJECT_CLASS: static に設定します。それ以外の場合は PROJECT_CLASS: app です。
マニフェストテストは、index.html も持つVite/Next/Astroリポジトリをアプリケーションパイプラインに維持するものです。static の場合は、今すぐ references/static-sites.md を読み、そのフェーズテーブルが以下のすべてを支配します。
これは意図的にフェーズ0の前に実行されます。前提条件を最初にチェックすることで、HTMLのフォルダが、決して必要としないgitリモートがないために弾かれるのを防ぎます。
フェーズ0 — 前提条件(ターゲットに依存しない)
順番にチェックします。各失敗は、ユーザーに対する ! コマンドで停止します。
- Gitリポジトリ。
git rev-parse --is-inside-work-treeを実行します。リポジトリでない場合は、モードがrun locally(gitを必要としない)またはPROJECT_CLASS: staticでない限り停止します — 静的サイトはプレーンなフォルダからデプロイできます。リポジトリがないことを伝えて続行します。決定はフェーズ3.2で行われます。促されずにgit initを実行しないでください。 - Gitリモート(クラウドデプロイのみ)。
git remote -vを実行します。リモートが設定されていない場合は、ターゲットがdocker-vps(リモートなしでデプロイ可能)である場合、またはPROJECT_CLASS: staticで、ターゲットがGitHub PagesやRenderでない場合を除き、停止します — Cloudflare Pagesの直接アップロードとNetlify Dropはリポジトリをまったく必要としません。この2番目の条件はフェーズ3の後に再評価されます。 - 言語境界。 v1はNodeとPythonを検出します。プライマリ言語がGo、Rust、Ruby、Elixir、Bun、Denoの場合は、以下で終了します:「v1はNode/Pythonエコシステムのみを検出します。ターゲットCLIを直接実行してください(
vercel、railway、flyctl、docker)。この言語のサポートはv2で計画されています。」PROJECT_CLASS: staticの場合は適用されません — HTML/CSS/JSは、ビルドステップの有無にかかわらず、常にスコープ内です。
ターゲットCLIの認証は、ターゲットが選択された後のフェーズ3.5(以下)でチェックされます。
フェーズ0.5 — 権限プロンプトのシード(初回実行のみ)
ユーザーに伝えます:「このプロジェクトで一度 fewer-permission-prompts スキルを実行して、デプロイ許可リストで .claude/settings.json をシードしてください。そうしないと、すべてのステップでプロンプトが表示されます。」 ポインターのみ。ここでユーザーの設定を編集しないでください。
フェーズ1 — 検出
references/project-types.md(スキル相対パス — Claudeはインストールされたスキルディレクトリに対して解決します)を読み、完全なフィンガープリントテーブルを確認します。以下を検査します:
- パッケージマネージャーとマニフェスト:
package.json、pnpm-lock.yaml、yarn.lock、package-lock.json、bun.lockb、pyproject.toml、requirements.txt、poetry.lock、uv.lock、Pipfile。 - フレームワークシグナル:
next.config.*、vite.config.*、astro.config.*、remix.config.*、nuxt.config.*、svelte.config.*、app/vspages/、main.py内のFastAPI()、Flask()、app = FastAPI()、server.py、ルートのindex.html。 - ランタイムバージョン:
.nvmrc、.node-version、package.json内のengines、.python-version、pyproject.toml内のpython_version。長期実行ターゲットが選択され、ランタイムが固定されていない場合、監査はブロックします。 - DB / ステートフルな依存関係:
sqlalchemy、psycopg、prisma、mongoose、redis、ioredis、sqlmodelのインポート。見つかった場合、「このサービスはデータベースを必要とします — 本番環境の前にプロビジョニングしてください」 を、RailwayリファレンスのRailwayアドオンコマンドとともに表示します。 - ポートと起動コマンド:
uvicorn、gunicorn、next start、node server.js、python -m ...。0.0.0.0バインディングと$PORTの使用を確認します。ローカルホストのみのバインディングは、長期実行ターゲットではブロックされます。 - モノレポ:
pnpm-workspace.yaml、turbo.json、nx.json、lerna.json、またはルートのpackage.json内の"workspaces"→ パッケージを列挙し、どれをデプロイするか尋ねます。推測しないでください。 - ライブラリ / CLI(Webデプロイではない): Nodeシグナル —
package.jsonにbin:フィールドがある または(files:配列が存在し、scripts.startがなく、express、fastify、hono、next、koaなどのHTTPフレームワークのインポートがない)。Pythonシグナル —pyproject.tomlに[project.scripts]/console_scriptsがあり、宣言されたスクリプトやインポートにuvicorn/gunicorn/flask/fastapiがない。main:単独ではライブラリシグナルとして使用しないでください — ほとんどすべてのNode Webアプリもmain:を設定します。クリーンに終了します:「これはパッケージのように見えます —/all-deployはWebサービスを対象としており、npm/PyPIへの公開は対象外です。」 - 既存のデプロイ設定:
vercel.json、railway.toml、fly.toml、Dockerfile、render.yaml— 尊重し、監査し、明示的な要求なしに再生成しないでください。 - 既存のプロジェクトリンケージ:
.vercel/project.json→ そのVercelプロジェクトIDを再利用します。projectフィールドを持つrailway.toml→ 再利用します。再デプロイは一般的なケースです。新しいプロジェクトでは明示的な「新規開始」が必要です。
PROJECT_CLASS: static の場合、 フレームワーク/ランタイム/ポート/DB/モノレポのフィンガープリンティングをスキップします。3つのことだけを検出します:公開ディレクトリ(index.html を含むフォルダ — .、dist/、_site/、public/、build/、out/、site/)、ビルドステップが存在するかどうか、gitリポジトリが存在するかどうか。公開ディレクトリテーブルは references/static-sites.md にあります。間違えると、ライブサイトが / で404になる最も一般的な原因です。
出力:分類ブロックと、それぞれの一行の根拠を持つ候補ターゲットのランク付けリスト。完全なターゲットランキングのルーブリックについては references/project-types.md を参照してください。
フェーズ2 — 監査(厳格、ブロッキング)
このスキルにバンドルされている監査スクリプト(scripts/audit.py)を現在のプロジェクトディレクトリに対して実行します。Claudeはロード時にスキルパスを解決します。呼び出しは次のようになります:
python3 <SKILL_DIR>/scripts/audit.py <project-path>
PROJECT_CLASS: static の場合:
python3 <SKILL_DIR>/scripts/audit.py <project-path> --profile static --publish-dir <dir> [--target <name>]
これにより、依存関係ツリー、起動コマンド、ポート、またはgitリモートを前提とするすべてのチェックがスキップされます(これらはプレーンなHTMLのフォルダで誤った重大な問題を出力します)。代わりに scripts/static_check.py を実行します。選択したターゲットが GitHub Pages の場合に --target github-pages を渡します。これは、リモートを本当に必要とする唯一の静的ターゲットであり、.nojekyll とルート相対パスが重要となる唯一のターゲットです。チェックリストは references/static-sites.md にあります。
<SKILL_DIR> はスキルがインストールされている場所(通常は ~/.claude/skills/all-deploy/)で、<project-path> は通常 . です。スクリプトは references/audit-checklist.md のすべての項目をチェックします:追跡されたファイル内のシークレット、.gitignore の適用範囲、ロックファイルの健全性、.env.example の完全性(scripts/env_extract.py 経由)、ビルド/起動スクリプトの存在、ポートバインディング、クリーンなHEAD、git-remoteの一致、npm audit --production --audit-level=high または pip-audit。
障害があれば停止します。各問題について、修正を差分として表示し(該当する場合)、適用前にユーザーのOKを待ちます。自動モードは監査をバイパスしません。
Git履歴のシークレットスキャン はユーザーが実行するものであり、自動ではありません。監査出力で、以下を個別のステップとして表示します:trufflehog git file://. または git log -p -S 'sk_' -S 'AKIA' -S 'ghp_'。このスキルはgit履歴を決して書き換えません。
フェーズ3 — ターゲット選択
フェーズ1からのランク付けされた候補を、それぞれの一行の根拠とともに提示します。ユーザーが選択するか、「ok」でトップピックを受け入れます。この時点でのみターゲットリファレンスをロードします:
references/targets/vercel.md— Next、Vite、Astro、Remix、Nuxt、SvelteKit、静的references/targets/railway.md— FastAPI、Flask、Express、Pythonワーカー、MCP HTTP、Claude Agent SDKreferences/targets/docker-vps.md— 任意のDockerfile、ステートフルワークロード、セルフホストreferences/targets/cloudflared-tunnel.md— ローカル開発の公開、クイックデモreferences/targets/cloudflare-pages.md— 静的サイト。誰かが支払いを受けている場合のデフォルトの選択肢references/targets/netlify.md— フォームを必要とする静的サイト、ドラッグアンドドロップreferences/targets/github-pages.md— すでにGitHub上にあるポートフォリオ、ドキュメント、デモreferences/targets/render.md— 静的サイト、低トラフィック
PROJECT_CLASS: static の場合、候補を提示する 前に references/static-hosting.md を読みます。そこには比較、無料枠の制限、商用利用マトリックス、そして実際にランキングを決定する質問が記載されています:「このページに関連して誰かが支払いを受けていますか?」 「はい」はVercel Hobby(「サイトを作成、更新、またはホストするための支払いの受け取り」 はフェアユース条項に基づく商用利用)と、通常はGitHub Pagesも除外します。
...
[翻訳のため省略]