Chiinavi について
全国の自治体サイトと移住ポータルをクロールし、 AI+ルールベース抽出で「地域おこし協力隊」と移住関連求人を集約した検索プラットフォームです。
SvelteKit を Cloudflare Pages の Edge で動かし、データは Cloudflare D1 から配信しています。 個人開発・公開ポートフォリオとして運営しているプロジェクトです。
公開データの集計
技術的見どころ
AI による募集要項の構造化と、ルールベースの正規化を組み合わせて、PDF を含む自治体の 多様な掲載フォーマットから求人情報を抽出。lifecycle 判定(明示的終了 / 404 / 期限切れ)も自動化。
SvelteKit + Cloudflare Pages Functions + D1 の構成。 Worker isolate のコールドスタートを考慮したキャッシュ設定で、地図ページの自治体ポップアップも 同オリジン API でレスポンスが軽い。
求人詳細ページで Schema.org JobPosting の JSON-LD を出力。 動的 OG 画像(satori + resvg-wasm)と sitemap.xml で SNS シェアと検索流入を後押し。
運用機能と AI の生入出力は配信物に載せない設計。配信向けの D1 は PUBLIC_JOB_DETAIL_FILTER を通過したレコードだけを返す。
Playwright + axe-core でアクセシビリティ E2E を回し、Lighthouse CI で パフォーマンス・SEO の劣化を検知。色コントラストとフォーカス可視化を厳しめに維持。
自治体の代表点で公開求人を地図上に集約。数百自治体規模でも快適に描画できるよう Canvas レンダラを優先し、Leaflet 資産は self-host で CSP に整合。
データ運用の強み
- lifecycle 管理: 明示的な終了文言・404・deadline 超過を検出して
recruitment_statusを更新。終了済み求人は自動で一覧から外れる。 - 重複検出: URL 正規化と source_scope_key で同一求人を識別し、 外部ポータル経由の重複(auto_merged)と人手マージ(merged)を区別。 誤検出を防ぐため、人間レビュー前の候補は非表示にせず温存。
- 都道府県・自治体カバー: 全国の自治体メタデータ(コード・座標)を保持し、 公開求人が紐づく自治体のみ集計対象とする。
安全な公開ポリシー
運用機能と内部データは認証で保護し、公開物には載せていません。 公開しない情報の一覧は 公開データ仕様の §5 を参照してください。
スクリーンショットや動画を共有する場合も、運用画面・連絡先・実在の担当者氏名はマスクします。