backend-architecture-guidelines
1
总安装量
1
周安装量
#41688
全站排名
安装命令
npx skills add https://github.com/asakuno/template-repository --skill backend-architecture-guidelines
Agent 安装分布
amp
1
opencode
1
kimi-cli
1
github-copilot
1
gemini-cli
1
Skill 文档
Backend Architecture Guidelines – 7-Layer Laravel-Native
This skill provides architectural guidelines for Laravel applications following a 7-layer Laravel-native architecture.
Table of Contents
- How to Use This Skill
- Architecture Overview
- Dependency Rules
- Layer Responsibilities
- Static Analysis with Deptrac
- Anti-Patterns to Avoid
- Decision Framework
- Architecture Decision Checklist
- Reference Documentation
How to Use This Skill
Quick Reference – Phase 1: Architecture Planning
Architecture Decision Checklist:
- è¦ä»¶ããé©åãªã¬ã¤ã¤ã¼ãæ±ºå® (Layer Responsibilities)
- ä¾åé¢ä¿ã«ã¼ã«ãæ¤è¨¼ (Dependency Rules)
- DTOè¨è¨ï¼Laravel Dataï¼ãæ¤è¨
- Repository ã®å¿ è¦æ§ã夿 (Decision Framework)
- Anti-patternsãã§ã㯠(Anti-Patterns)
- Deptracè¨å®ãè¨ç»
詳細ãªè¦ç´:
.claude/rules/backend/– ã¬ã¤ã¤ã¼æ§é ãDTOããã¹ããã³ã¼ãã£ã³ã°è¦ç´ã®è©³ç´°
Architecture Overview
7層ã¬ã¤ã¤ã¼ãã¢ã¼ããã¯ãã£ï¼Laravel-nativeï¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Presentation Layer â
â (Controller, Middleware, Inertia) â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââ
â
â¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Request Layer â
â (FormRequest, Validation) â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââ
â
â¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â UseCase Layer â
â (Business Logic, DTO) â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââ
â
â¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Service Layer â
â (Shared/Reusable Logic) â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââ
â
â¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Repository Layer â
â (Data Access Abstraction) â
âââââââââââââââââââââââââââââââ¬ââââââââââââââââââââââââââââââââ
â
â¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Model Layer â
â (Eloquent Models) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
â¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Resource Layer â
â (JSON Response Transformation) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ãã£ã¬ã¯ããªæ§é (app/ é
ä¸ã«ãã©ããé
ç½®)
app/
âââ Http/
â âââ Controllers/
â â âââ Api/ # API Controllersï¼REST APIï¼
â â âââ Web/ # Web Controllersï¼Inertia.jsç¨ï¼
â âââ Requests/ # FormRequestsï¼ããªãã¼ã·ã§ã³ï¼
â âââ Resources/ # API Resourcesï¼JSONã¬ã¹ãã³ã¹ï¼
âââ UseCases/ # UseCasesï¼ãã¸ãã¹ãã¸ãã¯ï¼
â âââ {Resource}/
â âââ Create{Resource}UseCase.php
â âââ Update{Resource}UseCase.php
âââ Services/ # Servicesï¼å
±éãã¸ãã¯ï¼
âââ Repositories/ # Repositoriesï¼ãã¼ã¿ã¢ã¯ã»ã¹ï¼
â âââ {Resource}/
â âââ {Resource}RepositoryInterface.php
â âââ {Resource}Repository.php
âââ Data/ # DTOsï¼Laravel Dataï¼
â âââ {Resource}/
â âââ Create{Resource}Data.php
â âââ Update{Resource}Data.php
âââ Models/ # Eloquent Models
âââ Policies/ # Policiesï¼èªå¯ï¼
âââ Enums/ # Enumsï¼åæåï¼
Dependency Rules
åºæ¬ã«ã¼ã«
ä¾åã¯ä¸ä½å±¤ããä¸ä½å±¤ã¸ã®ä¸æ¹åã®ã¿
Presentation â Request â UseCase â Service/Repository â Model â Resource
åã¬ã¤ã¤ã¼ã®ä¾åé¢ä¿
| ã¬ã¤ã¤ã¼ | ä¾åå¯è½ | ä¾åç¦æ¢ |
|---|---|---|
| Presentation (Controllers) | Request, UseCase, Resource | Modelç´æ¥, Serviceç´æ¥ |
| Request (FormRequests) | DTO (Laravel Data) | Model, UseCase |
| UseCase | Repository Interface, Service, Policy | Controller, Request |
| Service | Repository, Model | Controller, UseCase |
| Repository | Model | Controller, UseCase |
| Model | ãªãï¼æä¸å±¤ï¼ | å ¨ã¦ã®ä¸ä½å±¤ |
| Resource | Model | Controller, UseCase |
Layer Responsibilities
å層ã®è²¬åä¸è¦§
| ã¬ã¤ã¤ã¼ | 責å | é ç½® |
|---|---|---|
| Presentation | HTTP Request/Response, èªå¯ãã§ã㯠| app/Http/Controllers/ |
| Request | ããªãã¼ã·ã§ã³ãDTO夿 | app/Http/Requests/ |
| UseCase | ãã¸ãã¹ãã¸ãã¯ããã©ã³ã¶ã¯ã·ã§ã³å¶å¾¡ | app/UseCases/ |
| Service | æ±ç¨çãªãã¸ãã¹ãã¸ãã¯ï¼è¤æ°UseCaseã§å ±æï¼ | app/Services/ |
| Repository | ãã¼ã¿ã¢ã¯ã»ã¹æ½è±¡åãè¤éãªã¯ã¨ãª | app/Repositories/ |
| Model | ãã¡ã¤ã³ã¢ãã«ããªã¬ã¼ã·ã§ã³å®ç¾© | app/Models/ |
| Resource | JSONã¬ã¹ãã³ã¹æ´å½¢ | app/Http/Resources/ |
Web Controllers vs API Controllers
| ç¨®å¥ | 責å | å½å |
|---|---|---|
| Web Controller | åæãã¼ã¸æç»ãéçãã¹ã¿ã¼ãã¼ã¿æä¾ | {Resource}PageController |
| API Controller | CRUDæä½ãåçãã¼ã¿å¦ç | {Resource}Controller |
ð 詳細: .claude/rules/backend/02-layers.md
Static Analysis with Deptrac
Deptrac ã使ç¨ãã¦ã¢ã¼ããã¯ãã£å¢çãéçè§£æã§æ¤è¨¼ããã
# deptrac/layer.yaml
deptrac:
paths:
- ./app
layers:
- name: Presentation
collectors:
- type: directory
value: app/Http/Controllers
- name: Request
collectors:
- type: directory
value: app/Http/Requests
- name: UseCase
collectors:
- type: directory
value: app/UseCases
- name: Service
collectors:
- type: directory
value: app/Services
- name: Repository
collectors:
- type: directory
value: app/Repositories
- name: Model
collectors:
- type: directory
value: app/Models
- name: Resource
collectors:
- type: directory
value: app/Http/Resources
ruleset:
Presentation:
- Request
- UseCase
- Resource
Request:
- Data
UseCase:
- Repository
- Service
- Policy
Service:
- Repository
- Model
Repository:
- Model
Resource:
- Model
Model: []
# æ¤è¨¼ã³ãã³ã
./vendor/bin/deptrac analyse --config-file=deptrac/layer.yaml
Anti-Patterns to Avoid
1. Controller ã§ã®ãã¸ãã¹ãã¸ãã¯
// â WRONG
class PostController extends Controller
{
public function store(Request $request)
{
// ãã¸ãã¹ãã¸ãã¯ãControllerã«
if (Post::where('user_id', auth()->id())->count() > 10) {
throw new \Exception('Limit exceeded');
}
$post = Post::create($request->all());
return response()->json($post);
}
}
// â
CORRECT
class PostController extends Controller
{
public function store(StorePostRequest $request, CreatePostUseCase $useCase)
{
$data = $request->getCreatePostData();
$post = $useCase->execute($data);
return response()->json(new PostResource($post), 201);
}
}
2. UseCase ã§ã® HTTP ä¾å
// â WRONG
class CreatePostUseCase
{
public function execute(Request $request): Post // HTTPä¾å
{
return Post::create($request->all());
}
}
// â
CORRECT
class CreatePostUseCase
{
public function execute(CreatePostData $data): Post // DTOã使ç¨
{
return $this->repository->create(...);
}
}
3. Web Controller ã§ã®åçãã¼ã¿æä¾
// â WRONG
class PostPageController extends Controller
{
public function index()
{
return Inertia::render('Post/Index', [
'posts' => Post::all(), // åçãã¼ã¿ãWeb Controllerã§
]);
}
}
// â
CORRECT
class PostPageController extends Controller
{
public function index()
{
return Inertia::render('Post/Index', [
'statusOptions' => PostStatus::toSelectArray(), // éçãã¼ã¿ã®ã¿
]);
// åçãã¼ã¿ã¯Reactå´ããAPIçµç±ã§åå¾
}
}
Decision Framework
Repository ã使ãã¹ãã±ã¼ã¹
| ã±ã¼ã¹ | çç± |
|---|---|
| è¤éãªã¯ã¨ãª | è¤æ°ãã¼ãã«çµåããµãã¯ã¨ãªãéè¨å¦ç |
| ãã©ã³ã¶ã¯ã·ã§ã³å¶å¾¡ | è¤æ°ã®DBæä½ã1ã¤ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§ç®¡ç |
| ãã¹ãå®¹ææ§ | ã¢ãã¯å¯è½ãªã¤ã³ã¿ã¼ãã§ã¼ã¹æä¾ |
Repository ã使ããªãã¦ãè¯ãã±ã¼ã¹
| ã±ã¼ã¹ | çç± |
|---|---|
| ã·ã³ãã«ãª CRUD | Eloquent ã®æ¨æºæ©è½ã§åå |
| åä¸ã¢ãã«æä½ | è¤éãªã¯ã¨ãªãã¸ãã¯ããªã |
ð 詳細: .claude/rules/backend/02-layers.md
Service ã使ãã¹ãã±ã¼ã¹
| ã±ã¼ã¹ | ä¾ |
|---|---|
| è¤æ°UseCaseéã§å ±æããããã¸ã㯠| ãã¡ã¤ã«ã¨ã¯ã¹ãã¼ããéç¥éä¿¡ |
| å¤é¨ãµã¼ãã¹é£æº | APIå¼ã³åºããã¡ã¼ã«éä¿¡ |
| è¤éãªè¨ç®å¦ç | ã¬ãã¼ãéè¨ãçµ±è¨è¨ç® |
Architecture Decision Checklist
ã¬ã¤ã¤ã¼é ç½®
- ã³ã¼ãã¯æ£ããã¬ã¤ã¤ã¼ã«é ç½®ããã¦ãããï¼
- ä¾åæ¹åã¯ä¸ä½âä¸ä½ã®ä¸æ¹åãï¼
- ãã¸ãã¹ãã¸ãã¯ã¯ UseCase ã«éç´ããã¦ãããï¼
Controller è¨è¨
- Controller 㯠HTTP handling ã®ã¿ãï¼
- UseCase ãå¼ã³åºãã¦ãããï¼
- Web Controller ã¯éçãã¼ã¿ã®ã¿æä¾ãã¦ãããï¼
UseCase è¨è¨
- Input DTO (Laravel Data) ã使ç¨ãã¦ãããï¼
- Repository Interface çµç±ã§ã¢ã¯ã»ã¹ãã¦ãããï¼
- HTTP ä¾åããªããï¼
Repository è¨è¨
- Interface 㨠Implementation ãåé¢ããã¦ãããï¼
- ãã©ã³ã¶ã¯ã·ã§ã³å¶å¾¡ãé©åãï¼
- Eloquent Model ãè¿ãã¦ãããï¼
DTO è¨è¨
-
#[TypeScript()]attribute ãä»ä¸ããã¦ãããï¼ -
readonlyproperty ã使ç¨ãã¦ãããï¼ - FormRequest ã« DTO 夿ã¡ã½ããããããï¼
Reference Documentation
詳細ãªå®è£ ã¬ã¤ãã¨ä¾:
.claude/rules/backend/01-overview.md– ã¢ã¼ããã¯ãã£å ¨ä½å.claude/rules/backend/02-layers.md– åã¬ã¤ã¤ã¼ã®è©³ç´°è²¬åã¨ã³ã¼ãä¾.claude/rules/backend/03-dto-data.md– Laravel Data ã«ãã DTO å®è£.claude/rules/backend/04-typescript-generation.md– TypeScript åçæ.claude/rules/backend/05-inertia-backend.md– Inertia.js ããã¯ã¨ã³ãå®è£.claude/rules/backend/06-testing.md– ãã¹ãæ¦ç¥.claude/rules/backend/07-best-practices.md– ãã¹ããã©ã¯ãã£ã¹.claude/rules/backend/08-coding-standards.md– ã³ã¼ãã£ã³ã°è¦ç´