Cloudflare Workersとは

Cloudflare Workersは、Cloudflareが提供するサーバーレス実行環境です。Node.jsのようにJavaScript(またはTypeScript)で書いたコードを、グローバルに分散されたCloudflareのエッジで実行できるのが特徴。(使用できるnpmパッケージには制限あり。)これを活用して、空席状況を定期的にスクレイピングして、空きができたらSlackに通知する仕組みを作りたい。サーバレスアプリケーションはAWS Lambda、Google Cloud Functions, Azure Functionsなどあるけど、Cloudflare Workersが一番お安く(無料枠で)実現できそうでした。

作りたいもの

  • 定期的にWebページをスクレイピング。
  • スクレイピングした内容をDBに保存。
  • 更新があればSlackに通知。
役割サービス名
定期実行Cloudflare Workers
データ保存Cloudflare D1(SQLite)
通知Slack(Webhook)
公開アクセス一切不要(非公開)

作成順序

まずはデータ保存場所のデータベースD1を作成して、その後Workerを作成します。Cloudflare Workersのアプリケーションの単位をWorkerと言うらしい。Workerに作成したD1データベースをバインディングします。その後、コードの編集・動作確認を行い、問題なさそうであればスケジュール(トリガーイベント)を作成して完了です。

データベース作成

テーブル追加

Workerの作成

HelloWorldを選択して、中身のコードを書き換えていく。

D1データベースをバインディング

コード修正

Workerのコード編集画面からコードを修正する。プレビュー機能を用いるとデプロイしなくても、テストが行える。 HTTPリクエストによるトリガー(fetch)と、スケジュールの基本形

export default {
  //HTTPリクエスト
  async fetch(request, env, ctx) {
    return new Response("This is a fallback fetch response.");
  },

  //スケジュールによる実行
  async scheduled(event, env, ctx) {
    console.log("Running scheduled task...");
  }
};

トリガーの作成

AIに作ってもらったコード内容は割愛。