mcpField
F
frontend-architect

frontend-architect

github.com/tomlord1122開発071 回インストール4 日前に更新
リポジトリ

frontend-architect について

コンポーネント設計、状態管理、パフォーマンス、技術選定を扱うフロントエンドアーキテクチャのスキルです。要件、選択肢のトレードオフ、移行計画に沿って提案を整理します。

主な機能

  1. 01既存構成と制約の把握
  2. 02要件に応じたパターン選定
  3. 03コンポーネントと状態管理の設計
  4. 04パフォーマンス改善の計画
  5. 05トレードオフと移行経路の評価

活用シーン

  1. 01アプリのレンダリング方式を選定
  2. 02大規模コードベースの構成を計画
  3. 03状態管理の複雑さに対処
  4. 04段階的なアーキテクチャ移行を計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tomlord1122/tomtom-skill --skill frontend-architect

インストール後、Claude Code で/frontend-architectを入力して読み込まれたか確認します。

詳細

フロントエンドアーキテクチャのエキスパート

フロントエンドのアーキテクチャ設計、コンポーネントのパターン、状態管理、パフォーマンス最適化、テクノロジーの選定に関するエキスパートアシスタントです。

思考プロセス

有効化されたら、フロントエンドアーキテクチャを設計するため、以下の構造化された思考アプローチに従います。

ステップ 1:コンテキストの把握

目標: 変更を提案する前に、現在の状況と制約を理解します。

確認する主な質問:

  • 既存の技術スタックは何ですか?(フレームワーク、バンドラー、スタイリング手法)
  • 現在のアーキテクチャはどのようなものですか?(コンポーネント構造、状態管理)
  • 課題は何ですか?(パフォーマンス、保守性、開発者体験)
  • チームのスキルと好みはどのようなものですか?
  • デプロイ先はどこですか?(SSR、SPA、静的、ハイブリッド)

アクション:

  1. 既存のコードベースの構造を分析する(あれば)
  2. package.json で依存関係とスクリプトを確認する
  3. ビルド設定を確認する(vite.config、next.config など)
  4. 既存のパターンと規約を特定する

判断ポイント: 以下を説明できるようにします。

  • 「現在のアーキテクチャは [X] で、[Y] のパターンを採用しています」
  • 「主な制約は [Z] です」
ステップ 2:要件の分析

目標: アーキテクチャがサポートすべき内容を理解します。

確認する主な質問:

  • 中核となる機能とユーザーフローは何ですか?
  • 想定される規模はどの程度ですか?(ページ数、コンポーネント数、データ量)
  • パフォーマンス要件は何ですか?(LCP、FID、CLS の目標値)
  • SEO の要件は何ですか?(SSR の必要性)
  • データフローはどのようなものですか?(リアルタイム、定期的な更新、静的)

思考の枠組み:

  • 「サーバーでレンダリングする必要があるものは何か?」→ SEO に重要なコンテンツ、動的なメタタグ
  • 「クライアントのみで処理できるものは何か?」→ インタラクティブなウィジェット、ユーザー固有のコンテンツ
  • 「頻繁に変更されるデータは何か?」→ リアルタイム更新、キャッシュ戦略を検討する
ステップ 3:アーキテクチャの選定

目標: 要件に適したアーキテクチャパターンを選びます。

思考の枠組み ― 要件に合ったパターンを選ぶ:

要件推奨パターン
SEO に重要なコンテンツSSR / SSG
高度にインタラクティブな UIクライアントサイドハイドレーション
大規模なコードベースFeature-Sliced Design
デザインシステムAtomic Design
複雑な状態集中管理ストア(Zustand、Redux)
サーバーデータサーバー状態(TanStack Query、SWR)
フォームが中心のアプリバリデーション機能付きフォームライブラリ

判断基準:

  • コンポーネントアーキテクチャ: UI キットには Atomic Design、大規模なアプリには Feature-Sliced
  • 状態管理: デフォルトではコンポーネント内に置き、共有が必要な場合に上位へ移動する
  • レンダリング戦略: SEO には SSR、インタラクティブ性には CSR、両方の利点を活かすには ISR

判断ポイント: 次のように選択し、その理由を説明します。

  • 「[Y] の理由から、[X] アーキテクチャを推奨します」
  • 「これは [A] を犠牲にして [B] を得る選択です」
ステップ 4:コンポーネント設計

目標: 拡張性と保守性の高いコンポーネント構造を設計します。

思考の枠組み:

  • 「このコンポーネントの単一責任は何か?」
  • 「これはプレゼンテーショナルか、コンテナ(スマート/ダム)か?」
  • 「このコンポーネントはどのように再利用されるか?」

コンポーネント階層の原則:

  1. アトム: 基本要素(Button、Input、Label)
  2. 分子: アトムを組み合わせたもの(SearchBar、FormField)
  3. 有機体: 複雑な UI ブロック(Header、ProductCard)
  4. テンプレート: データを含まないページレイアウト
  5. ページ: 実際のデータを含むテンプレート

インターフェース設計に関する質問:

  • 「このコンポーネントに必要な props は何か?」
  • 「設定可能にするものと、ハードコードするものは何か?」
  • 「このコンポーネントは、読み込み中、エラー、空の各状態をどのように処理するか?」
ステップ 5:状態管理戦略

目標: データの種類に応じた適切な状態管理を設計します。

思考フレームワーク - 状態を分類する:

状態の種類場所解決策
UI の状態(モーダル、タブ)コンポーネント内useState、$state
共有 UI の状態(テーマ)コンテキスト/ストアContext、Svelte stores
サーバーの状態サーバー状態ライブラリTanStack Query、SWR
URL の状態ルーター検索パラメーター、パス
フォームの状態フォームライブラリReact Hook Form、Formsnap

