テックスタック
採用技術
| カテゴリ |
技術名 |
バージョン |
用途 |
選定理由 |
| 言語 |
TypeScript |
v5.7 系(backend) / v5 系(frontend) |
フロント・バックエンド共通 |
型安全性と、OpenAPI からの型生成との親和性 |
| ランタイム(backend) |
Bun |
v1 |
実行・パッケージ管理・テスト起動 |
ネイティブ TS 実行と高速な依存解決 |
| フレームワーク(backend) |
Hono |
^4.6 |
HTTP サーバ |
軽量・エッジ/Lambda 適性が高い |
| API 定義(backend) |
@hono/zod-openapi |
^1.2 |
ルート定義から OpenAPI を自動生成 |
定義とハンドラを 1 か所に書け、スキーマが二重化しない |
| ORM |
Drizzle ORM |
^0.38 |
DB アクセス |
スキーマ定義から型を推論でき、SQL に近い記述ができる |
| DB |
PostgreSQL |
17 |
データ永続化 |
JSON カラムと enum の運用実績 |
| フレームワーク(frontend) |
Next.js |
16.1(App Router) |
管理画面 |
App Router によるルーティングとサーバコンポーネント |
| UI ライブラリ |
React |
19.2 |
画面描画 |
Next.js 16 の要件 |
| スタイリング |
Tailwind CSS |
v4 |
スタイル |
ユーティリティファーストで UI コンポーネントを内製 |
| サーバ状態管理 |
TanStack Query(React Query) |
^5.90 |
API キャッシュ・再検証 |
Orval が React Query 向けフックを生成する |
| API クライアント生成 |
Orval |
^8.1 |
OpenAPI から型とフックを生成 |
backend と frontend の結合点を自動化する |
| 認証 |
Google OAuth 2.0 + JWT(jose) |
jose ^5.9 |
ログインと API 認可 |
Google Workspace 前提の組織利用 |
| インフラ |
AWS Lambda / ECS Fargate / App Runner / ECR |
- |
実行環境 |
インフラストラクチャ を参照 |
| データ連携 |
Databricks |
なし(SQL Statement Execution API を fetch で直叩き) |
Creative Survey / Ask One の回答取得 |
読み取り専用。ドライバ依存を持たない |
主要ライブラリ
backend
| ライブラリ名 |
バージョン |
用途 |
hono |
^4.6.18 |
HTTP フレームワーク |
@hono/zod-openapi |
^1.2.0 |
OpenAPI 付きルート定義 |
@hono/swagger-ui |
^0.5.3 |
/docs の Swagger UI |
@hono/zod-validator |
^0.4.2 |
リクエスト検証 |
zod |
^4.0.0 |
スキーマ定義・環境変数検証 |
drizzle-orm |
^0.38.4 |
ORM |
drizzle-kit |
^0.30.4 |
スキーマ反映・マイグレーション・Studio |
pg |
^8.16.0 |
PostgreSQL ドライバ |
jose |
^5.9.6 |
JWT の署名・検証 |
googleapis |
^144.0.0 |
Google Calendar / Gmail |
@aws-sdk/client-ecs |
^3.1045.0 |
同期バッチの ECS タスク起動 |
csv-parse |
^6.1.0 |
CSV / TSV パース |
winston |
^3.17.0 |
構造化ログ |
uuid |
^11.0.5 |
アップロードファイル ID |
vitest |
^2.1.8 |
テストランナー |
frontend
| ライブラリ名 |
バージョン |
用途 |
next |
16.1.6 |
フレームワーク |
react / react-dom |
19.2.3 |
UI |
@tanstack/react-query |
^5.90.20 |
サーバ状態管理 |
orval |
^8.1.0 |
API クライアント生成(開発時) |
axios |
^1.13.4 |
HTTP(Orval の周辺依存) |
date-fns |
^4.1.0 |
日付処理 |
lucide-react |
^0.563.0 |
アイコン |
clsx / tailwind-merge |
^2.1.1 / ^3.4.0 |
クラス名の合成(cn()) |
tailwindcss |
^4 |
スタイリング |
開発ツール
| ツール |
用途 |
| ESLint |
静的解析(eslint.config.js / eslint.config.mjs) |
| Prettier |
フォーマット |
| husky + lint-staged |
コミット時に src/** へ prettier --write と eslint --fix |
| Vitest |
backend の単体テスト |
| Drizzle Studio |
DB の GUI 閲覧 |
| Swagger UI |
API の手動確認(/docs) |
frontend にテストランナーはない
フロントエンドにはテストランナーが導入されていない。型チェック(bun run check-types)と Lint が品質ゲートになる。
検討中・廃止予定
| 技術名 |
状態 |
備考 |
GET /api/v1/surveys/{surveyId}/respondents |
廃止予定 |
レガシーエンドポイント。/panels 系に置き換える |
arrangeSettings.step1.mainInterviewerId / subInterviewerId |
廃止予定 |
単数形フィールド。複数形の mainInterviewerIds / subInterviewerIds に移行済み |