SyncTank
← 開発プロダクト一覧

CASE 03 / 自社実験 / 検証完了・配信停止

Chotal

必要な調達情報を、必要な人へ。

官公庁・自治体のIT/DX調達情報を収集し、条件に合う情報をSlackへ届ける仕組みを開発。技術検証を終え、情報の供給量と課金仮説を踏まえて事業化を保留し、定期配信を停止しています。

PERIOD
2026.07 — 09

145,892蓄積した落札実績データ
2.5構築・検証期間(月)
停止中定期配信の状態

01 / CONTEXT

つくれることと、事業になること。

調達情報の分類・通知を動く形にし、実際に得られる情報量や利用条件を確認しました。技術が成立したことと、事業として継続する判断を分けて検証したプロジェクトです。

02 / HOW IT WORKS

つながる仕組み。

各ステップを選ぶと、役割を確認できます。

01 / 04

官公庁や自治体の情報源から、入札・公募などの更新を集めます。

03 / DESIGN CHOICES

設計で大切にしたこと。

曖昧にしてよい情報を分ける。

AIは分類や要約を担当。締切や取消などの情報は、明示的なルールで処理する設計にしました。

分からない情報を、無理に埋めない。

抽出できなかった項目や分類に失敗した情報は、推測で補わず状態を残します。

技術構成と実装の詳細

開発時の構成・検証記録です。

CRON · TRIGGER CF scheduled 毎営業日 08:30 JST 1 · FETCH · DIFF KKJ / jGrants / 調達ポータル (daily diff) 2 · PRE-NARROW (deterministic) 42 include-words / 20 exclude-words 3 · CLASSIFY (Claude Haiku 4.5) is_it / category / prefecture / buyer_fit_tags · fallback safe 4 · DETERMINISTIC (regex): deadline · cancel · dedup (542 lines total) 5 · MATCH subscription × opportunity → SLACK WEBHOOK (AES-GCM stored) 6 · UPSERT D1 (opportunities / awards / deliveries)
Runtime
Cloudflare Workers TypeScript
AI
Claude Haiku 4.5 CF AI Gateway
DB
D1 (SQLite) KV R2 (PDF cache + backup)
Frontend
Hono 4.6 SSR
Distribute
Slack Webhook AES-GCM stored SSRF guard
Cron
CF scheduled() GitHub Actions (backup)

自律化の設計判断: 数値と法的判断は AI に触らせない(締切抽出は 249 行の正規表現、取消判定は 133 行の宣言文マッチ、重複排除は 160 行のルールベース)。AI に任せるのは 5 フィールドのみ(is_it / confidence / category / one_line_summary / buyer_fit_tags)。プロンプトは「バーティカル設定」から差し替え可能な設計で、別領域プロダクトへ移植可能な抽象化を試みた。失敗時のガード(Anthropic SDK エラー / JSON parse 失敗)は fallback で is_fallback: true を返し、案件を破棄せず「unclassified」として保持。 Design principles: numbers and legal calls stay out of the AI — deadline extraction is 249 lines of regex, cancellation detection is 133 lines of declaration-matching, dedup is 160 lines of rules. Only 5 fields are AI-owned (is_it / confidence / category / one_line_summary / buyer_fit_tags). Prompts are swappable per "vertical config," an abstraction meant to be portable to other domains. Failure guards (Anthropic SDK errors / JSON parse failures) return is_fallback:true and keep the item as "unclassified" rather than dropping it.

運用実績: 締切抽出は初回本番で 適合率 100%(再現率 20 – 50% を意図的に維持、取りこぼしは null で「出典に記載なし」表示)。取消判定は 138 件中 2 件を 誤検知 0 で検出。 In production: deadline extraction hit 100% precision on first run (recall held at 20–50% by design; misses shown as "not stated in source"). Cancellation detection caught 2 of 138 items with zero false positives.

LET'S BUILD.

こんな仕組みを、あなたの仕事にも。

つくりたいものを相談する ↗