テックスタック
guinness-backend モノレポ全体の技術スタックをまとめます。
概要
| 分類 | 採用技術 |
|---|---|
| 言語 | TypeScript |
| ランタイム | Bun |
| Web フレームワーク | Hono |
| ORM | Drizzle ORM |
| バリデーション | Zod v4 |
| 認証 | AWS Cognito(JWT Bearer) |
| データベース | PostgreSQL(api-user / api-admin) |
| クラウド | AWS(S3, SQS, Cognito) |
| ログ | Winston |
| テスト | Vitest + Testcontainers |
| リント / フォーマット | Biome |
| モノレポ | Turborepo |
| Git フック | Lefthook |
ランタイムとフレームワーク
Bun
JavaScript / TypeScript ランタイム。Node.js 互換でありながら高速な起動・実行を提供する。パッケージマネージャー・テストランナーとしても使用。
Hono(v4.12)
軽量な Web フレームワーク。@hono/zod-openapi プラグインを組み合わせて、Zod スキーマから OpenAPI 仕様を自動生成する。
Turborepo
モノレポのビルドオーケストレーター。タスクのキャッシュと並列実行を管理する。
データベース
Drizzle ORM
TypeScript ファーストの ORM。型安全なクエリビルダーとして利用する。スキーマ定義は packages/models に集約。
import { db } from '@/lib/database';
import { users } from '@guinness-backend/models';
import { eq, isNull } from 'drizzle-orm';
const user = await db.select().from(users).where(eq(users.id, userId)).limit(1);
Drizzle Kit
スキーママイグレーションツール。PostgreSQL のマイグレーションは apps/migration-pg で管理する。
PostgreSQL
api-user と api-admin が使用する database。管理者アカウント、セッション、組織、プロジェクト、authoritative な Design/Code workflow row、current
codebase_index control row、user-authored codebase_rule record、user identity を
保存する。Des2Code result は current S3 object に保持する。
バリデーション
Zod(v4)
スキーマバリデーションライブラリ。以下の用途で使用する。
- リクエストボディ / パスパラメータ / クエリパラメータの検証
- 環境変数の検証(
config/env.ts) - OpenAPI コンポーネントスキーマの定義
const schema = z.object({
organization_id: z.string().uuid(),
page: z.number().int().min(1).default(1),
});
認証
AWS Cognito
JWT Bearer トークンによる認証基盤。api-user と api-admin でプールを分離する。
| アプリ | プール種別 |
|---|---|
| api-user | アプリプール(エンドユーザー) |
| api-admin | 管理者プール(4D スタッフ) |
トークン検証ロジックは packages/utils/src/cognito-jwt.ts に集約。
AWS サービス
| サービス | 用途 |
|---|---|
| Cognito | ユーザー認証・JWT 発行 |
| S3 | アセットファイル(スクリーンショット等)のストレージ |
| SQS | AI 変換処理のキューイング(Des2Code など) |
ログ
Winston
構造化ログライブラリ。設定は packages/utils/src/logger.ts に集約。
logger.info('Operation completed', {
operation: 'user.findById',
duration: 123,
requestId: 'uuid',
});
| レベル | 用途 |
|---|---|
info |
正常な操作の記録 |
warn |
回復可能な問題 |
error |
失敗・例外 |
debug |
詳細なデバッグ情報(開発環境のみ) |
テスト
Vitest
テストランナー。グローバルセットアップは packages/guinness-backend-sdk/src/test-utils/vitest-global-setup.ts で管理。
Testcontainers(@testcontainers/postgresql)
インテグレーションテスト用に実際の PostgreSQL コンテナを起動する。packages/guinness-backend-sdk/src/test-utils/postgres-container.ts で設定。
リント / フォーマット
Biome
リントとフォーマットを一元管理するツール。ESLint + Prettier の代替として使用する。
共有パッケージ
モノレポ内の packages/ に共通ロジックを集約する。
| パッケージ | 主な内容 |
|---|---|
@guinness-backend/models |
Drizzle ORM の PostgreSQL スキーマ |
@guinness-backend/utils |
JWT 検証、エラークラス、ページネーション、ロガー、暗号化、レスポンスフォーマット |
@guinness-backend/guinness-backend-sdk |
Testcontainers セットアップ、Vitest グローバルセットアップ、共有バックエンドヘルパー |
@guinness-backend/typescript-config |
共有 tsconfig プリセット |
カスタムエラークラス(packages/utils/src/error.ts)
Git フック
Lefthook
Git フックマネージャー。コミット前のリント・型チェックなどを自動実行する。