2026年06月28日(日)

schedule.js分離 & RAG基盤構築

断酒でGO!! 開発ノート #011

🦆 今日いける例会が30秒でわかる

マップアプリ断酒でGO!! — 全ての設計はここへ収束する

🎯 今日やったこと

① かもちゃんに開発ノートリンク追加

ウェルカムメッセージ末尾に 📓 開発ノート リンクを追加。フッターがボトムナビに置き換わったことで消えていた導線を回復。

✅ 完了 sed -i '' 's|医療的なご相談は専門家にご相談ください。|...|' chat.html

② schedule.js 分離(名前空間パターン第1弾)

app.jsから日程タブ関連コード(約150行)を schedule.js に分離。Schedule オブジェクトで名前空間化。

✅ 完了 const Schedule = { _prefFilter: 'all', _rendered: false, _data: null, setFilter(pref) { ... }, // GPS・セレクトから呼ぶ render() { ... }, // タブ切替から呼ぶ reset() { ... }, };

💡 教訓:関数削除前は grep -rn "関数名" ./ で全ファイル横断確認。getPrefBadgeStyle の削除漏れでSyntaxErrorが発生した。

③ 日程タブ 都道府県フィルタ+近隣折りたたみ表示

エリア9地域フィルタ → 都道府県47フィルタに改修。GPSで自動選択。近隣都道府県はdetails/summaryで折りたたみ表示。表示件数を自都道府県10日・近隣7日に制限。

✅ 完了
GPS取得 → 都道府県自動選択 ↓ ┌─ 東京都の例会(10日分)─┐ │ 06/28(日)3件 │ │ 06/29(月)1件 │ └──────────────────────────┘ ┌─ 近隣の例会 ─────────────┐ │ ▶ 神奈川県(23件) │ ← 折りたたみ │ ▶ 埼玉県(18件) │ └──────────────────────────┘

④ RAG基盤構築(gen)

nomic-embed-textでvenues.json 1390件をベクトル化。SQLiteに保存。187秒で完了(予測35分を大幅に下回った)。

✅ 完了

速度比較

nomic-embed-text(ベクトル化)
1.5秒 — 検索クエリのベクトル化
採用
🔍
SQLiteコサイン類似度検索
0.01秒 — 1390件から上位N件抽出
採用
🤖
Claude Haiku(回答生成)
1.4秒 — 今日の日付+会場データで自然な回答
採用
🐌
qwen2.5:7b(地名抽出)
14秒 — チャットには遅すぎる
夜間バッチ用に温存

⑤ rag.py 検索エンジン作成

距離×曜日×意味検索のハイブリッド検索エンジン。

✅ 完了
「今週立川あたりで開催している例会」 ↓ distance_mode=True 0.6km 立川市 柴崎学習館 → 木曜19:00 日曜14:00 0.8km 立川市 錦学習館 → 日曜14:00 1.1km 立川市社会福祉協議会 → 日曜13:00 水曜13:00

検索モード

曜日モード 今日・明日・明後日・曜日指定 → 該当曜日でフィルタ+距離ソート

距離モード 今週・来週 → 曜日問わず近い順

フォールバック 15km以内に0件 → 30km以内で近い順

⚠️ 発見した課題

🔴 東京都のday_of_week欠損問題

東京都204件中77件(38%)しか曜日データがない。iCalから取得していない例会は曜日未設定のまま。これがRAG検索精度低下の根本原因。

東京都の例会: 204件 曜日あり: 77件(38%) 曜日なし: 127件(62%)← 曜日フィルタで全部弾かれる

🟡 tama_danshu_ical.pyがcronに未登録

多摩地区(立川含む)のiCalスクリプトが毎日実行されていない。次回cronに追加する。

💡 設計思想の確認

4タブ、全部同じゴールへの4つの道

🗺️ マップタブ → 地図で視覚的に今日の例会を確認 📅 日程タブ → 近隣都道府県の例会を日付順に確認 📢 新着タブ → 例会変更・中止をいち早くキャッチ 🤖 かもちゃん → 話しかけるだけで今日の例会が出る ↓ 全部ここへ収束 ↓ 「今日いける例会が30秒でわかる」

かもちゃん 完成形の導線

① 例会を探す タップ ↓ 📍 GPS取得(自動) ↓ 【今日・あなたの周辺の例会】 ─ 今日(木曜)───────────── 🏠 立川断酒会(0.8km)19:00〜 🏠 錦断酒会(1.2km)19:00〜 [明日も見る] [今週見る] [場所を変える]

タップ2回・30秒以内で今日の例会が出る。自由入力ゼロ。かもちゃんがエスコートしてくれる設計。

🔧 app.js分割ロードマップ

バグの解析をやりやすくするためにapp.jsを機能ごとに分割中。触るついでに分離する「撃道スタイル」で進める。

schedule.js
日程タブ — 今日完了
news.js
新着タブ — 新着タブ改修のとき
map.js
マップ機能 — マップ触るとき
chat.js
かもちゃん連携 — かもちゃん改修のとき

🎯 次回やること

tama_danshu_ical.pyをcronに追加
多摩地区の曜日データを埋める → RAG精度向上
main.pyにrag.py組み込み
かもちゃんチャットでRAG検索を実際に使えるように
qa.json「例会を探す」フロー改修
GPS取得→RAG検索→今日の例会を即表示。タップ2回で30秒以内
新着タブ改修(news.js分離も同時に)
斯断酒会PDFリンク取得・スクレイピング30分ごと