このディレクティブノートは、Solidity、TypeScript、Node.js、Next.js 14 App Router、React、Vite、Viem v2、Wagmi v2、Shadcn UI、Radix UI、Tailwind Ariaなどの技術スタックを使用する際のベストプラクティスに従うよう、開発者を導くことを目的としています。
主な要素は以下の通り。
- コードのスタイルと構造
- 簡潔で技術的な回答を用いて、正確なTypeScriptの例を提供する。
- 関数型、宣言型プログラミングを使用し、クラスの使用を避ける。
- 重複コードよりも反復とモジュール化の使用を優先する。
- 助動詞を含む説明的な変数名を使用する
- 目次にはダッシュ付きの小文字を使用する。
- コンポーネントは名前付き輸出が望ましい
- RORO(Receive Object, Return Object)モデルの採用
- JavaScript/TypeScript仕様
- 純粋関数は "function "キーワードを使い、セミコロンを省略する。
- TypeScriptを全面的に使用し、型よりもインターフェイスを使用し、列挙型を避け、マッピングを使用する。
- ファイル構造:エクスポートされたコンポーネント、サブコンポーネント、ヘルパー関数、静的コンテンツ、タイプ
- 条件文では不要な中括弧を使用しない。
- エラー処理と検証
- この関数は、エラーとエッジケースの処理を開始します。
- 早期復帰を伴うエラー状態の処理
- 通常の実行パスを関数の最後に置く
- 不必要な else 文は避け、if-return パターンを使用する。
- ガード節を使った前提条件と無効状態の早期処理
- 適切なエラーログとユーザーフレンドリーなエラーメッセージの実装
- カスタムエラータイプまたはエラーファクトリの使用を検討する
- React/Next.jsのベストプラクティス
- 関数コンポーネントとTypeScriptインタフェースを使う
- 宣言的JSXの使用
- コンポーネントはconstではなくfunctionで宣言する。
- Shadcn UI、Radix、Tailwind Ariaによるコンポーネント開発とスタイリング
- Tailwind CSSを使用したモバイルファーストアプローチによるレスポンシブデザインの実装
- 静的コンテンツとインターフェイスはファイルの最後に配置される
- use client'、'useEffect'、'setState'の使用を最小限に抑え、RSCの使用を優先する。
- ゾッドによるフォームバリデーション
- クライアント・コンポーネントはサスペンスでラップされ、フォールバックを提供する。
- 非重要部品は動的負荷を使用
- 画像の最適化:WebPフォーマットの使用、サイズデータの提供、遅延ロード
- サーバー操作で予想されるエラーは、useActionState を使用して管理される戻り値として処理されます。
- エラー境界による予期せぬエラーの処理
- useActionStateとreact-hook-formを併用したフォーム検証
- services/ ディレクトリのコードがユーザーフレンドリーなエラーをスローする
- すべてのサーバーアクションにnext-safe-actionを使用する。
- 主な関与
- 状態の変更をNext.js App Routerに依存する
- ウェブ・バイタル・メトリクス(LCP、CLS、FID)の優先順位付け
- ユースクライアント」の使用を最小限に抑える:
- サーバーコンポーネントとNext.js SSR機能の優先順位付け
- ウィジェットでWeb APIにアクセスする場合のみ'use client'を使用する。
- データ・フェッチやステート管理で「use client」の使用を避ける。
データ取得、レンダリング、ルーティングのベストプラクティスについては、Next.jsの公式ドキュメントを参照することをお勧めします。
ヴィエムv2
Solidity、TypeScript、Node.js、Next.js 14 App Routerのエキスパート。 反応Vite、Viem v2、Wagmi v2、Shadcn UI、Radix UI、Tailwind Aria。
主な原則
- 正確なTypeScriptの例を用いて、簡潔で技術的な回答を書くこと。
- 関数的で宣言的なプログラミングを用いること。 クラスを避けること。
- 重複よりも反復とモジュール化を優先する。
- 説明的な変数名と補助動詞(isLoadingなど)を使用する。
- ディレクトリにはダッシュ付きの小文字を使う(例:components/auth-wizard)。
- コンポーネントには名前付きエクスポートを使用する。
- Receive an Object, Return an Object (RORO) パターンを使用する。
JavaScript/TypeScript
- 純粋な関数には "function "キーワードを使用する。 セミコロンは省略する。
- すべてのコードにTypeScriptを使用する。 型よりもインターフェイスを優先する。 列挙型を避け、マップを使用する。
- ファイル構造:エクスポートされたコンポーネント、サブコンポーネント、ヘルパー、静的コンテンツ、型。
- 条件文では不要な中括弧を避ける。
- 条件文の1行文では中括弧を省略する。
- 単純な条件文(if (condition) doSomething()など)には、簡潔な1行構文を使用する。
エラー処理と検証
- エラー処理とエッジケースを優先する。
- エラーとエッジケースは関数の先頭で処理する。
- if文が深く入れ子になるのを避けるため、エラー条件にはアーリーリターンを使用する。
- 読みやすくするために、ハッピーパスを関数の最後に置く。
- 不必要な else 文は避け、代わりに if-return パターンを使用する。
- ガード句を使用して、前提条件や無効な状態を早期に処理する。
- 適切なエラーログとユーザーフレンドリーなエラーメッセージを実装する。
- 一貫したエラー処理を行うために、カスタム・エラー・タイプやエラー・ファクトリの使用を検討する。
React/Next.js
- 機能的なコンポーネントとTypeScriptインターフェースを使用する。
- 宣言的なJSXを使用する。
- コンポーネントにはconstではなくfunctionを使用する。
- コンポーネントとスタイリングには、Shadcn UI、Radix、Tailwind Ariaを使用する。
- Tailwind CSSでレスポンシブデザインを実装する。
- レスポンシブデザインには、モバイルファーストアプローチを使用する。
- 静的コンテンツとインターフェースをファイルエンドに配置する。
- レンダー関数外の静的コンテンツには、コンテンツ変数を使用する。
- use client」、「useEffect」、「setState」を最小限にする。 フォームバリデーションにはZodを使う。
- フォーム検証にはZodを使用する。
- クライアントコンポーネントをフォールバック付きのサスペンスでラップする。
- クリティカルでないコンポーネントにはダイナミックローディングを使用する。
- 画像の最適化: WebPフォーマット、サイズデータ、遅延ロード。
- 期待されるエラーを戻り値としてモデル化する: サーバーアクションの期待されるエラーに対してtry/catchを使用しない。 これらのエラーを管理するためにuseActionStateを使用する。useActionState を使用して、これらのエラーを管理し、クライアントに返します。
- 予期しないエラーにエラー境界を使用する:予期しないエラーを処理し、フォールバックUIを提供するために、error.tsxとglobal-error.tsxファイルを使用してエラー境界を実装します。フォールバックUIを提供する。
- フォーム検証のためにreact-hook-formでuseActionStateを使用する。
- services/ディレクトリ内のコードは、tanStackQueryがキャッチしてユーザーに表示できる、ユーザーフレンドリーなエラーを常に投げる。
- すべてのサーバーアクションにnext-safe-actionを使用する。
- 適切なバリデーションでタイプセーフなサーバーアクションを実装する。
- アクションの作成にはnext-safe-actionの`action`関数を使用する。
- Zod を使用して入力スキーマを定義し、堅牢な型チェックとバリデーションを行う。
- エラーを優雅に処理し、適切なレスポンスを返す。
- ActionResponse } を '@/types/actions' からインポートする。
- すべてのサーバーアクションがActionResponse型を返すようにする。
- ActionResponse を使用して、一貫したエラー処理と成功レスポンスを実装する。
主な規約
1.状態変更はNext.jsアプリルーターに依存する 2.
2.Webバイタル(LCP、CLS、FID)を優先する。 3.
3.クライアントの利用は最小限に。
- サーバーコンポーネントとNext.jsのSSR機能を優先する。
- use clientは、小さなコンポーネントでのWeb APIアクセスにのみ使用する。
- データ取得や状態管理にuse clientを使わない。
データ取得、レンダリング、ルーティングのベストプラクティスについては、Next.jsのドキュメントを参照してください。