ハッカソンのための小さな Workers ホスティング

Workers のコードを、
自分のサーバーでそのまま。

Kanzume は、Workers 向けに書いたコード(export default { fetch } と wrangler.jsonc)を書き換えずに動かせるセルフホスト環境です。Render の無料プランに置けて、GitHub Actions からは URL と Token の 2 つだけでデプロイできます。

このページも Kanzume で動いています。 Worker に問い合わせ中…

ハッカソンで使いやすい理由

無料のサーバー 1 台で動く

Render の無料プラン(512MB RAM / 0.1 CPU)を想定して、軽さを最優先に作っています。起動直後のメモリは約 35MiB です。

wrangler の書き方のまま

fetch ハンドラ・KV・R2・静的アセットを wrangler の設定どおりに使えます。あとから wrangler deploy でほかへ移すときも、コードはそのままです。

URL と Token だけでデプロイ

GitHub Actions にステップを 1 つ足すだけです。wrangler でのバンドルも Action が引き受けるので、ほかのサービスのアカウントは要りません。

チームで見られる管理画面

パスキーでログインし、デプロイ履歴・ビルドログ・デプロイ中のコード・リクエストごとのログやエラーを確認できます。メンバーはチーム ID で参加します。

始め方

  1. Kanzume を立てる

    リポジトリを fork して、Render の New > Blueprint で選ぶだけです(render.yaml が Docker の無料 Web Service を作ります)。自分のサーバーなら Docker で動かせます。

    docker build -t kanzume .
    docker run -d -p 8080:8080 -v kanzume-data:/data kanzume
  2. 管理画面でパスキーを登録する

    /_admin/kanzume を開き、環境変数 KANZUME_SETUP_TOKEN を入力して最初のパスキーを登録します。2 人目以降は、設定に出るチーム ID を入力して登録します。

  3. リポジトリに URL と Token を登録する

    管理画面の設定に出ている値を、デプロイしたいリポジトリの Variables(KANZUME_URL)と Secrets(KANZUME_TOKEN)に登録します。

  4. ワークフローを置いて push する

    あとは main に push するたびにデプロイされます。

    name: Deploy to Kanzume
    on:
      push:
        branches: [main]
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - uses: kazukingzz/Kanzume/action@main
            with:
              url: ${{ vars.KANZUME_URL }}
              token: ${{ secrets.KANZUME_TOKEN }}

まだ何もデプロイしていない Kanzume なら、管理画面に GitHub の public リポジトリの URL を貼るだけでもデプロイできます。このページのソースは examples/worker にあります。

対応している機能

fetch ハンドラ○ES Modules 形式。オブジェクトと WorkerEntrypoint の両方
KV○get / put / delete / list、metadata、expirationTtl
R2○get / put / head / delete / list、range、httpMetadata
Static Assets○html_handling / not_found_handling / run_worker_first
nodejs_compat△buffer・crypto・stream・util など。fs や net は使えない
D1・Durable Objects・Cron・Queues×今は対応していません

Worker は 1 台のサーバーの中で動かすので、デプロイできる人(Token とチーム ID を持つ人)は信頼する前提です。詳しくは README を見てください。

次のハッカソンで、すぐ使える。

github.com/kazukingzz/Kanzume