adonisjs について
adonisjs は、AdonisJS 6 の TypeScript アプリを構築、デバッグ、保守するための開発スキルです。入力検証、サービス、テスト、パフォーマンスに関するタスク別ワークフローと設計資料を提供します。
主な機能
- 01タスクに応じたワークフロー選択
- 02コントローラーとサービスの分離指針
- 03VineJS による入力検証
- 04アーキテクチャとモデルの資料
- 05変更後の型・テスト・Lint確認
活用シーン
- 01機能や API エンドポイントの構築
- 02アプリケーションの問題調査と修正
- 03テスト作成やパフォーマンス最適化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ filipebraida/ skills --skill adonisjsインストール後、Claude Code で/adonisjsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/anti-patterns.mdarchitecture.mdbackground-jobs.mdcontrollers.mdmodels.mdmulti-tenant.mdperformance.mdserialization.mdtesting.mdvalidations-callbacks.mdworkflows/build-feature.mddebug.mdoptimize-performance.mdrefactor.mdwrite-tests.md詳細
<essential_principles>
AdonisJS 6 の原則
TypeScript ファースト - すべてのリクエスト、サービス、モデルに型を付けます。any より明示的な型を優先してください。
1. 薄いコントローラー、役割を絞ったサービス
コントローラーは処理を調整します。ビジネスロジックはサービスまたはドメインモジュールに記述します。
// app/controllers/users_controller.ts
import type { HttpContext } from "@adonisjs/core/http";
import CreateUserService from "#services/users/create_user_service";
export default class UsersController {
async store({ request, response }: HttpContext) {
const payload = await request.validateUsing(CreateUserService.validator);
const user = await new CreateUserService().handle(payload);
return response.created({ data: user });
}
}
2. VineJS ですべての入力を検証する
リクエストデータを決して信頼しないでください。受け付ける時点で検証します。
// app/validators/create_user.ts
import vine from "@vinejs/vine";
export const createUserValidator = vine.compile(
vine.object({
email: vine.string().email(),
fullName: vine.string().minLength(2).maxLength(120),
password: vine.string().minLength(8),
}),
);
3. Lucid モデルに永続化を任せる
永続化とリレーションシップにはモデルを使用します。クエリは一か所にまとめてください。
// app/models/user.ts
import { BaseModel, column } from "@adonisjs/lucid/orm";
export default class User extends BaseModel {
@column({ isPrimary: true })
declare id: number;
@column()
declare email: string;
}
4. 横断的な関心事にはミドルウェアを使う
認証、テナントのスコープ設定、レート制限はミドルウェアに記述します。
// app/middleware/auth_middleware.ts
import type { HttpContext } from "@adonisjs/core/http";
import type { NextFn } from "@adonisjs/core/types/http";
export default class AuthMiddleware {
async handle(ctx: HttpContext, next: NextFn) {
await ctx.auth.check();
return next();
}
}
</essential_principles>
**何をしたいですか?**- 新しい機能/エンドポイントを構築する
- 既存の問題をデバッグする
- テストを作成/実行する
- パフォーマンスを最適化する
- コードをリファクタリングする
- その他
次に、workflows/ から該当するワークフローを読み、手順に従ってください。
<verification_loop>
変更のたびに
# 1. Type check
pnpm typecheck
# 2. Run tests
node ace test tests/functional/changed.spec.ts
# 3. Lint
pnpm lint
次の形式で報告します:「型:OK|テスト:X 件合格|Lint:問題なし」 </verification_loop>
<reference_index>
ドメイン知識
すべて references/ にあります。
アーキテクチャ: architecture.md モデル: models.md コントローラー: controllers.md シリアライズ(DTO): serialization.md バリデーション: validations-callbacks.md バックグラウンドジョブ: background-jobs.md パフォーマンス: performance.md テスト: testing.md マルチテナント: multi-tenant.md アンチパターン: anti-patterns.md </reference_index>
<workflows_index>
ワークフロー
すべて workflows/ にあります。
| ファイル | 目的 |
|---|---|
| build-feature.md | 新しい機能/エンドポイントをゼロから作成する |
| debug.md | バグを見つけて修正する |
| write-tests.md | テストを作成して実行する |
| optimize-performance.md | プロファイリングして高速化する |
| refactor.md | パターンに沿ってコードを再構成する |
| </workflows_index> |