Cron Secret ジェネレーター
暗号学的に安全な CRON_SECRET キーをワンクリックで生成。キーは Web Crypto API によりブラウザ内で生成され、そのまま環境変数にコピーして使えます。
Web Crypto API を使ってブラウザ内で生成されます。サーバーには一切送信されません。
CRON_SECRET とは?
CRON_SECRET は、Cron ジョブのエンドポイントを不正アクセスから守るランダムトークンです。Cron ルートは通常の HTTP エンドポイントであり、シークレットがなければ URL を知った誰もがジョブを実行し、クォータを浪費し、データを破壊できてしまいます。
スケジューラーは毎回のリクエストの Authorization ヘッダーにシークレットを載せ、エンドポイント側はそれを持たないリクエストを拒否します。32 バイトのランダム値が推奨強度で、Vercel の公式ドキュメントの推奨とも一致します。
Vercel Cron Jobs での CRON_SECRET の使い方
1. 生成したキーを Vercel プロジェクト設定の CRON_SECRET 環境変数に追加します。
2. vercel.json で Cron スケジュールを宣言します:
{
"crons": [
{ "path": "/api/cron/daily-report", "schedule": "0 5 * * *" }
]
}3. ルートハンドラーで Authorization ヘッダーを検証します:
// app/api/cron/daily-report/route.ts
import { NextResponse } from "next/server";
export async function GET(request: Request) {
const authHeader = request.headers.get("authorization");
if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
// ... run your scheduled job here
return NextResponse.json({ ok: true });
}Dokploy・Coolify などでの利用
Dokploy や Coolify などのセルフホスト環境は Authorization ヘッダーを自動付与しません。curl でヘッダーを明示的に送るタスクをスケジュールしてください:
curl -X GET "https://your-app.com/api/cron/daily-report" \
-H "Authorization: Bearer $CRON_SECRET"よくある質問
CRON_SECRET はどのくらいの長さにすべきですか?
32 バイト(256 ビット)のランダム性が推奨で、Vercel のドキュメントの推奨値かつ本ツールのデフォルトです。それ以上長くしても実用上のセキュリティ向上はありません。
ブラウザで Cron Secret を生成しても安全ですか?
安全です。本ツールは Web Crypto API(crypto.getRandomValues)を使用しており、暗号学的に安全な乱数を生成します。シークレットは端末内で生成され、どこにも送信されません。
コマンドラインで CRON_SECRET を生成するには?
hex なら `openssl rand -hex 32`、Base64 なら `openssl rand -base64 32` を実行します。本ツールはターミナル不要で同等のシークレットを生成します。
環境ごとに別のシークレットが必要ですか?
はい。開発・プレビュー・本番でそれぞれ独立したシークレットを使ってください。漏洩が疑われる場合は新しく生成して環境変数を更新するだけでローテーションできます。
この無料ツールは NEXTY.DEV — Next.js SaaS ボイラープレート が開発・保守しています。Cron ジョブ、認証、決済、AI がすべて組み込み済みです。