sasatech-next-architecture
15
总安装量
10
周安装量
#22386
全站排名
安装命令
npx skills add https://github.com/sasatech-labs/skills --skill sasatech-next-architecture
Agent 安装分布
claude-code
8
cursor
5
antigravity
4
opencode
3
codex
3
Skill 文档
SasaTech Architecture
ã¢ã¼ããã¯ãã£æ¦è¦
Feature-based Layer Architecture for Next.js (App Router + Supabase)
ã¬ã¤ã¤ã¼æ§æ
Handler ãªã¯ã¨ã¹ã/ã¬ã¹ãã³ã¹ãããªãã¼ã·ã§ã³ãèªè¨¼
â
Service ãã¸ãã¹ãã¸ãã¯ãè¤æ° Repository 飿º
â
Repository ãã¼ã¿ã¢ã¯ã»ã¹
Adapter å¤é¨ API 飿ºï¼Stripe, Resend çï¼
ãã£ã¬ã¯ããªæ§æ
src/
âââ app/ # Next.js App Router
â âââ (auth)/ # èªè¨¼ãå¿
è¦ãªã«ã¼ãã°ã«ã¼ã
â âââ (public)/ # å
¬éã«ã¼ãã°ã«ã¼ã
â âââ api/ # API Routes (èãã¨ã³ããªã¼ãã¤ã³ã)
â
âââ features/ # æ©è½åä½ã®ã¢ã¸ã¥ã¼ã«
â âââ [feature]/
â âââ index.ts # å
ŽAPI
â âââ 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çæå
ã¬ã¤ãã¨ã«ã¼ã«ã®éã
ãã®ã¹ãã«ã¯ ã¬ã¤ã 㨠ã«ã¼ã« ã®2種é¡ã®ããã¥ã¡ã³ãã§æ§æããã¦ãã¾ãã
| é ç® | ã¬ã¤ã | ã«ã¼ã« |
|---|---|---|
| ç®ç | ã¢ã¼ããã¯ãã£ãå®è£ ãã¿ã¼ã³ã®çè§£ãæ·±ãã | å®ãã¹ãå¶ç´ãæç¢ºã«å®ç¾©ãã |
| å 容 | HOW / WHY â è¨è¨ææ³ãã»ããã¢ããæé ãã³ã¼ãä¾ | DO / DON’T â NGä¾ã¨OKä¾ã«ããå¤å®åºæº |
| å½¢å¼ | ãã¥ã¼ããªã¢ã«å½¢å¼ | ã¡ã¿ãã¼ã¿ï¼impact, tagsï¼ä»ãã®çãã«ã¼ã«å½¢å¼ |
| èªãã¿ã¤ãã³ã° | ããã¸ã§ã¯ãåå æã®å¦ç¿ãè¨è¨å¤æã®åè | ã³ã¼ãå®è£ æã®æºæ 確èªãã³ã¼ãã¬ãã¥ã¼ |
ã¬ã¤ã
| ã¬ã¤ã | 説æ |
|---|---|
| architecture.md | Feature-based Layer Architecture ã®å ¨ä½è¨è¨ãã¬ã¤ã¤ã¼æ§æã責ååé¢ããã£ã¬ã¯ããªæ§æ |
| architecture/handler.md | Handler層ã®å®è£ ããªã¯ã¨ã¹ãå¦çãããªãã¼ã·ã§ã³ãèªè¨¼ãã§ãã¯ãã¨ã©ã¼ãã³ããªã³ã° |
| architecture/service.md | Service層ã®å®è£ ããã¸ãã¹ãã¸ãã¯ãRepository/Adapter飿ºããã©ã³ã¶ã¯ã·ã§ã³ç®¡ç |
| architecture/repository.md | Repository層ã®å®è£ ããã¼ã¿ã¢ã¯ã»ã¹ã®æ½è±¡åãSupabaseã¯ã¨ãªã®ã«ãã»ã«å |
| architecture/adapter.md | Adapter層ã®å®è£ ãå¤é¨ãµã¼ãã¹ï¼æ±ºæ¸ãã¡ã¼ã«ãAIçï¼ã¨ã®é£æºãã«ãã»ã«å |
| testing.md | ã¬ã¤ã¤ã¼ãã¨ã®ãã¹ãæ¦ç¥ãUnit / Integration ãã¹ãã®ç¯å²ã¨ã¢ãã¯æ¹é |
| database.md | ãã¼ã¿ãã¼ã¹è¨è¨ãã³ã¡ã³ãè¦ç´ããã¤ã°ã¬ã¼ã·ã§ã³ãSupabase ã¨ã®é£æº |
| logging.md | pino ã使ç¨ããæ§é åãã°ã®å®è£ ãã¬ã¤ã¤ã¼ãã¨ã®ãã°åºåæ¹é |
| setup.md | æ°è¦ããã¸ã§ã¯ãã®ã»ããã¢ããæé ãä¾åããã±ã¼ã¸ãåºç¤ãã¡ã¤ã«ã®é ç½® |
ã«ã¼ã«
ã«ãã´ãª
| ã«ãã´ãª | Prefix |
|---|---|
| ã¢ã¼ããã¯ã㣠| arch- |
| ãã¼ã¿ | data- |
| ãµã¼ãã¼ãµã¤ãä¿è· | server- |
| ã¹ãã¼ãã»åå®ç¾© | schema- |
| ã¬ã¹ãã³ã¹ | response- |
| ãã¹ã | test- |
| ããªãã¼ã·ã§ã³ | validation- |
| å½åè¦å | naming- |
| ããã³ãã¨ã³ã | frontend- |
ã¤ã³ãã¯ã
Impact ã¯ãéåæã«ã¢ã¼ããã¯ãã£ã¸ä¸ããå½±é¿ã®æ·±å»åº¦ã§å®ç¾©ãã¾ãã
| Impact | åºæº |
|---|---|
| CRITICAL | ã¢ã¼ããã¯ãã£ã®æ ¹å¹¹ãå£ãããéåããã¨ãã®è¨è¨ãã¿ã¼ã³èªä½ãæç«ããªã |
| HIGH | ã¢ã¼ããã¯ãã£ã®æ´åæ§ãä¿å®æ§ã大ããæãªã |
| MEDIUM | ã³ã¼ãã®å質ãä¸è²«æ§ãä½ä¸ããã |
| LOW | éçºä½é¨ããã¿ã¼ã³ã®çµ±ä¸ã«é¢ããæ¨å¥¨äºé |
ã¢ã¼ããã¯ã㣠(arch-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| arch-three-layers | CRITICAL | Handler â Service â Repository, Adapter ã®æ§æãå¿ ãçµç± |
| arch-feature-structure | CRITICAL | æ©è½åä½ã§ features/ ã«ã¢ã¸ã¥ã¼ã«å |
| arch-external-services | HIGH | Stripe, Resend çã®å¤é¨ãµã¼ãã¹ã¯ Adapter çµç± |
| arch-logging-strategy | MEDIUM | pino ã§æ§é åãã°ãconsole.log ç¦æ¢ |
ãã¼ã¿ (data-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| data-no-getall | HIGH | å ¨ä»¶åå¾ç¦æ¢ãMAX_LIMIT ã§ãµã¼ãã¼å´ä¸éãå¼·å¶ |
| data-pagination | HIGH | ãªã¹ãåå¾ã¯å¿ ããã¼ã¸ãã¼ã·ã§ã³ä»ãã§ç·ä»¶æ°ãè¿å´ |
| data-comment-required | LOW | ãã¼ãã«ã»ã«ã©ã ã«æ¥æ¬èªã³ã¡ã³ãå¿ é |
ãµã¼ãã¼ãµã¤ãä¿è· (server-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| server-supabase-via-api | CRITICAL | ã¯ã©ã¤ã¢ã³ããã Supabase ç´æ¥ä½¿ç¨ç¦æ¢ãAPI Route çµç±å¿ é |
| server-only-directive | HIGH | Service/Repository ã« import 'server-only' ãå¿
é ã§è¨è¿° |
| server-no-public-env | HIGH | æ©å¯æ
å ±ï¼Supabase, API ãã¼ï¼ã« NEXT_PUBLIC_ ç¦æ¢ |
ã¹ãã¼ãã»åå®ç¾© (schema-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| schema-single-source | HIGH | åå®ç¾©ã¯ schema.ts ã«ä¸å
åãåæ£ç¦æ¢ |
| schema-no-types-file | MEDIUM | Feature å
ã« types.ts ä½æç¦æ¢ |
| schema-zod-infer | MEDIUM | Input åã¯ææ¸ããã z.infer<typeof schema> ã§å°åº |
ã¬ã¹ãã³ã¹ (response-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| response-apperror | MEDIUM | ã¨ã©ã¼ã¯ AppError ã¯ã©ã¹ã§ã¹ãã¼ãçã® Error ç¦æ¢ |
| response-helpers | LOW | ok(), created(), notFound() çã®ãã«ãã¼ãä½¿ç¨ |
ãã¹ã (test-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| test-layer-mocking | HIGH | åã¬ã¤ã¤ã¼ã¯ç´ä¸ã®ä¾åã®ã¿ãã¢ã㯠|
| test-server-only | MEDIUM | server-only ã¯ãã¹ãç°å¢ã§ã¢ãã¯å¿
é |
| test-file-location | LOW | ãã¹ããã¡ã¤ã«ã¯ __tests__ ã«é
ç½® |
| test-naming | LOW | ãã¹ãã¯æ¥æ¬èªã§æå³ãæç¢ºã« |
ããªãã¼ã·ã§ã³ (validation-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| validation-body | MEDIUM | POST/PATCH ã®ãªã¯ã¨ã¹ãããã£ã¯ Zod ã§ããªãã¼ã·ã§ã³ |
| validation-params | MEDIUM | URL ãã©ã¡ã¼ã¿ï¼ID çï¼ã Zod ã§ããªãã¼ã·ã§ã³ |
å½åè¦å (naming-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| naming-files | LOW | ãã¡ã¤ã«ã»ãã£ã¬ã¯ããªå㯠kebab-caseï¼ãã¬ã¼ã ã¯ã¼ã¯è¦ç´ãã¡ã¤ã«ãé¤ãï¼ |
| naming-methods | LOW | Repository: findMany/findByIdãService: get*/create* |
ããã³ãã¨ã³ã (frontend-)
| ã«ã¼ã« | Impact | 説æ |
|---|---|---|
| frontend-fetcher | LOW | Feature ãã¨ã« fetcher.ts ã使ã㦠API å¼ã³åºããéç´ |
| frontend-hooks | LOW | SWR ã使ç¨ãã Hook ãã¿ã¼ã³ã§ãã¼ã¿åå¾ |