mcpField
D
deno-deploy

deno-deploy

github.com/denolandクラウド・DevOps102382 回インストール13 週間前に更新
リポジトリ

deno-deploy について

Deno アプリを Deno Deploy にデプロイする AI エージェント向けスキルです。アプリの作成や設定から本番・プレビューへのデプロイまでを扱い、現行の `deno deploy` コマンドの利用と、未確認のフラグをヘルプで調べる手順を重視します。

主な機能

  1. 01Deno Deploy の手順ガイド
  2. 02アプリの作成と設定
  3. 03本番・プレビューへのデプロイ
  4. 04環境変数の管理
  5. 05コマンドラインフラグの確認

活用シーン

  1. 01Deno アプリの本番デプロイ
  2. 02ローカルファイルや GitHub からのアプリ作成
  3. 03起動時のデータベース依存への対応

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/denoland/skills --skill deno-deploy

インストール後、Claude Code で/deno-deployを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
AUTHENTICATION.md
DATABASES.md
DENO_KV.md
DOMAINS.md
FRAMEWORKS.md
ORGANIZATIONS.md
RUNTIME.md
TROUBLESHOOTING.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())。接続する場合、データベースがまだ存在しないため、 ウォームアップ中にデプロイが失敗します。

アプリに起動時のデータベース依存関係がある場合は、次の順序に従ってください。

  1. --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
    
  2. データベースをプロビジョニングして割り当てます。

    deno deploy database provision my-db --kind prisma --region us-east-1
    deno deploy database assign my-db --app <APP_NAME>
    
  3. 再デプロイします(この時点ではデータベースが存在するため、ウォームアップは成功します)。

    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-modulesnode_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_DEPLOYDeno 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

初回の実行時には、次の操作が行われます。

  1. Deno Deploy での認証を求められます(ブラウザーが開きます)
  2. トンネルを接続するアプリの選択を求められます
  3. ローカルサーバーにリクエストを転送する公開 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-modulesnode_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 で設定する必要があります
  • グローバル分散 - コードはユーザーに最も近いリージョンで実行されます
  • コールドスタート - アイドル状態の後の最初のリクエストは、わずかに遅くなる場合があります

参考資料

Documentation

コメント