コンテンツにスキップ

テックスタック

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 仕様を自動生成する。

import { OpenAPIHono } from '@hono/zod-openapi';

const app = new OpenAPIHono();

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)

ValidationError
UnauthorizedError
ForbiddenError
NotFoundError
ConflictError
InternalServerError

Git フック

Lefthook

Git フックマネージャー。コミット前のリント・型チェックなどを自動実行する。