📘 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クエリパラメータによる絞り込み・ソート指定 |