構成

データ

  • 掲載データYAML + Pydantic(スキーマ・参照整合性の検証)

ビルド

  • 静的サイト生成Python 3.12 / Jinja2(自作)
  • ブラウザ側TypeScript(strict)

サーバー

  • APIFastAPI / SQLite
  • 巡回httpx / Playwright

運用

  • 配信Caddy / systemd
  • CI/CDGitHub Actions → rsync

技術的なポイント

  • 検索用のサーバーが要らない検索 — 検索用の JSON をビルドのときに作っておき、絞り込みと比較はブラウザで行います。
  • 変化の検知と人のレビュー — ページの本文を整えて保存し、数値を含む大事な変更だけを通知します。機械はデータを書き換えません。データへの反映には、必ず人のレビューを通します。
  • 堅いセキュリティ
    • パスワードは argon2 でハッシュにして保存します。
    • 応答時間からアカウントの有無を推測されないようにしています(タイミング攻撃の対策)。
    • ログインの試行回数を制限しています。
    • SQL はすべてパラメータ化しています。
    • 外部サイトへ勝手に転送されないようにしています(オープンリダイレクトの防止)。
  • 作り直せるサーバー
    • サーバーの構築はスクリプトで管理しています。ファイアウォール、fail2ban、自動更新、権限を最小限にする設定まで含みます。
    • デプロイの経路は 1 本にまとめています。
実績一覧へ

Contact

開発のご相談・お見積りは、
お気軽にどうぞ。