2026年6月22日|断酒でGO!! 開発ノート #004

全国例会データ収集大作戦
haikuちゃん × Selenium で1587件制覇

今日は一日かけて「全国の断酒会例会データをどうやって集めるか」という問題に正面から向き合った。結果として、AIと自動化ツールを組み合わせた新しいパイプラインが完成し、raw_meetingsという1次集積テーブルに全国1587件のデータが蓄積された。
1,587
raw_meetings 総件数
8
HP取得済み県
47
都道府県カバー
¥0
Selenium収集コスト

なぜraw_meetingsテーブルを作ったのか

今まで例会データを収集するとき、スクリーニング不足と重複リスクという問題があった。各都道府県の公式サイトは構成がバラバラで、命名規則も住所の記載有無もまちまち。そのまま本番のvenues/meetingsに入れてしまうと、誤データが混入したときの影響が大きい。

そこで今日作ったのがraw_meetings(1次情報集積テーブル)だ。

[各ソース] → raw_meetings (status=raw)
                 ↓ 自動スクリーニング
              status = ok / duplicate / suspicious
                 ↓ 人間確認(suspiciousのみ)
              status = ok
                 ↓ promote_to_meetings.py
              venues / meetings(本番)

生データを削除せず常にINSERT ONLYで保持する。原典の証拠として永久保存する設計だ。これで「どのソースから来たデータか」が常に追跡できる。

パイプライン①:haikuちゃんによるHTML抽出

各都道府県の公式サイトはHTMLの構造がバラバラだ。テーブル形式の県もあれば、散文テキストで書かれた県もある。これをパターン別に実装していたら時間がいくらあっても足りない。

そこで登場したのがclaude-haiku-4-5(haikuちゃん)だ。HTMLテキストを渡して「会場名・例会名・曜日・時刻をJSONで返して」と頼むだけで、サイト構成の違いを吸収してくれる。

curl でHTML取得
     ↓
テキスト抽出(script/style除去)
     ↓
haikuちゃんに投げる(max_tokens=8192)
     ↓
JSON配列で返ってくる
     ↓
raw_meetingsにINSERT

今日取得した県と件数:

都道府県件数サイト特記
大阪府60件fudanshu.comテーブル構造・きれい
京都府34件danshu-heian.net住所・アクセスまで取得
福岡県44件zdrfukuoka.jpGoogleマップ埋め込みで30万文字→実質2千文字
兵庫県17件hyogo-dansyu.sakura.ne.jp夜例会は会場名なし(元サイトの問題)
滋賀県23件shigadansyu.comShift-JIS対応が必要
奈良県17件nara-danren.com住所・曜日・時刻すべて揃う最高品質
北海道28件Googleサイト4地区まとめて1ページ
広島県23件hiroshima-danshukai-rengoukai.com住所まで完備
岡山県30件alien9.web.fc2.com2009年更新・needs_human_review=1

コストは大阪・京都・福岡・兵庫・滋賀・奈良・北海道・広島・岡山の合計で約$0.20(約30円)。コーヒー1杯どころかエスプレッソ一口分のコストで全国主要県を制覇できた。

パイプライン②:Seleniumによるソーバーねっと全国収集

ソーバーねっと(addiction-peer.net)はReactで動くSPAのため、通常のcurlでは例会データが取れない。JavaScriptを実行できるブラウザが必要だ。

そこで登場したのがヘッドレスChrome + Seleniumだ。画面なしでブラウザをバックグラウンド動作させる腕利きエンジニアの道具だ。

# Ubuntuサーバーでヘッドレスブラウザを動かす
sudo apt-get install -y chromium-browser chromium-chromedriver
pip install selenium --break-system-packages

# ポイント:mtg_result.htmlはURLパラメータで直接検索できる
https://addiction-peer.net/mtg_result.html?pref=43&page=2

このURLパターンを発見したことで、47都道府県×ページネーション対応のスクリプトが書けた。コストはゼロ。夜中にバックグラウンドで全県を回して完了。

都道府県件数都道府県件数
大阪府143件福岡県91件
京都府77件兵庫県76件
島根県64件岡山県57件
東京都59件沖縄県34件
岩手・宮城・秋田・山形・群馬・石川・鳥取・鹿児島データなし(真の瀕死エリア)

47都道府県の分類マップ

今日の作業で全国の断酒会情報源を整理できた。

カテゴリ都道府県
✅ HP取得済み北海道・大阪・京都・福岡・兵庫・滋賀・奈良・広島・岡山
✅ iCal対応済み埼玉・千葉・東京・神奈川・静岡・栃木
🔵 iCal予定茨城・香川
🟠 PDF保留愛知・高知・島根・徳島・和歌山・山口・鳥取
🩷 JS保留三重・沖縄・長崎
⬜ サイトなし青森・岩手・宮城・秋田・山形・福島・群馬・新潟・富山・石川・福井・山梨・佐賀・熊本・大分・鹿児島

瀕死エリアの現実

岩手・宮城・秋田・山形・群馬・石川・鳥取・鹿児島はソーバーねっとにも登録がなかった。デジタル上に情報が存在しない、本当の意味での瀕死エリアだ。

これらの県に対しては、実際に断酒会員と直接会って話を聞くしかない。デジタルで届かないなら人が届く。それが「心の連鎖握手」の本質だと思う。

次のステップ:raw_meetingsからvenuesとmeetingsへの昇格処理。venues一致・meetings未登録の861件をschedule_rawパース(haikuちゃん)→meetings INSERTする。完了すれば現在885件のmeetingsが1700件超になる見込み。

今日学んだこと

「完璧な自動化を最初から目指さない」ということだ。haikuちゃんの出力は確率的で、古いサイトのデータは不正確かもしれない。だからraw_meetingsというクッションを挟んで、人間が確認できる余地を残した。

人命インフラとして、間違った場所への案内は絶対に避けなければならない。精度を上げてから運用の手間を減らし、最終的にコストも下がる。焦らず一つずつ潰していく。それが今日の撃道だった。