qlitreさんのコード

📘 Honox + SQLite バックエンドAPI構成まとめ

🔧 技術スタック

  • Honox(Hono + JSX のフルスタックWebフレームワーク)
  • SQLite(Cloudflare D1 など)
  • TypeScript による型安全設計
  • スキーマ駆動API開発

🧠 アーキテクチャ概要

内容 備考
📦 schema テーブルごとのフィールド定義・JOIN情報・バリデーションルール 設定を書くだけでクエリやAPIバリデーションが自動生成される
🧩 sqlUtils.ts SELECT/INSERT/UPDATE/SUMMARYクエリなどを動的生成 schema情報に依存して構築されている
🚪 routes/api/[endpoint]/index.ts 一覧取得API(GET)/新規追加API(POST) /api/asset, /api/expense などに対応
📊 routes/api/[endpoint]/summary/index.ts 集計・グラフ用API(GET) ?groupby=category_id 等の動的集計が可能
🔎 フィルタ・ソート filters, orders クエリパラメータで高度な絞り込みが可能 filter=amount[greater_than]1000[and]date[greater_equal]2024-06-01 など

✅ 特徴とメリット

🔐 セキュリティ

  • 不正なテーブル・フィールドアクセスは schema による制御でブロック
  • SQLインジェクション対策:すべて .bind(...) で値バインド済み

🧱 拡張性

  • 新しいテーブルを追加したい場合、schema に追記するだけ
  • フィルター、ソート、JOIN、GROUP BY も自動で追従

💡 再利用性

  • クエリ生成・フォームバリデーション・レスポンス生成が一元管理
  • 管理画面、APIドキュメント、自動生成クライアントとの親和性◎

🚧 フロントエンドのやること

項目 内容
データ取得 fetch("/api/asset?filters=...")
新規追加 POST /api/expense で JSON 送信
表示処理 APIレスポンス(JSON)を受け取ってテーブル・グラフに変換
バリデーション (任意)Zodなどでクライアント側バリデーションも併用可

つまり、フロントエンドは基本的に「APIを呼ぶだけ」で済む!


📌 用語まとめ

用語 説明
schema テーブル構造や関連情報(JOINなど)を記述した定義
generateSelectQuery() SELECT + JOINクエリを自動で生成する関数
getAndValidateFormData() バックエンドでフォームデータをバリデーション&整形
generateSummaryQuery() 集計用のクエリを構築する(GROUP BY対応)
filters, orders GETクエリパラメータによる絞り込み・ソート指定

ブログ一覧に戻る