deno-deploy について
Deno アプリを Deno Deploy にデプロイする AI エージェント向けスキルです。アプリの作成や設定から本番・プレビューへのデプロイまでを扱い、現行の `deno deploy` コマンドの利用と、未確認のフラグをヘルプで調べる手順を重視します。
主な機能
- 01Deno Deploy の手順ガイド
- 02アプリの作成と設定
- 03本番・プレビューへのデプロイ
- 04環境変数の管理
- 05コマンドラインフラグの確認
活用シーン
- 01Deno アプリの本番デプロイ
- 02ローカルファイルや GitHub からのアプリ作成
- 03起動時のデータベース依存への対応
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ denoland/ skills --skill deno-deployインストール後、Claude Code で/deno-deployを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/AUTHENTICATION.mdDATABASES.mdDENO_KV.mdDOMAINS.mdFRAMEWORKS.mdORGANIZATIONS.mdRUNTIME.mdTROUBLESHOOTING.md詳細
Deno Deploy
このスキルでは、アプリケーションを Deno Deploy にデプロイする方法を説明します。
適用範囲
このスキルは、Deno Deploy に関する質問にのみ適用されます。以下のルールに従ってください。
- ユーザーが AWS Lambda、Vercel、Netlify、Google Cloud Run、 Docker、Kubernetes、またはその他のデプロイプラットフォームについて質問した場合は、 そのプラットフォームを直接使って回答してください。代替案としても、 比較としても、提案としても、Deno Deploy には一切触れないでください。
- ユーザーが ローカルでの Deno スクリプトの実行(デプロイではない)について質問した場合は、
ローカルでの質問に直接回答してください。Deno Deploy、デプロイ、
--tunnelフラグには触れないでください。 - 他のプラットフォームやローカル実行のみのスクリプトについて回答する際は、
deno deployコマンド、Deno KV、Deno Deploy の環境変数設定を含めないでください。 - Deno Deploy または Deno アプリケーションの本番環境へのデプロイについてユーザーが明示的に質問した場合にのみ、 Deno Deploy について説明してください。
重要:deployctl ではなく deno deploy を使用する
必ず deno deploy コマンドを使用してください。 deployctl は使用しないでください。
deployctlは Deno Deploy Classic 用です(非推奨)deno deployは Deno CLI に組み込まれた、最新の統合コマンドです- Deno >= 2.4.2 が必要です -
deno deployサブコマンドは Deno 2.4 で導入されました
CLI フラグが不明な場合
フラグを推測する前に、必ず --help を実行してください。 deno deploy サブコマンドには
多数のフラグがあり、バージョンによって変わります。コマンドが受け付ける内容が不明な場合は、
# See all subcommands
deno deploy --help
# See flags for a specific subcommand
deno deploy create --help
deno deploy env --help
deno deploy database --help
これには数秒しかかからず、試行錯誤を繰り返して失敗するのを防げます。フラグが存在すると決めつけず、 まず確認してください。
デプロイのワークフロー
必ず最初に基本のデプロイコマンドを示し、その後に診断手順を説明してください。
ユーザーが「どうすればデプロイできますか?」と尋ねた場合は、事前確認や設定について説明する前に、
実際のコマンド(deno deploy --prod)を示してください。
ステップ 1:アプリのディレクトリを特定する
デプロイコマンドを実行する前に、Deno アプリがどこにあるか確認してください。
# Check if deno.json exists in current directory
if [ -f "deno.json" ] || [ -f "deno.jsonc" ]; then
echo "APP_DIR: $(pwd)"
else
# Look for deno.json in immediate subdirectories
find . -maxdepth 2 -name "deno.json" -o -name "deno.jsonc" 2>/dev/null | head -5
fi
すべてのデプロイコマンドは、アプリのディレクトリから実行する必要があります。
ステップ 2:事前確認
Deno のバージョンと既存の設定を確認してください。
# Check Deno version (must be >= 2.4.2)
deno --version | head -1
# Check for existing deploy config
grep -E '"org"|"app"' deno.json deno.jsonc 2>/dev/null || echo "NO_DEPLOY_CONFIG"
ステップ 3:起動時の依存関係を確認する
デプロイする前に、アプリが起動時にデータベースや外部サービスに接続するか確認してください
(例:main.ts 内のトップレベルの await initDb())。接続する場合、データベースがまだ存在しないため、
ウォームアップ中にデプロイが失敗します。
アプリに起動時のデータベース依存関係がある場合は、次の順序に従ってください。
-
--no-waitを指定してアプリを作成し、ウォームアップの失敗で処理が妨げられないようにします。deno deploy create \ --org <ORG_NAME> --app <APP_NAME> \ --source local --runtime-mode dynamic --entrypoint main.ts \ --build-timeout 5 --build-memory-limit 1024 --region us \ --no-wait -
データベースをプロビジョニングして割り当てます。
deno deploy database provision my-db --kind prisma --region us-east-1 deno deploy database assign my-db --app <APP_NAME> -
再デプロイします(この時点ではデータベースが存在するため、ウォームアップは成功します)。
deno deploy --prod
アプリに起動時の依存関係がない場合は、この手順を省略し、以下の通常の方法でデプロイしてください。
ステップ 4:設定に基づいてデプロイする
deno.json に deploy.org と deploy.app の両方がある場合:
# Build if needed (Fresh, Astro, etc.)
deno task build
# Deploy to production
deno deploy --prod
デプロイ設定がない場合:
デプロイ先のアプリを作成してからでないと、デプロイできません。 アプリが存在するまで、deno deploy --prod は実行できません。
重要:まずユーザーに確認してください — Deno Deploy に既存のアプリがあるか、それとも新しいアプリを作成する必要があるかを確認します。
既存のアプリがある場合は、設定を deno.json に直接追加します。
{
"deploy": {
"org": "<ORG_NAME>",
"app": "<APP_NAME>"
}
}
組織名は Deno Deploy のコンソール URL にあります(例:console.deno.com/your-org-name)。この設定を追加した後は、以降のデプロイで deno deploy --prod を実行するだけで済みます。
新しいアプリを作成する必要がある場合:
CLI には組織名が必要です。https://console.deno.com で確認してください。組織名は URL のパスにあります(例:console.deno.com/your-org-name)。
対話形式での作成(ブラウザーが開きます — キーボードの前に人がいる場合のみ使用できます):
deno deploy create --org <ORG_NAME>
# A browser window opens - complete the app creation there
非対話形式での作成(AI エージェントがデプロイを実行する場合、または CI/CD で使用します):
deno deploy create \
--org <ORG_NAME> \
--app <APP_NAME> \
--source local \
--runtime-mode dynamic \
--entrypoint main.ts \
--build-timeout 5 \
--build-memory-limit 1024 \
--region us
作成コマンドは初回のデプロイも実行します。完了すると、deno.json に deploy.org と deploy.app が自動的に追加されます。その後のデプロイでは、次のコマンドだけで済みます。
deno deploy --prod
完了後、設定が保存されたことを確認します。
grep -E '"org"|"app"' deno.json
AI エージェントがデプロイを実行する場合は、明示的なフラグを指定して、必ず非対話形式の手順を使用してください。対話形式の手順ではブラウザーウィンドウやターミナルでの入力が必要ですが、エージェントは操作できません。
基本コマンド
本番デプロイ
deno deploy --prod
プレビューデプロイ
deno deploy
プレビューデプロイでは、本番環境に影響を与えずにテストできる、一意の URL が作成されます。
特定のアプリを指定する
deno deploy --org my-org --app my-app --prod
エントリーポイントを設定する
deno.json でエントリーポイントを設定します(アプリ作成時に deno deploy create が使用します)。
{
"deploy": {
"entrypoint": "main.ts"
}
}
注:--entrypoint は deno deploy create のフラグであり、deno deploy 自体のフラグではありません。
その他のフラグ
これらのフラグは deno deploy create で使用でき(初回デプロイ時に適用されます)、次のとおりです。
| フラグ | 用途 |
|---|---|
--allow-node-modules | node_modules ディレクトリをアップロードに含める |
--no-wait | ビルドの完了を待たずに進む |
アプリの作成(非対話形式のリファレンス)
--org 以外のフラグを指定すると、deno deploy create は非対話モードで実行され、必要なフラグをすべて指定する必要があります。AI エージェントや CI/CD パイプラインには、この方法を推奨します。
必須フラグ
| フラグ | 説明 |
|---|---|
--org <name> | 組織名 |
--app <name> | アプリケーション名(URL:<app>.deno.dev になります) |
--source <local|github> | ローカルファイルまたは GitHub リポジトリからデプロイします |
--build-timeout <minutes> | ビルドのタイムアウト:5、10、15、20、25、または 30 分 |
--build-memory-limit <MB> | メモリ制限:1024、2048、3072、または 4096 |
--region <region> | デプロイリージョン:us、eu、または global |
GitHub ソースのフラグ
--source github を使用する場合は、次のフラグも必要です。
| フラグ | 説明 |
|---|---|
--owner <name> | GitHub リポジトリのオーナー |
--repo <name> | GitHub リポジトリ名 |
ビルド設定フラグ
| フラグ | 説明 |
|---|---|
--app-directory <path> | アプリのディレクトリへのパス(モノレポの場合) |
--framework-preset <preset> | フレームワークのプリセット(フレームワークを参照) |
--install-command <cmd> | カスタムのインストールコマンド |
--build-command <cmd> | カスタムのビルドコマンド |
--pre-deploy-command <cmd> | デプロイ前に実行するコマンド |
--do-not-use-detected-build-config | フレームワーク設定の自動検出をスキップ |
CLI はフレームワークとビルド設定を自動検出します。フレームワークが検出された場合、--install-command、--build-command、--pre-deploy-command、--runtime-mode は省略できます。これらはプリセットから推定されます。検出結果を上書きするには、--do-not-use-detected-build-config を使用します。このフラグを使用すると、3 つすべてのビルドコマンド(--install-command、--build-command、--pre-deploy-command)と --runtime-mode が必須になります。いずれかを省略すると、終了コード 2 が返されます。
ランタイムモードのフラグ
フレームワークのプリセットで処理される場合を除き、--runtime-mode <dynamic|static> でランタイムモードを選択する必要があります。
動的モード(サーバーを含むアプリ向け):
| フラグ | 説明 |
|---|---|
--entrypoint <path> | エントリーファイル(動的モードでは必須) |
--arguments <args> | エントリーポイントに渡す引数(繰り返し指定可能) |
--working-directory <cwd> | プロセスの作業ディレクトリ |
静的モード(静的サイト向け):
| フラグ | 説明 |
|---|---|
--static-dir <dir> | 静的ファイルの配信元ディレクトリ(必須) |
--single-page-app | ファイルに一致しないルートでは index.html を配信します |
その他のフラグ
| フラグ | 説明 |
|---|---|
--dry-run | アプリを実際に作成せずにすべてを検証します |
--no-wait | ビルドの完了を待ちません |
--allow-node-modules | アップロードに node_modules を含めます |
例
シンプルな Deno サーバー:
deno deploy create \
--org my-org --app my-api \
--source local \
--runtime-mode dynamic --entrypoint main.ts \
--build-timeout 5 --build-memory-limit 1024 --region us
新規アプリ(フレームワークを自動検出):
deno deploy create \
--org my-org --app my-fresh-app \
--source local \
--build-timeout 5 --build-memory-limit 1024 --region us
GitHub の Next.js:
deno deploy create \
--org my-org --app my-next-app \
--source github --owner my-github-user --repo my-next-repo \
--framework-preset Next \
--build-timeout 15 --build-memory-limit 2048 --region us \
--allow-node-modules
静的サイト:
deno deploy create \
--org my-org --app my-static-site \
--source local \
--runtime-mode static --static-dir dist --single-page-app \
--build-command "deno task build" \
--build-timeout 5 --build-memory-limit 1024 --region us
環境変数
コンテキスト
Deno Deploy には 3 つの「コンテキスト」があります。これは、コードが実行される論理環境で、それぞれ独自の変数セットを持ちます。
| コンテキスト | 目的 |
|---|---|
| 本番 | 本番 URL へのライブトラフィック |
| 開発 | プレビューのデプロイとブランチ URL |
| ビルド | ビルドプロセス中のみ利用可能 |
同じ変数に対して、コンテキストごとに異なる値を設定できます。たとえば、開発ではテスト用のデータベース URL を、本番では実際の URL を使用できます。
定義済み変数
これらの変数は、コード内で自動的に使用できます。
| 変数 | 説明 |
|---|---|
DENO_DEPLOY | Deno Deploy で実行すると常に 1 になります |
DENO_DEPLOYMENT_ID | 現在のデプロイ固有の ID |
DENO_DEPLOY_ORG_ID | 組織の ID |
DENO_DEPLOY_APP_ID | アプリケーションの ID |
CI | ビルド中のみ 1 に設定されます |
コード内での変数へのアクセス
const dbUrl = Deno.env.get("DATABASE_URL");
const isDenoDeploy = Deno.env.get("DENO_DEPLOY") === "1";
CLI による変数の管理
# Add a plain text variable
deno deploy env add DATABASE_URL "postgres://..."
# Add a secret variable (hidden after creation, only readable in code)
deno deploy env add API_KEY "sk-..." --secret
# List all variables
deno deploy env list
# Update just the value (keeps contexts and secret status)
deno deploy env update-value DATABASE_URL "postgres://new-url..."
# Update which contexts a variable applies to
deno deploy env update-contexts DATABASE_URL production development
# Delete a variable
deno deploy env delete DATABASE_URL
# Load from .env file (all values treated as secrets by default)
deno deploy env load .env.production
# Load from .env file, marking specific keys as non-secrets
deno deploy env load .env.production --non-secrets PUBLIC_URL APP_NAME
変数の種類
- プレーンテキスト - ダッシュボードに表示されます。機能フラグや機密性のない設定に適しています
- シークレット - 作成後は非表示になり、コードからのみ読み取れます。API キーや認証情報に使用します
制限事項
- キー名:最大 128 バイト
- 値:最大 16 KB
- キー名の先頭に
DENO_、LD_、OTEL_は使用できません
ログの表示
# Stream live logs
deno deploy logs
# Filter by date range
deno deploy logs --start 2026-01-15 --end 2026-01-16
データベースとストレージ
Deno Deploy には、自動環境分離機能を備えたデータベースサポートが組み込まれています。各環境(本番、プレビュー、ブランチ)には、それぞれ分離されたデータベースが自動的に割り当てられます。
利用可能なオプション
| エンジン | 用途 |
|---|---|
| Deno KV | キーと値のストレージ、シンプルなデータ、カウンター、セッション |
| PostgreSQL | リレーショナルデータ、複雑なクエリ、既存の Postgres アプリ |
Deno KV クイックスタート
設定は不要です。組み込み API を使うだけです。
const kv = await Deno.openKv();
// Store data
await kv.set(["users", "alice"], { name: "Alice", role: "admin" });
// Retrieve data
const user = await kv.get(["users", "alice"]);
console.log(user.value); // { name: "Alice", role: "admin" }
// List by prefix
for await (const entry of kv.list({ prefix: ["users"] })) {
console.log(entry.key, entry.value);
}
Deno Deploy は環境に応じて、適切なデータベースに自動的に接続します。
PostgreSQL
PostgreSQL の場合、Deno Deploy は環境変数(DATABASE_URL、PGHOST など)を注入します。ほとんどのライブラリはこれらを自動的に検出します。
// Recommended: npm:pg (best PostgreSQL driver for Deno Deploy)
import pg from "npm:pg";
const pool = new pg.Pool(); // Reads DATABASE_URL from environment automatically
プロビジョニング
deno deploy database コマンドを使って、データベースをプロビジョニングおよび管理します。
# Provision a Deno KV database
deno deploy database provision my-database --kind denokv
# Provision a Prisma PostgreSQL database
deno deploy database provision my-database --kind prisma --region us-east-1
# Assign to your app
deno deploy database assign my-database --app my-app
CLI コマンドの詳細については、データベースを参照してください。
ローカル開発
--tunnel を使うと、ホストされている開発用データベースにローカルから接続できます。
deno task --tunnel dev
詳しいドキュメントについては、データベースおよびDeno KVを参照してください。
ローカル開発用トンネル
トンネル機能を使うと、ローカルの開発サーバーをインターネットに公開できます。次のような用途に便利です。
- Webhook のテスト - 外部サービスからの Webhook コールバックを受信します
- チームメイトとの共有 - ローカルでの作業を他の人にプレビューしてもらいます
- モバイルでのテスト - 他のデバイスからローカルサーバーにアクセスします
基本的な使い方
アプリの実行時に --tunnel フラグを追加します。
deno run --tunnel -A main.ts
初回の実行時には、次の操作が行われます。
- Deno Deploy での認証を求められます(ブラウザーが開きます)
- トンネルを接続するアプリの選択を求められます
- ローカルサーバーにリクエストを転送する公開 URL が生成されます
タスクでの使用
deno.json にある既存のタスクでも --tunnel を使用できます。
deno task --tunnel dev
これにより、トンネルを有効にした状態で dev タスクが実行されます。
トンネルで利用できる機能
トンネルではリクエストの転送だけでなく、次のこともできます。
- 環境変数の同期 - Deno Deploy アプリの「Local」コンテキストに設定した変数を、ローカルプロセスで利用できます
- ログとメトリクスの送信 - OpenTelemetry データが Deno Deploy ダッシュボードに送信されます(
context:localで絞り込めます) - データベースへの接続 - 割り当てられたローカル開発用データベースに自動的に接続します
トンネルの管理
- Deno Deploy ダッシュボードの「Tunnels」タブで、アクティブなトンネルを確認できます
- Deno プロセスを終了してトンネルを停止します(Ctrl+C)
コマンドリファレンス
| コマンド | 目的 |
|---|---|
deno deploy --prod | 本番環境にデプロイします(先にアプリを作成する必要があります) |
deno deploy | プレビュー環境にデプロイします |
deno deploy create --org <name> | 新しいアプリを作成します(対話形式) |
deno deploy create --org <name> --app <name> ... | 新しいアプリを作成します(非対話形式。上記のすべてのフラグを参照) |
deno deploy create ... --no-wait | ビルドの完了を待たずにアプリを作成します |
deno deploy create ... --allow-node-modules | node_modules を含めてアプリを作成します |
deno deploy env add <var> <value> | 平文の環境変数を追加します |
deno deploy env add <var> <value> --secret | シークレット環境変数を追加します |
deno deploy env list | 環境変数の一覧を表示します |
deno deploy env update-value <var> <value> | 変数の値を更新します(コンテキストとシークレットの状態は維持されます) |
deno deploy env update-contexts <var> <contexts...> | 変数を適用するコンテキストを更新します |
deno deploy env delete <var> | 環境変数を削除します |
deno deploy env load <file> | .env ファイルから変数を読み込みます(デフォルトではシークレットになります) |
deno deploy env load <file> --non-secrets <keys...> | .env ファイルを読み込み、指定したキーを非シークレットとして設定します |
deno deploy database provision <name> --kind <type> | 新しいデータベースをプロビジョニングします |
deno deploy database assign <name> --app <app> | データベースをアプリに割り当てます |
deno deploy logs | デプロイのログを表示します |
deno run --tunnel -A <file> | ローカルトンネルを開始します |
deno task --tunnel <task> | トンネルを使ってタスクを実行します |
エッジランタイムに関する注意事項
Deno Deploy は、1 つまたは複数のリージョンで実行されます(グローバルに分散されています)。次の点にご注意ください。
- 環境変数 - 実行時には .env ファイルではなく、
deno deploy envで設定する必要があります - グローバル分散 - コードはユーザーに最も近いリージョンで実行されます
- コールドスタート - アイドル状態の後の最初のリクエストは、わずかに遅くなる場合があります
参考資料
- 認証 - 対話形式および CI/CD の認証
- データベース - データベースのプロビジョニングと接続
- Deno KV - キーと値のストレージ API と使用例
- ドメイン - カスタムドメインと SSL 証明書
- フレームワーク - フレームワーク固有のデプロイガイド
- 組織 - 組織とメンバーの管理
- ランタイム - ライフサイクル、コールドスタート、制限事項
- トラブルシューティング - よくある問題と解決方法
Documentation
- Official docs: https://docs.deno.com/deploy/
- CLI reference: https://docs.deno.com/runtime/reference/cli/deploy/
- Databases: https://docs.deno.com/deploy/reference/databases/
- Deno KV: https://docs.deno.com/deploy/reference/deno_kv/
- Domains: https://docs.deno.com/deploy/reference/domains/
- Environment variables & contexts: https://docs.deno.com/deploy/reference/env_vars_and_contexts/
- Organizations: https://docs.deno.com/deploy/reference/organizations/
- Runtime: https://docs.deno.com/deploy/reference/runtime/
- Tunnel: https://docs.deno.com/deploy/reference/tunnel/