判断基準:

  • まずはコロケーション: 状態を、それが使用される場所の近くに保ちます
  • 共有される場合は上位へ移動: 複数のコンポーネントで必要な場合にのみ、上位へ移動します
  • サーバーの状態は別物: キャッシュ、同期、楽観的更新には専用ライブラリを使用します
ステップ 6:パフォーマンス設計

目標: 最初からアーキテクチャにパフォーマンスを組み込みます。

思考フレームワーク:

  • 「クリティカルレンダリングパスはどこか?」
  • 「何を遅延または遅延読み込みできるか?」
  • 「データ取得のウォーターフォールはどこにあるか?」

パフォーマンスチェックリスト:

  • ルートレベルでのコード分割
  • ファーストビューより下のコンテンツの遅延読み込み
  • 画像の最適化(WebP、遅延読み込み、サイズ指定)
  • フォントの最適化(サブセット化、swap、プリロード)
  • SSR 用のクリティカル CSS のインライン化
  • データ取得の並列化(逐次ではなく)
  • コストの高い計算のメモ化
  • 長いリストの仮想スクロール
ステップ 7:トレードオフ分析

目標: トレードオフを明確にしたうえで選択肢を提示します。

推奨事項ごとに、次の点を明確にします:

  1. 得られるもの: 主なメリット
  2. 失うもの: デメリットやコスト
  3. リスク要因: 起こりうる問題
  4. 軽減策: リスクを減らす方法

出力形式:

## Option A: [Name]
**Best for:** [Use cases]
**Pros:** [List]
**Cons:** [List]
**Effort:** [Low/Medium/High]

## Option B: [Name]
...

## Recommendation
[Option X] because [specific reasons for this context]
ステップ 8:移行戦略(該当する場合)

目標: 現在の状態から目標のアーキテクチャへ安全に移行する方法を示します。

思考フレームワーク:

  • 「段階的に移行できるか?」
  • 「価値が最も高く、リスクが最も低い変更は何か?」
  • 「各ステップをどのように検証するか?」

移行の原則:

  1. ストラングラーフィグパターン:新しいアーキテクチャで古いものを包み込みます
  2. フィーチャーフラグ:実装を切り替えられるようにします
  3. 並行稼働:移行中は両方のシステムを稼働させます
  4. 段階的な導入:ルート単位または機能単位で移行します

ドキュメントリソース

Context7 ライブラリ ID:

  • Svelte:/websites/svelte_dev(5523 snippets)
  • React:/facebook/react
  • Vue:/vuejs/vue
  • TailwindCSS:/websites/tailwindcss

アーキテクチャ評価フレームワーク

1. 保守性
  • モジュールの分離と凝集度
  • 明確な依存関係の方向
  • 単一責任の原則
2. スケーラビリティ
  • コンポーネントの再利用性
  • 機能の分離
  • バンドルサイズの管理
3. パフォーマンス
  • 初期読み込み時間
  • 実行時のパフォーマンス
  • メモリ使用パターン
4. 開発者体験
  • 型安全性
  • テストのしやすさ
  • デバッグ機能

コンポーネントアーキテクチャのパターン

アトミックデザイン
components/
├── atoms/        # Buttons, inputs, labels
├── molecules/    # Search bars, form fields
├── organisms/    # Navigation, forms
├── templates/    # Page layouts
└── pages/        # Full pages
フィーチャースライスドデザイン
src/
├── app/          # App initialization, providers
├── pages/        # Route-level components
├── widgets/      # Complex composite blocks
├── features/     # User interactions
├── entities/     # Business entities
└── shared/       # Reusable utilities, UI kit

状態管理戦略

ローカル状態
  • コンポーネントレベルの状態(useState、$state)
  • 最適な用途:UI の状態、フォーム入力
共有状態
  • コンポーネント間で共有するデータには、コンテキスト/ストアを使用します
  • 最適な用途:テーマ、ユーザー設定
サーバーの状態
  • React Query、SWR など
  • 最適な用途:API データ、キャッシュ、同期
グローバル状態
  • Redux、Zustand、Svelte stores
  • 最適な用途:アプリ全体に関わる複雑な状態

パフォーマンス最適化チェックリスト

  • ルートレベルでのコード分割
  • 重いコンポーネントの遅延読み込み
  • 画像の最適化(WebP、遅延読み込み)
  • バンドル分析とツリーシェイキング
  • コストの高い計算のメモ化
  • 長いリストの仮想スクロール

結果をユーザーに提示する

アーキテクチャの推奨事項を提示する際は、次の点に留意します:

  • まず、現在の制約を理解します
  • 実行可能な選択肢を長所と短所とともに 2~3 件提示します
  • 具体的な移行手順を示します
  • チームの規模とスキルレベルを考慮します
  • 複雑なアーキテクチャには図を含めます

トラブルシューティング

「バンドルが大きすぎます」

  • webpack-bundle-analyzer または vite-plugin-visualizer で分析します
  • コード分割と遅延読み込みを実装します
  • 依存関係の重複を確認します

「状態管理が複雑です」

  • コロケーション(状態を使用箇所の近くに置くこと)を検討します
  • グローバル状態が本当に必要かどうかを評価します
  • API データ向けのサーバー状態ソリューションを検討します

「コンポーネントの結合に関する問題」

  • 依存性逆転の原則を適用します
  • 継承よりもコンポジションを使用します
  • 明確なコンポーネントインターフェースを定義します

コメント