Back to list
interactive-inc

build-hono-app

by interactive-inc

1🍴 1📅 Jan 23, 2026

SKILL.md


name: build-hono-app description: TypeScript バックエンド開発スキル。Clean Architecture、レイヤー構成、Repository パターン、Use Case 実装、エラーハンドリングなど。API 開発時に使用。

TypeScript Backend Development

TypeScript バックエンドの設計・実装パターンを定義する。 Clean Architecture に基づくレイヤー構成で、保守性・テスト容易性を重視。

レイヤー構成

api/
├── domain/              # ドメイン層 (ビジネスロジック)
│   ├── entities/        # エンティティ
│   ├── values/          # 値オブジェクト
│   └── errors/          # ドメインエラー
├── application/         # アプリケーション層 (ユースケース)
├── infrastructure/      # インフラ層
│   ├── repositories/    # リポジトリ実装
│   ├── adapters/        # 外部サービスアダプター
│   └── converters/      # データ変換
├── interface/           # インターフェース層
│   ├── routes/          # HTTPハンドラー
│   ├── middlewares/     # ミドルウェア
│   ├── serializers/     # レスポンス変換
│   └── factory.ts       # Hono Factory
├── lib/                 # 共有ライブラリ (横断的関心事のみ)
│   ├── auth/            # 認証ユーティリティ
│   ├── constants/       # 定数
│   ├── crypto/          # 暗号化ユーティリティ
│   ├── session/         # セッション管理
│   ├── types/           # 型定義
│   ├── utils/           # ユーティリティ
│   └── errors.ts        # アプリケーションエラー
├── migrations/          # D1 マイグレーション
├── drizzle.schema.ts    # DB スキーマ定義
├── env.d.ts             # 型定義
└── index.ts             # エントリーポイント

依存関係のルール

Interface → Application → Infrastructure → Domain
                ↓              ↓            ↓
              Lib            Lib          Lib
  • 上位レイヤーは下位レイヤーに依存する
  • 下位レイヤーは上位レイヤーを知らない
  • Domain は最も内側で、外部依存がない
  • Lib は全レイヤーから参照可能 (横断的関心事のみ)

設計原則

Domain 層

  • Entity は DB の存在を知らない (fromRecord() のようなメソッドは定義しない)
  • DB レコードから Entity への変換は Repository (インフラ層) の責務
  • ファクトリメソッドは具体的な名前を使う (create() より createWithEmail())

Application 層 (Service)

  • throw しない。カスタムエラーを return する
  • 戻り値は Promise<Result | NotFoundError | ConflictError | ...>

Infrastructure 層

  • 外部サービス連携は全て Adapter として実装 (Lib には含めない)
  • メール送信、外部 API は Adapter の責務

Interface 層

  • result instanceof カスタムエラー でエラー判定
  • HTTPException に変換してユーザーフレンドリーなメッセージを設定

Lib 層

  • 横断的関心事のみ (認証、セッション、定数、ユーティリティ)
  • 外部サービス連携は含めない

命名規則

ファイル命名

レイヤーパターン
Entityxxx.entity.tscustomer.entity.ts
Valuexxx.value.tsemail.value.ts
Repositoryxxx.repository.tscustomer.repository.ts
Adapterxxx.adapter.tsemail.adapter.ts, payment.adapter.ts
Use Case動詞-名詞.tscreate-customer.ts, update-customer.ts
Routeresource.$param.tscustomers.$customer.ts

Service (Use Case) 命名

操作プレフィックス
作成create-create-customer.ts
更新update-update-customer.ts
削除delete-delete-customer.ts
取得fetch- / get-fetch-customer.ts
一括bulk-bulk-update-orders.ts
同期sync-sync-users.ts
Upsertupsert-upsert-profile.ts

Route ファイル命名

URLファイル名
/customerscustomers.ts
/customers/:customercustomers.$customer.ts
/customers/:customer/orderscustomers.$customer.orders.ts
/customers/:customer/orders/:idcustomers.$customer.orders.$id.ts
/customers/searchcustomers.search.ts

参照ファイル

各パターンの詳細は以下を参照:

ドメイン層

アプリケーション層

インフラ層

インターフェース層

共通

Score

Total Score

45/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon