Feature-Based-Layered-Architecture

Feature-Based Layered Architecture for Next.js (App Router) with Supabase. Use when creating API routes, services, repositories, or components with TypeScript. Covers Handler/Service/Repository/Adapter layers, Zod validation, and feature module structure.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "Feature-Based-Layered-Architecture" with this command: npx skills add https://github.com/supabase/agent-skills

SasaTech Architecture

概要

Feature-Based Layered Architecture for Next.js (App Router) with Supabase のスキル。

Handler / Service / Repository / Adapter の4レイヤー構成と、機能(Features)単位のモジュール分割パターンを定義する。 ガイド(設計思想・実装方法)とルール(制約・判定基準)の2種類のドキュメントで構成する。

ガイドとルール

項目ガイドルール
目的アーキテクチャの理解を深める実装時の制約を定義する
内容HOW/WHY — 設計思想、実装方法、コード例DO/DON'T — 判定基準、NG/OK例
形式チュートリアル形式構造化されたルール形式
使用場面学習時、設計判断時実装時、コードレビュー時
配置guides/rules/

How to Use

このスキルと併せて、以下の外部スキルの導入を推奨する。

npx skills add https://github.com/supabase/agent-skills --skill supabase-postgres-best-practices
npx skills add https://github.com/vercel-labs/agent-skills --skill vercel-react-best-practices
npx skills add https://github.com/vercel-labs/agent-skills --skill web-design-guidelines
スキル用途
supabase-postgres-best-practicesSupabase / PostgreSQL のクエリ最適化、RLS、マイグレーション
vercel-react-best-practicesReact / Next.js のコンポーネント設計、パフォーマンス最適化
web-design-guidelinesアクセシビリティ、レスポンシブデザイン、UI/UX

Default Stack

カテゴリ技術
FrameworkNext.js (App Router)
Database / BaaSSupabase
LanguageTypeScript
ValidationZod
Data FetchingSWR
Loggingpino
FormatterBiome
LinterBiome + ESLint

About Feature-Based Layered Architecture

Feature-Based Layered Architecture for Next.js (App Router) with Supabase

レイヤー構成

Handler                 リクエスト/レスポンス、バリデーション、楽観的認証
        ↓
Service                 ビジネスロジック、厳密な認可、複数 Repository 連携
        ↓
Repository              データアクセス
Adapter                 外部 API 連携(Stripe, Resend 等)

ディレクトリ構成

src/
├── app/                      # Next.js App Router
│   ├── (auth)/               # 認証が必要なルートグループ
│   ├── (public)/             # 公開ルートグループ
│   └── api/                  # API Routes (薄いエントリーポイント)
│
├── features/                 # 機能単位のモジュール
│   └── [feature]/
│       ├── index.server.ts   # サーバー専用の公開API(Service, Handler)
│       ├── index.client.ts   # クライアント利用可の公開API(Fetcher, 型)
│       └── core/
│           ├── schema.ts     # Zodスキーマ + 型定義
│           ├── handler.ts    # リクエスト / レスポンス処理 (server-only)
│           ├── service.ts    # ビジネスロジック (server-only)
│           ├── repository.ts # データアクセス (server-only)
│           ├── adapter.ts    # 外部API連携 (server-only)
│           ├── fetcher.ts    # API呼び出し
│           └── hooks.ts      # SWR Hook等
│
├── components/               # 共通UIコンポーネント
├── hooks/                    # 共通Hooks
├── lib/                      # ユーティリティ
│   └── adapters/             # 外部サービス連携
└── types/                    # 共通型定義、Supabase生成型

Guides

ガイド説明
architecture.mdFeature-based Layer Architecture の全体設計。レイヤー構成、責務分離、ディレクトリ構成
architecture/handler.mdHandler層の実装。リクエスト処理、バリデーション、楽観的認証、エラーハンドリング
architecture/service.mdService層の実装。ビジネスロジック、厳密な認可、Repository/Adapter連携、トランザクション管理
architecture/repository.mdRepository層の実装。データアクセスの抽象化、Supabaseクエリのカプセル化
architecture/adapter.mdAdapter層の実装。外部サービス(決済、メール、AI等)との連携をカプセル化
authentication.md二段階認証・認可戦略。楽観的認証(Handler)と厳密な認可(Service)の実装パターン
testing.mdレイヤーごとのテスト戦略。Unit / Integration テストの範囲とモック方針
database.mdデータベース設計。コメント規約、マイグレーション、Supabase との連携
logging.mdpino を使用した構造化ログの実装。レイヤーごとのログ出力方針
setup.md新規プロジェクトのセットアップ手順。依存パッケージ、基盤ファイルの配置
fetch-strategy.mdデータ取得戦略。SSR/CSRの選択基準と実装パターン
error-handling.mdAppErrorクラスとwithHTTPErrorによるエラーハンドリング設計
wrappers.mdwithHTTPError(Handler)のラッパーユーティリティ

Rules

カテゴリ

カテゴリPrefix
アーキテクチャarch-
データdata-
サーバーサイド保護server-
スキーマ・型定義schema-
レスポンスresponse-
テストtest-
バリデーションvalidation-
命名規則naming-
フロントエンドfrontend-

インパクト

Impact は、違反時にアーキテクチャへ与える影響の深刻度で定義する。

Impact基準
CRITICALアーキテクチャの根幹が壊れる。違反するとこの設計パターン自体が成立しない
HIGHアーキテクチャの整合性や保守性を大きく損なう
MEDIUMコードの品質や一貫性を低下させる
LOW開発体験やパターンの統一に関する推奨事項

アーキテクチャ (arch-)

ルールImpact説明
arch-three-layersCRITICALHandler → Service → Repository, Adapter の構成を必ず経由
arch-feature-structureCRITICAL機能単位で features/ にモジュール化
arch-external-servicesHIGHStripe, Resend 等の外部サービスは Adapter 経由
arch-logging-strategyMEDIUMpino で構造化ログ、console.log 禁止
arch-fetch-strategyCRITICALSSR/CSR問わず、fetcher経由でAPI Route呼び出し
arch-logging-levelsMEDIUMログレベルをレイヤーと状況に応じて使い分け
arch-auth-strategyHIGHHandler層で楽観的認証、Service層で厳密な認可。共有ヘルパー関数禁止
arch-auth-operationsHIGHSignOut、SignInWithOTP等の認証操作はService層に実装、Handler層での直接実行禁止
arch-public-apiMEDIUMFeature の公開APIは index.server.ts(Service, Handler)と index.client.ts(Fetcher, 型)で分離管理
arch-handler-route-separationHIGHAPI Routeは薄いエントリーポイントに限定、ロジックはHandler層に分離
arch-transaction-rpc-requiredHIGH複数テーブル更新のトランザクション処理はSupabase RPC関数を使用
arch-adapter-placementMEDIUM汎用Adapterはlib/adapters/、Feature固有Adapterはfeatures/*/core/に配置
arch-feature-adapter-isolationMEDIUMFeature内Adapterが他Featureの内部Adapterに依存することを禁止

データ (data-)

ルールImpact説明
data-paginationHIGH全件取得禁止、MAX_LIMITでサーバー側上限を強制、ページネーション必須
data-comment-requiredLOWテーブル・カラムに日本語コメント必須
data-rls-requiredCRITICAL全テーブルでRLS有効化必須、最低1つのポリシーを定義
data-migration-cli-requiredMEDIUMマイグレーションファイルはSupabase CLIで生成、手動作成禁止
data-update-trigger-requiredMEDIUM全テーブルにupdated_at/update_user自動更新トリガーを適用
data-select-minimalMEDIUMselect('*')を避け、必要なカラムのみを指定

サーバーサイド保護 (server-)

ルールImpact説明
server-supabase-via-apiCRITICALクライアントから Supabase 直接使用禁止、API Route 経由必須
server-only-directiveHIGHHandler/Service/Repository/Adapter に import 'server-only' を必須で記述
server-no-public-envHIGH機密情報(Supabase, API キー)に NEXT_PUBLIC_ 禁止
server-webhook-signature-validationCRITICALWebhook署名検証必須、署名なしでのペイロードパース禁止

スキーマ・型定義 (schema-)

ルールImpact説明
schema-single-sourceHIGH型定義は schema.ts に一元化、types.ts 作成禁止
schema-zod-inferMEDIUMInput 型は手書きせず z.infer<typeof schema> で導出

レスポンス (response-)

ルールImpact説明
response-with-http-errorHIGHHandler関数は withHTTPError でラップ必須
response-apperrorMEDIUMエラーは AppError クラスでスロー、生の Error 禁止
response-helpersLOWAppResponse.ok(), AppResponse.created() 等のレスポンスヘルパーを使用
response-adapter-errorsHIGHAdapter層は外部APIエラーをAppErrorに変換してスロー

テスト (test-)

ルールImpact説明
test-layer-mockingHIGH各レイヤーは直下の依存のみをモック
test-server-onlyMEDIUMserver-only はテスト環境でモック必須
test-file-locationLOWテストファイルは __tests__ に配置
test-namingLOWテストは日本語で意図を明確に

バリデーション (validation-)

ルールImpact説明
validation-requestMEDIUMリクエスト入力値(ボディ、パスパラメータ、クエリパラメータ)をZodでバリデーション

命名規則 (naming-)

ルールImpact説明
naming-filesLOWファイル・ディレクトリ名は kebab-case(フレームワーク規約ファイルを除く)
naming-methodsLOWRepository: findMany/findById、Service: get*/create*
naming-exportsMEDIUM_ prefix内部実装 + ファイル末尾でexport集約

フロントエンド (frontend-)

ルールImpact説明
frontend-data-fetchingLOWFeatureごとにfetcher.tshooks.tsを作成、コンポーネントから直接fetch禁止

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

sasatech-next-architecture

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

Self Updater

⭐ OPEN SOURCE! GitHub: github.com/GhostDragon124/openclaw-self-updater ⭐ ONLY skill with Cron-aware + Idle detection! Auto-updates OpenClaw core & skills, an...

Registry SourceRecently Updated
1110
Profile unavailable
Coding

ClawHub CLI Assistant

Use the ClawHub CLI to publish, inspect, version, update, sync, and troubleshoot OpenClaw skills from the terminal.

Registry SourceRecently Updated
21.9K
Profile unavailable