---
title: Deno Deploy で沼った話 toranoana.deno #24
tags:  #deno  
author: [hirotaka kono](https://www.docswell.com/user/hk_it7)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJPKXQMLE8.jpg?width=480
description: toranoana.deno #24での登壇資料  河野裕隆  本スライドでは、Deno Deploy（classic）で運用中のDiscordボットがcronだけで動作するにも関わらず、プレビュー デプロイが起動してエラーになる経緯を紹介します。GitHub Actionsへ移行してproductionのみデプロイする構成に変更したものの、previewモードが残り新しいcronが動かないといった二重起動の疑念が生じました。最終的に、ダミーのHTTPエンドポイントを追加してプレビュー実行を回避し、エラーを解消した事例を示します。さらに、Deno.cron()の利点や他サービスのcron実装、次世代 Deno Deploy のcron対応予定についても触れています。
published: March 11, 26
canonical: https://www.docswell.com/s/hk_it7/5WREYJ-deno-deploy-error
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJPKXQMLE8.jpg)

Deno Deploy で沼った話
Discord bot の deploy 試行錯誤
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/2EVVL596EQ.jpg)

自己紹介
河野 裕隆（ @hk_it7 ）
虎の穴ラボ 通販エンジニア、チームリーダー
東葛.dev 主催者
きのこカンファレンス 2026 コアスタッフ
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/57GLX6Z2EL.jpg)

作ったもの
地域コミュニティのコミュニケーション活性化のため、Discord bot を Deno Deploy
（classic） で運用している
bot が送る通知
Spotify プレイリストの更新情報
ランダム話題提供（日本語版・英語版）
アクティブな募集掲示板情報
ポイント
Deno.cron()
のみで動作 — HTTP エンドポイントは持たない
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/4EQY84L9JP.jpg)

問題：PR を出すたびにエラーが出る
git integration（auto deploy）を使っていると、PR ごとに preview deployment が走る
Crons are not supported for preview deployments.
Cron jobs will not be executed in this context.
を含むコードを preview にデプロイ → ISOLATE_INTERNAL_FAILURE
PR のチェック欄に @deno-deploy — Failed to deploy が常に出る
bot なので preview deployment は完全に不要...
Deno.cron()
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/KJ4W2Q5R71.jpg)

対応方針：GitHub Actions に移行
Deno Deploy の設定を見ても、git integration のまま preview を無効にする方法がない
→ GitHub Actions に移行して production のみデプロイする
Before: GitHub push → Deno Deploy auto deploy（preview含む）
After:
push to main → GitHub Actions → Deno Deploy（production のみ）
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LE1YMPWV7G.jpg)

試行錯誤①： denoland/deployctl Action
- uses: denoland/deployctl@v1
with:
project: my-project
token: ${{ secrets.DENO_DEPLOY_TOKEN }}
# 渡したい
失敗 — v1.13.1 は OIDC 専用の設計、 token を with: で渡せない
git integration を解除すると OIDC も使えなくなるので詰み
Error: Failed to get the GitHub OIDC token.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GEWG3263J2.jpg)

試行錯誤②： deployctl CLI を直接 deno run
Action のラッパーを使わず CLI を直接呼ぶ。 DENO_DEPLOY_TOKEN を env で渡せばトー
クン認証できる
- run: deno run -Ar jsr:@deno/deployctl deploy \
--project=&lt;project-name&gt; main.ts
env:
DENO_DEPLOY_TOKEN: ${{ secrets.DENO_DEPLOY_TOKEN }}
→ デプロイ自体は成功
→ しかし --prod フラグなし = preview として deploy
→ 同じエラーが発生...
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/47ZLVDYGJ3.jpg)

解決： --prod フラグを追加
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: denoland/setup-deno@v2
with:
deno-version: v2.x
- name: Deploy to Deno Deploy
run: deno run -Ar jsr:@deno/deployctl deploy \
--project=&lt;project-name&gt; --prod main.ts
env:
DENO_DEPLOY_TOKEN: ${{ secrets.DENO_DEPLOY_TOKEN }}
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/YJ6W51DQJV.jpg)

Before / After
auto deploy (before)
GitHub Actions (after)
PR 時の挙動 preview deploy が走る
何も起きない
main マージ production deploy
GitHub Actions 経由で production
時
deploy
@deno-deploy Failed が出
PR チェック る
出ない
これで解決！ ...と思っていたら
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GJ5MY432J4.jpg)

新たな問題：preview との2重起動疑惑
GitHub Actions 移行後もcronが preview mode で動いているような挙動 が続く
Deno KV に is_preview フラグを持たせて実験
→ やはり preview っぽい環境で動作 していることが示唆された
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/9E29GVZ17R.jpg)

さらに：新機能が production に反映されていない
追加した新しい cron が一向に動かない
--prod フラグつきでデプロイしたはずなのに...
試しに git integration に戻したところ
→ 新機能分の cron が 未実行状態に戻る
仮説：GitHub Actions 期間中は preview インスタンスで動いており、
production 側は実は古いコードのままだったのでは？
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/D7Y4V3R4EM.jpg)

git integration に戻した
Deno Deploy の内部挙動はブラックボックスが多く、これ以上の調査が困難
--prod フラグをつけていても、実際に production として動作しているかは
Deno Deploy 側の挙動に依存
cron の実行状況を直接確認できる手段が限られており、問題の切り分けが難しい
→ git integration に戻すことにした
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/VENYMVD6J8.jpg)

教訓
cron 駆動・HTTP エンドポイントなしの bot は、
preview deployment との相性がそもそも悪い？
Deno Deploy で bot を運用するなら
preview deployment を完全に無効化できるかを事前に確認すべきだった
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/Y79PN6GRE3.jpg)

結局どうしたか
根本解決は諦めて、エラーにならないようにダミーのエンドポイントを追加した
// main.ts の末尾に追加
Deno.serve(() =&gt; new Response(&quot;NOT FOUND&quot;, { status: 404 }));
1行で解決
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/G78DKZVG7D.jpg)

Deno.cron()
おすすめです
サーバーレスで定期実行が完結する手軽さ
外部のスケジューラ（GitHub Actions cron 等）が不要
Deno KV と組み合わせれば状態管理も Deno だけで完結
bot に限らず、定期的なデータ取得・通知・集計などに便利
サービス
定期実行
設定方法
無料枠
Deno.cron()
Deno Deploy
コード内
あり
Cloudflare Workers Cron Triggers
wrangler.toml あり（3つまで）
vercel.json
Vercel
Cron Jobs
1日1回
Netlify
Scheduled Functions コード内
あり
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/L7LMZD5XJR.jpg)

新しい Deno Deploy でも Cron 対応予定
Deno 公式から、新しい Deno Deploy（次世代版）でも
Deno.cron() のサポートが予定されていると発表あり
今回の沼は classic 固有の問題である可能性も高いので、
今後はよりスムーズに使えるようになることに期待！
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/4EMYVP33EW.jpg)

参考
Denoで作る！DiscordへのSpotifyプレイリスト楽曲追加通知【完全無料】
Deno Deploy の auto deploy を GitHub Actions に移行した
Deno Deploy を git integration に戻した
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/PER921QRJ9.jpg)

根本解決の方法をご存知の方、ぜひ教えてください！
cliで --prod フラグつきでデプロイしたのに本番反映されていない
cronのみの場合、previewのdeployを走らせない方法
18


