mcpField
D
deno-deploy

deno-deploy

github.com/midudevクラウド・DevOps7.0k56 回インストール1 週間前に更新
リポジトリ

deno-deploy について

Deno Deploy へのアプリのデプロイを案内するスキルです。アプリ作成、プレビューと本番へのリリース、環境変数、ログを扱い、対象を Deno Deploy に限定して統合コマンド `deno deploy` を指定します。

主な機能

  1. 01アプリ作成とデプロイの手順
  2. 02プレビューと本番デプロイ
  3. 03動的・静的ランタイムモード
  4. 04環境変数とシークレットの管理
  5. 05デプロイログの確認
  6. 06起動時のデータベース依存への対応

活用シーン

  1. 01Deno アプリの本番リリース
  2. 02テスト用プレビューデプロイの作成
  3. 03デプロイ環境変数とシークレットの設定
  4. 04起動時依存関係やデプロイログの調査

インストール

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

$npx skills add https://github.com/midudev/autoskills --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)を示してください。

Step 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

すべてのデプロイコマンドは、アプリのディレクトリから実行する必要があります。

Step 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"
Step 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
    

起動時の依存関係がない場合は、この手順を省略して、以下の通常の方法でデプロイしてください。

Step 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 deploy create が使用するエントリーポイントを、deno.json に設定します。

{
  "deploy": {
    "entrypoint": "main.ts"
  }
}

注:--entrypoint は deno deploy 自体ではなく、deno deploy create のフラグです。

その他のフラグ

以下のフラグは 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_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 を使って設定する必要があります
  • グローバル分散 - ユーザーに最も近いリージョンでコードが実行されます
  • コールドスタート - アイドル状態の後の最初のリクエストは、多少遅くなる場合があります

追加のリファレンス

ドキュメント

コメント