Open6

Cloudflare Worker + Pythonさわる→Honoやるよ

もじゃなりもじゃなり

Honoでできるようになることを整理

  • cronで定期実行
  • twitch apiを叩ける
  • D1を操作できるようになる(生クエリでOK)
もじゃなりもじゃなり

あかん、chatGPTかしこすぎる

CloudflareのHonoでcronジョブと通常のAPIエンドポイントを共存させるためには、cron用のルートと通常のAPI用のルートを明確に分けて定義することが必要です。Cloudflare Workersにおいて、cronScheduledEventを使用して実装されますが、通常のHTTPリクエストとは異なります。

以下のように、honoのインスタンスでルートを設定してみましょう。

ステップ 1: honoとCronの設定

  1. Honoのインストール
    honoをnpmでインストールします。

    npm install hono
    
  2. Workerのコード
    以下のコード例では、honoを使った通常のHTTPエンドポイントと、ScheduledEventを使ったCronジョブを同じWorker内で設定しています。

    import { Hono } from 'hono';
    
    // Hono インスタンスを作成
    const app = new Hono();
    
    // 通常のAPIエンドポイント
    app.get('/api/hello', (c) => {
      return c.json({ message: 'Hello, World!' });
    });
    
    // Cron Jobのハンドリング (この部分はHTTPリクエストではなく、ScheduledEventとして実行されます)
    export default {
      fetch: app.fetch, // Honoのルートを処理
      scheduled: (event: ScheduledEvent) => handleScheduledEvent(event), // Cronイベントの処理
    };
    
    // Cron Job の処理関数
    async function handleScheduledEvent(event: ScheduledEvent) {
      console.log('Cron job executed at', event.scheduledTime);
      // ここで必要なジョブを実行
    }
    
  3. Cronトリガーの設定
    Cloudflare Dashboardで、対象のWorkerに対してCronトリガーを設定します。

    1. Cloudflare Workersのダッシュボードにアクセス。
    2. 対象のWorkerを選択し、"Triggers"セクションで"Add Cron Trigger"を選択。
    3. Cron式(例えば、毎日深夜に実行するなら0 0 * * *など)を設定。

解説

  • app.get('/api/hello'): これは通常のHTTPリクエストに対するエンドポイントで、例えばhttps://example.com/api/helloにリクエストが来たときに処理します。
  • scheduled: (event): これはCronトリガーが発火したときに呼び出されるイベントハンドラです。

補足

Honoのインスタンスは単に通常のAPIリクエストを処理する役割を持ち、ScheduledEventの処理はfetchとは独立して行われるため、コードの中での明確な分離が可能です。