solid-nextjs について
solid-nextjsは、Next.js 16プロジェクトでSOLIDとDRYの設計を適用するコーディングスキルです。実装ルール、原則別ガイド、再利用可能なテンプレートを備え、着手前のドキュメント調査と既存コードの確認を求めます。
主な機能
- 01SOLIDとDRYの設計ルール
- 02実装前のドキュメント調査
- 03既存パターンとツールの確認
- 045つのSOLID原則のガイド
- 05一般的なNext.jsコードのテンプレート
活用シーン
- 01Next.js 16のコード構成
- 02責務に応じたファイル分割
- 03型付きモジュールとインターフェースの作成
- 04依存性注入とコンポジションの適用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fusengine/ claude-plugins --skill solid-nextjsインストール後、Claude Code で/solid-nextjsを入力して読み込まれたか確認します。
詳細
SOLID の各原則に対応した専用のリファレンスガイド(SRP のファイル分割、OCP のコンポジション/プラグインパターン、LSP の契約遵守、ISP の役割ベースのインターフェース、DIP のコンストラクターインジェクション/ファクトリー)に加え、コンポーネント、フック、サービス、ストア、Server Actions、API ルート、バリデーター、Prisma シングルトン、i18n、クエリを網羅した、そのままコピーして使えるテンプレートを 23 個提供します。これは横断的なコード品質スキルであり、機能スキルではありません。フレームワーク API 自体については、nextjs-16 とその関連スキルを参照してください。
SOLID Next.js - モジュラーアーキテクチャ
現在の日付(重要)
今日は 2026 年 1 月です — 検索には必ず現在の年を使用してください。 「2025」または「2026」で検索し、過去の年は決して使用しないでください。
必須:コーディング前の調査
重要:コードを書く前に、まず今日の日付を確認し、ドキュメントとウェブを検索してください。
- Context7 を使用して、Next.js/React の公式ドキュメントを調べます
- Exa のウェブ検索を使用し、現在の年を指定して最新の動向を調べます
- 現在の年の Vercel Blog を確認して、新機能を調べます
- Next.js 16 との互換性について、パッケージのバージョンを確認します
検索クエリ(YYYY を現在の年に置き換えてください):
Next.js [feature] YYYY best practicesReact 19 [component] YYYYTypeScript [pattern] YYYYPrisma 7 [feature] YYYY
コードベース分析(必須)
実装を始める前に必ず行うこと:
- プロジェクトの構造を調べ、アーキテクチャを把握します
- 関連する既存ファイルを読み、確立されたパターンに従います
- 命名規則、コーディングスタイル、使用されているパターンを特定します
- データフローと依存関係を把握します
DRY - 再利用するか、共有機能を作成する(必須)
新しいコードを書く前に必ず行うこと:
- コードベースを grep で検索し、類似した関数名、パターン、ロジックがないか確認します
- 共有配置場所を確認します:
modules/cores/lib/、modules/cores/components/、modules/cores/hooks/ - 類似コードが存在する場合 → 重複させず、拡張または再利用します
- 2 つ以上の機能で使用するコードの場合 → 直接
modules/cores/に作成します - 3 回以上繰り返されているロジックは、共有ヘルパーに抽出します
- 新しいファイルを作成した後、
npx jscpd ./src --threshold 3を実行します
エージェントワークフロー(必須)
実装を始める前に、並行して 3 つのエージェントを起動します。それぞれの Agent 呼び出しには name を 1 つ指定します。
- fuse-ai-pilot:explore-codebase - プロジェクト構造と既存パターンを分析します
- fuse-ai-pilot:research-expert - スタック内のすべてのテクノロジーについて最新のドキュメントを確認します
- mcp__context7__query-docs - 連携の互換性を確認します
実装後、検証のために fuse-ai-pilot:sniper を実行します。
絶対ルール(必須)
1. ソースファイルの行数上限
- ソースファイルは
FUSE_SOLID_MAX_LINESを超えてはいけません。上限の基準となるのはフックのみです - 凝集度が低下したら、責務ごとに分割します(ページはモジュールに委譲し、コンポーネントはコンポジションで分割し、Server Action は関心事ごとに 1 つにします)
2. モジュラーアーキテクチャ
機能モジュールと cores ディレクトリを含む完全な構造については、references/architecture-patterns.md を参照してください。
3. JSDoc 必須
/**
* Fetch user by ID from database.
*
* @param id - User unique identifier
* @returns User object or null if not found
* @throws DatabaseError on connection failure
*/
export async function getUserById(id: string): Promise<User | null>
4. インターフェースの分離
modules/auth/src/
├── interfaces/ # Types ONLY
│ ├── user.interface.ts
│ └── session.interface.ts
├── services/ # NO types here
└── components/ # NO types here
SOLID 原則(詳細ガイド)
SOLID の各原則には、専用のリファレンスガイドがあります。
-
references/single-responsibility.md- 1 つのクラス/関数に、変更する理由は 1 つだけFUSE_SOLID_MAX_LINESの範囲内で責務に基づいて分割する- コンポーネントの合成パターン
- Next.js のページとサーバーアクションの例
-
references/open-closed.md- 変更ではなく合成によって拡張する- プラグインアーキテクチャのパターン
- 複数の実装に対応するプロバイダーパターン
- アダプターパターンとストラテジーパターン
- 既存のコードを変更せずに機能を追加する
-
references/liskov-substitution.md- 契約の遵守と動作上のサブタイピング- サブタイプは基底型と置き換え可能でなければなりません
- 例外と戻り値の型に関する契約
- LSP への準拠をテストする
-
references/interface-segregation.md- 1 つの肥大化したインターフェースより、焦点を絞った複数のインターフェースを優先する- 役割ベースのインターフェース
- 肥大化した契約を避ける
- クライアント固有のインターフェース
-
references/dependency-inversion.md- 実装ではなく抽象に依存する- コンストラクターインジェクションのパターン
- 作成のためのファクトリーパターン
- IoC コンテナー
- テストで簡単にモックできる
概要とクイックリファレンスについては、references/solid-principles.md を参照してください。
コードテンプレート
references/templates/ にすぐにコピーして使えるコードがあります。
| テンプレート | 用途 |
|---|---|
server-component.md | データ取得を行うサーバーコンポーネント |
client-component.md | フックを使用するクライアントコンポーネント |
service.md | 依存性注入を使用するサービス |
hook.md | 状態を扱う React フック |
interface.md | TypeScript インターフェース |
store.md | 永続化機能を備えた Zustand ストア |
action.md | バリデーションを行うサーバーアクション |
api-route.md | API ルートハンドラー |
validator.md | Zod バリデーションスキーマ |
factory.md | ファクトリーパターン |
adapter.md | アダプターパターン |
error.md | カスタムエラークラス |
test.md | テストテンプレート |
middleware.md | 認証ミドルウェア |
prisma.md | Prisma シングルトン |
i18n.md | 機能別/グローバル翻訳 |
query.md | データベースクエリ(Prisma 7) |
応答ガイドライン
- まず調査する - 必須:コードを書く前に必ず Context7 と Exa を検索する
- 完全なコードを提示する - 断片ではなく、動作する例を示す
- 判断の理由を説明する - 他の選択肢よりこのパターンを選ぶ理由を説明する
- テストを含める - 常にテストケースを提案する
- エラーに対処する - 決して無視せず、エラーバウンダリーを使用する
- すべてに型を付ける - 完全な TypeScript を使用し、
anyは使わない - コードをドキュメント化する - 複雑な関数には JSDoc を記述する
禁止事項
- ❌ 事前にドキュメントを調査せずにコーディングする(必ず調査する)
- ❌ 現行年度のドキュメントを確認せずに古い API を使用する
- ❌
FUSE_SOLID_MAX_LINESを超えるソースファイル - ❌ コンポーネントファイル内にインターフェースを記述する
- ❌
app/ページにビジネスロジックを記述する - ❌ コンポーネント内でデータベースを直接呼び出す
- ❌ コアを除き、モジュール間でインポートする
- ❌ デフォルトで
'use client'を使用する - ❌ データ取得に
useEffectを使用する - ❌ エクスポートに JSDoc がない
- ❌
any型 - ❌ バレルエクスポート
- ❌ 事前に Grep で検索せず、既存のユーティリティ/ヘルパーを重複して作成する
- ❌ ロジックのブロックをコピーして貼り付け、共通関数として切り出さない