---
title: Cloudflare に手動でデプロイする
description: "@hakoniwajs/cloudflare をインストールした Worker プロジェクトを作り、Wrangler でデプロイします。"
sidebar:
  label: Cloudflare (手動)
---

`@hakoniwajs/cloudflare` パッケージをインストールした小さな Worker プロジェクトを作り、[Wrangler](https://developers.cloudflare.com/workers/wrangler/) でデプロイします。[テンプレートリポジトリ](https://github.com/hakoniwajs/template-cloudflare) を「Use this template」でコピーして使うのが手軽です。

## 必要なもの

- Node.js 22 以降
- [Cloudflare のアカウント](https://dash.cloudflare.com/sign-up)

## プロジェクトを作る

```sh
npm install @hakoniwajs/cloudflare wrangler
```

Worker のエントリ (`src/worker.ts`) は、`@hakoniwajs/cloudflare` が提供する Worker・Durable Object・キャッシュ用のエントリポイント (`CachedPages`) をそのまま export するだけです。

```ts src/worker.ts
import { createWorker } from "@hakoniwajs/cloudflare";

export { CachedPages, HakoniwaGame } from "@hakoniwajs/cloudflare";

export default createWorker();
```

`wrangler.jsonc` の例です (完全版はテンプレートリポジトリを参照してください)。

```jsonc wrangler.jsonc
{
  "name": "hakoniwa",
  "main": "src/worker.ts",
  "compatibility_date": "2026-08-22",
  "compatibility_flags": ["nodejs_compat"],
  // ゲームの静的ファイル (画像・CSS) は @hakoniwajs/core パッケージ内の public/ から配信する
  "assets": { "directory": "./node_modules/@hakoniwajs/core/public" },
  // Workers Cache。入口 (default) は無効にし、CachedPages だけ有効にする
  "cache": { "enabled": true },
  "exports": {
    "default": { "type": "worker", "cache": { "enabled": false } },
    "CachedPages": { "type": "worker", "cache": { "enabled": true } },
  },
  "durable_objects": {
    "bindings": [{ "name": "GAME", "class_name": "HakoniwaGame" }],
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["HakoniwaGame"] }],
  // ターン進行のトリガー (15 分ごと)
  "triggers": { "crons": ["*/15 * * * *"] },
  // 管理者のメールアドレスを固定したい場合だけ書く (省略した場合は /admin/setup で登録する)
  "vars": {
    "HAKONIWA_ADMIN_EMAILS": "you@example.com",
  },
}
```

`name` は Worker の名前 (公開 URL の `https://<name>.<サブドメイン>.workers.dev` の部分) になります。必要に応じて書き換えてください。

Workers Cache (`cache.enabled: true`) を有効にすると静的アセットへのリクエストも Workers のリクエストとして課金対象になります。

## デプロイする

```sh
npx wrangler login
npx wrangler deploy
```

必須の secret はありません。ログインのセッションなどに使う秘密鍵 (`HAKONIWA_AUTH_SECRET`) は、未設定なら初回の起動時に自動で生成されて Durable Object に保存されます。自分で管理したい場合は `npx wrangler secret put HAKONIWA_AUTH_SECRET` で登録してください (`openssl rand -base64 32` などで生成した 32 バイト以上のランダムな文字列)。

X / Discord ログインやメール送信を使う場合は、次の secret も登録します (詳しくは [ログイン方法の設定](/hakoniwa/setup/login-methods))。

```sh
npx wrangler secret put HAKONIWA_X_CLIENT_ID
npx wrangler secret put HAKONIWA_X_CLIENT_SECRET
npx wrangler secret put HAKONIWA_DISCORD_CLIENT_ID
npx wrangler secret put HAKONIWA_DISCORD_CLIENT_SECRET
npx wrangler secret put HAKONIWA_RESEND_API_KEY
```

## 設定の書き方

- 秘密でない設定 (`HAKONIWA_ADMIN_EMAILS` など) は `wrangler.jsonc` の `vars` に書きます
- 秘密の設定 (`HAKONIWA_DISCORD_CLIENT_SECRET` など) は `wrangler secret put` で登録します
- `HAKONIWA_DEV_LOGIN` (任意のメールアドレスでログインできる開発用機能) は、本番では設定しないでください (既定で無効です)
- カスタムドメインを使う場合だけ `HAKONIWA_BASE_URL` を `vars` に追加します (通常は不要です)

設定できる項目は [環境変数一覧](/hakoniwa/setup/environment-variables) を参照してください。

デプロイ後の手順 (ログインして管理者になり、ゲームを開始する) は [ワンクリックデプロイの手順 3 以降](/hakoniwa/setup/cloudflare#手順) と同じです。`HAKONIWA_ADMIN_EMAILS` を設定した場合は、そのメールアドレスでログインすればすぐに管理者になれます。
