← Works 一覧

2026.07 —

サンドーム福井 ライブ情報

サンドーム福井の公演予定とチケット受付期間を、毎晩 Claude Code に自動収集させて掲載するサイト

  • Frontend
  • Backend
  • Infra
  • TypeScript
  • Cloudflare Workers
  • Hono
  • D1
  • Claude Code
  • GitHub Actions
サンドーム福井 ライブ情報の公演一覧・公演詳細ページと、Slack に届く RSS 通知

背景

福井県越前市のサンドーム福井では、1万人規模のライブが年に何度も開かれています。 ただ「今日サンドームに〇〇さん来るらしいよ」と直前に人から聞いて知ることが多く、 知っていれば行きたかった公演を何度も逃していました。

推しのアーティストなら SNS をフォローしていれば気づけますが、全アーティストは追えません。 会場の公式カレンダーは数ヶ月先までしか載らず、チケットの先行受付はそれより前に始まって終わります。 「いつ誰が来るか」と「いつ申し込めるか」が 1 箇所にまとまっていないのが根本の問題でした。

そこで、公演予定とチケット受付期間をまとめて見られるサイトを作りました。

構成

  • 収集は Claude Code のヘッドレスモード(claude -p) を GitHub Actions の cron から毎晩実行
  • 調査手順はコードではなく Markdown の指示書(WebSearch / WebFetch の使い方を日本語で記述)
  • 収集結果を JSON で受け取り、Node スクリプトで検証してから取り込み API へ POST
  • 配信は Cloudflare Workers + Hono の SSR、データは D1(SQLite)
  • 更新は RSS で配信。Slack の /feed subscribe で通知を受け取れる
  • schema.org の MusicEvent 構造化データ、公演ごとの詳細ページ、締切カウントダウン付き

新しい公演やチケット受付を見つけると、こんな形で Slack に流れてきます。

Slack に届いた RSS 通知。抽選更新: FANTASTICS「一般発売」受付 4/4 10:00〜不明

やったこと

収集を両方向から回す設計 会場公式カレンダーから公演を確定させる経路に加えて、 「“サンドーム福井” ツアー 2027」のような検索で会場公式にまだ載っていない公演を探す経路を用意しました。 実際に Vaundy の 2027 年 12 月公演を、会場公式に掲載される前・先行受付が進行中の段階で捕捉できています。

2 段階の収集 1 晩で全公演を深く調べるのは時間的に無理があるため、 まず全公演を浅くさらい、次に受付期間が埋まらなかった公演だけをアーティスト単位で狙い撃ちします。 2 段目は GET /api/missing で「DB のどこが欠けているか」をアプリ自身に問い合わせてから調査対象を決めます。

LLM の出力の揺れを吸収する 同じプロンプト・同じ情報源でも、LLM の出力は毎晩少しずつ変わります。 アーティスト名の表記がぶれて同じ公演が 2 件に増えたり、 昨日取れていた受付期間が今日は null になって上書きで消えたりしました。 公演 ID を日付から決定的に生成し(サンドーム福井はホールが 1 つなので 1 日 1 公演)、 受付は正規化した名前のハッシュで同一判定し、 値は良くなる方向にしか更新しないマージ規則を入れることで解決しました。 null は「期間が無くなった」ではなく「今夜は分からなかった」と解釈する、という考え方です。

通知は「行動できる差分」だけに絞る 差分検知の材料から名前と URL を外し、過去公演・締切済み・期間が全く不明な受付は通知しないようにしました。 毎晩 30〜95 件流れていた RSS が、2 件程度に落ち着いています。

← Works 一覧へ戻る