Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗奈良県建築・入札情報収集・分析アプリ
naramaniaは、奈良県内22自治体の入札公告・落札結果を自動収集・分析するWebアプリケーションです。
naramania/
├── src/
│ ├── app/ # Next.jsページとAPIルート
│ ├── components/ # Reactコンポーネント
│ ├── scrapers/ # 入札情報スクレイパー(22自治体対応)
│ ├── services/ # 外部サービス連携(ニュース、AI)
│ └── types/ # TypeScript型定義
├── scripts/ # 一時スクリプト・デバッグファイル
├── public/ # 静的リソース
└── scraper_result.json # スクレイピング結果データ
| 自治体 | スクレイパー |
|---|---|
| 奈良県 | nara_pref.ts(self-hosted runner 必須) |
| 奈良市 | nara_city.ts |
| 橿原市 | kashihara_city.ts |
| 生駒市 | ikoma_city.ts |
| 大和高田市 | yamato_takada_city.ts |
| 大和郡山市 | yamatokoriyama_city.ts |
| 葛城市 | katsuragi_city.ts |
| 五條市 | gojo_city.ts |
| 御所市 | gose_city.ts |
| 天理市 | tenri_city.ts |
| 桜井市 | sakurai_city.ts |
| 宇陀市 | uda_city.ts |
| 田原本町 | tawaramoto_town.ts |
| 広陵町 | koryo_town.ts |
| 香芝市 | kashiba_city.ts |
| 川西町 | kawanishi_city.ts |
| 三宅町 | miyake_city.ts |
| 山添村 | yamazohiragawa_city.ts(YamazomuraScraper) |
| 平群町 | yamazohiragawa_city.ts(HiragawaScraper) |
| 安堵町 | ando_city.ts |
| 高取町 | takatori_ikaruga.ts(TakatoriTownScraper) |
| 斑鳩町 | takatori_ikaruga.ts(IkarugaTownScraper) |
| 三郷町 | sango_town.ts |
| 王寺町 | oji_town.ts |
| 大淀町 | oyodo_town.ts |
年度が替わってもページを追従できるよう、年度依存のURL・日付は
src/scrapers/common/fiscal_year.ts のヘルパーで動的に解決します。
.env.localファイルを作成し、以下の環境変数を設定します:
GOOGLE_GENERATIVE_AI_API_KEY=your_api_key_here
GOOGLE_GENERATIVE_AI_CHAT_MODEL=gemini-3.1-flash-lite
NODE_OPTIONS=--no-deprecation
Vercel では Project Settings > Environment Variables に同じ値を設定してください。
npm install
npm run dev
ブラウザで http://localhost:3000 にアクセスします。
すべての自治体の入札情報を収集する場合:
# PowerShellの場合
powershell -ExecutionPolicy Bypass -Command "cd naramania; npx tsx src/scrapers/index.ts"
# Bash/Command Promptの場合
npx tsx src/scrapers/index.ts
実行時間: 約7〜8分
scraper_result.jsonスクレイパーは以下のロジックで重複を除外します:
各自治体について、入札公告(入札情報) と 開札結果(入札結果) の両方を必ず見る。 どちらか片方だけを見ていると、次のどちらかが起こる。
年度替わりやページ追加でURLが変わっても追従できるよう、 個別ページのIDをハードコードせず、一覧・カテゴリ・indexページから 配下のページを都度解決する方針とする。
収集元の一覧は src/lib/municipality_sources.ts(サイト内の「収集元サイト」ページ)に
実際にスクレイパーが見ているURLを揃えてある。スクレイパーの定数を変えたら必ず両方直す。
片肺運転(公告だけ/結果だけ)の検知は自動化してある。
config/municipality_source_coverage.json の minAnnouncements / minResultsnpm run validate:quality … 保存済みデータに対して警告npm run audit:live-sources … 公開サイトへ実アクセスして自治体ごとに
公告N件 / 結果N件 を出力し、片側0件なら警告npm run report:coverage … 上記の結果を自治体ごとの表にして出力
(GitHub Actions 上では実行結果画面の Summary に表示される)スクレイパーを直したとき、実サイトに対して効いているかを確認する手順。
GitHub の Actions → Verify Source Coverage → Run workflow で
ブランチを選んで実行すると、実サイトへアクセスして自治体ごとの
公告N件 / 結果N件 が実行結果画面に表で出る。ブラウザだけで完結する。
このワークフローは permissions: contents: read で commit も push もしないため、
ブランチ上(PRレビュー中)で実行しても main に影響しない。
対して daily_scrape と live_source_audit は結果を main に commit & push する。
こちらは main 以外での実行時に commit/push をスキップするガードを入れてある
(ガードが無かった頃は、ブランチ上で手動実行するとそのブランチの中身が
main へ push されてしまう状態だった)。
なお workflow_dispatch はワークフローファイルが default ブランチ(main)に
存在しないと実行ボタンが出ない(GitHubの仕様)。新しい検証ワークフローを
追加した直後は、先にそれを main へ入れてから対象ブランチを選んで実行する。
建築・建物系ではない一般業務や古い案件を除外するため、共通フィルタを使用しています。
config/data_filters.json既存データへフィルタを再適用する場合:
npx tsx scripts/reapply_filter.ts
EPI 系自治体の巡回は src/scrapers/common/epi_cloud.ts に共通化してある。
「発注情報の検索」(公告)と「入札・契約結果情報」(結果)の両メニューを、
業務区分(工事・コンサル)× 対象年度ぶん巡回する。
スクレイピング結果を取得します。
スクレイピングを実行します(現在は既存データを返すのみ)。
建設関連ニュースを取得します(15分キャッシュ)。
AIによる案件解析を実行します。
入札チャットに質問を送ります。サイト内データを優先し、必要な場合は Gemini の Google Search grounding を使って Web 補足を返します。
npm run build
npm run build
npm start
または Vercel Platform から直接デプロイします。
新しいコンポーネントは src/components/ に追加します。
新しい自治体のスクレイパーは以下の手順で追加します:
src/scrapers/[municipality]_city.ts を作成Scraper インターフェースを実装src/scrapers/index.ts にインポートして登録Tailwind CSSを使用しています。クラス命名規則に従ってください。
MIT
プルリクエストを歓迎します。
問題やご要望は GitHub Issues までご連絡ください。