awesome-copilot/instructions/vuejs3.instructions_ja.md

9.0 KiB
Raw Blame History

description applyTo
VueJS 3開発標準とComposition API及びTypeScriptでのベストプラクティス **/*.vue, **/*.ts, **/*.js, **/*.scss

VueJS 3 開発指示書

Composition API、TypeScript、モダンベストプラクティスを使用した高品質VueJS 3アプリケーション構築のための指示書。

プロジェクトコンテキスト

  • Vue 3.xとComposition APIをデフォルトとして使用
  • 型安全性のためのTypeScript
  • <script setup>構文を使用した単一ファイルコンポーネント(.vue
  • モダンビルドツールVite推奨
  • アプリケーション状態管理のためのPinia
  • 公式Vueスタイルガイドとベストプラクティス

開発標準

アーキテクチャ

  • Options APIよりもComposition APIsetup関数とcomposablesを優先
  • スケーラビリティのためにコンポーネントとcomposablesを機能またはドメインで整理
  • UI重視コンポーネントプレゼンテーションとロジック重視コンポーネントコンテナを分離
  • 再利用可能なロジックをcomposables/ディレクトリのcomposable関数に抽出
  • 明確に定義されたアクション、状態、ゲッターでドメイン別にストアモジュールPiniaを構造化

TypeScript統合

  • 最大型安全性のためにtsconfig.jsonstrictモードを有効化
  • defineComponentまたはdefinePropsdefineEmitsを使った<script setup lang="ts">を使用
  • 型付きpropsとデフォルト値にPropType<T>を活用
  • 複雑なpropと状態の形にはインターフェースまたは型エイリアスを使用
  • イベントハンドラー、refs、useRoute/useRouterフックの型を定義
  • 適用可能な場所でジェネリックコンポーネントとcomposablesを実装

コンポーネント設計

  • コンポーネントに対して単一責任原則を遵守
  • コンポーネント名にはPascalCase、ファイル名にはkebab-caseを使用
  • コンポーネントを小さく、一つの関心事に焦点を当てる
  • 簡潔性とパフォーマンスのために<script setup>構文を使用
  • TypeScriptでpropsを検証必要な場合のみランタイムチェックを使用
  • 柔軟な構成のためにslotsとscoped slotsを優先

状態管理

  • グローバル状態にはPiniaを使用defineStoreでストアを定義
  • 単純なローカル状態にはsetup内でrefreactiveを使用
  • 派生状態にはcomputedを使用
  • 複雑な構造のために状態を正規化
  • 非同期ロジックにはPiniaストアのアクションを使用
  • 永続化やデバッグのためにストアプラグインを活用

Composition APIパターン

  • 共有ロジック(例:useFetchuseAuthのために再利用可能なcomposablesを作成
  • 精密な依存関係リストでwatchwatchEffectを使用
  • onUnmountedまたはwatchクリーンアップコールバックでサイドエフェクトをクリーンアップ
  • 深い依存関係注入にはprovide/injectを控えめに使用
  • useAsyncDataまたはサードパーティデータユーティリティVue Queryを使用

スタイリング

  • コンポーネントレベルスタイルまたはCSSモジュールには<style scoped>を使用
  • 高速スタイリングのためにユーティリティファーストフレームワークTailwind CSSを検討
  • クラス命名にはBEMまたは機能的CSS規約に従う
  • テーマとデザイントークンにはCSSカスタムプロパティを活用
  • CSS GridとFlexboxでモバイルファースト、レスポンシブデザインを実装
  • スタイルがアクセシブル(コントラスト、フォーカス状態)であることを確保

パフォーマンス最適化

  • 動的インポートとdefineAsyncComponentでコンポーネントを遅延ロード
  • 非同期コンポーネント読み込みフォールバックに<Suspense>を使用
  • 静的または変更頻度の低い要素にv-oncev-memoを適用
  • Vue DevToolsパフォーマンスタブでプロファイル
  • 不要なウォッチャーを避ける;可能な場合はcomputedを優先
  • 未使用コードをツリーシェイクし、Viteの最適化機能を活用

データフェッチング

  • useFetchNuxtまたはVue Queryのようなライブラリのcomposablesを使用
  • ローディング、エラー、成功状態を明示的に処理
  • コンポーネントアンマウントまたはパラメータ変更時に古いリクエストをキャンセル
  • 失敗時のロールバックでオプティミスティック更新を実装
  • レスポンスをキャッシュし、バックグラウンド再検証を使用

エラーハンドリング

  • キャッチされていないエラーにはグローバルエラーハンドラー(app.config.errorHandler)を使用
  • リスキーなロジックをtry/catchでラップ;ユーザーフレンドリーなメッセージを提供
  • ローカル境界のためにコンポーネントでerrorCapturedフックを使用
  • フォールバックUIまたはエラーアラートを優雅に表示
  • 外部サービスSentry、LogRocketにエラーをログ記録

フォームと検証

  • 宣言的検証にはVeeValidateや@vueuse/formのようなライブラリを使用
  • 制御されたv-modelバインディングでフォームを構築
  • パフォーマンスのためにデバウンシングでblurまたはinput時に検証
  • composablesでファイルアップロードと複雑な多段階フォームを処理
  • アクセシブルなラベリング、エラー告知、フォーカス管理を確保

ルーティング

  • createRoutercreateWebHistoryでVue Router 4を使用
  • ネストされたルートとルートレベルコード分割を実装
  • ナビゲーションガード(beforeEnterbeforeEach)でルートを保護
  • プログラム的ナビゲーションのためにsetupuseRouteuseRouterを使用
  • クエリパラメータと動的セグメントを適切に管理
  • ルートメタフィールドを通じてブレッドクラムデータを実装

テスト

  • Vue Test UtilsとJestで単体テストを記述
  • 実装詳細ではなく動作に焦点を当てる
  • コンポーネント分離のためにmountshallowMountを使用
  • 必要に応じてグローバルプラグインrouter、Piniaをモック
  • CypressまたはPlaywrightでエンドツーエンドテストを追加
  • axe-core統合を使用してアクセシビリティをテスト

セキュリティ

  • v-htmlの使用を避けるHTMLインプットを厳格に無害化
  • XSSとインジェクション攻撃を軽減するためにCSPヘッダーを使用
  • テンプレートとディレクティブでデータを検証・エスケープ
  • すべてのAPIリクエストにHTTPSを使用
  • localStorageではなくHTTP専用クッキーに機密トークンを保存

アクセシビリティ

  • セマンティックHTML要素とARIA属性を使用
  • モーダルと動的コンテンツのフォーカス管理
  • インタラクティブコンポーネントにキーボードナビゲーションを提供
  • 画像とアイコンに意味のあるaltテキストを追加
  • カラーコントラストがWCAG AA標準を満たすことを確保

実装プロセス

  1. コンポーネントとcomposableアーキテクチャを計画
  2. Vue 3とTypeScriptでViteプロジェクトを初期化
  3. Piniaストアとcomposablesを定義
  4. コアUIコンポーネントとレイアウトを作成
  5. ルーティングとナビゲーションを統合
  6. データフェッチングと状態ロジックを実装
  7. 検証とエラー状態を持つフォームを構築
  8. グローバルエラーハンドリングとフォールバックUIを追加
  9. 単体テストとE2Eテストを追加
  10. パフォーマンスとバンドルサイズを最適化
  11. アクセシビリティコンプライアンスを確保
  12. コンポーネント、composables、ストアを文書化

追加ガイドライン

  • Vueの公式スタイルガイドvuejs.org/style-guideに従う
  • コード一貫性のためにESLintplugin:vue/vue3-recommendedとPrettierを使用
  • 意味のあるコミットメッセージを書き、クリーンなgit履歴を維持
  • 依存関係を最新に保ち、脆弱性を監査
  • JSDoc/TSDocで複雑なロジックを文書化
  • デバッグとプロファイリングにVue DevToolsを使用

共通パターン

  • 柔軟なUIのためのレンダーレスコンポーネントとscoped slots
  • provide/injectを使用したコンパウンドコンポーネント
  • 横断的関心事のためのカスタムディレクティブ
  • モーダルとオーバーレイのためのTeleport
  • グローバルユーティリティi18n、アナリティクスのためのプラグインシステム
  • パラメータ化されたロジックのためのComposableファクトリー