mcpField
M
modern-web-app-architecture

modern-web-app-architecture

github.com/ratacat開発5849 回インストール37 週間前に更新
リポジトリ

modern-web-app-architecture について

SPA やハイブリッドレンダリングアプリを構築するチーム向けの、モダンな Web アプリ設計ガイドです。ルート単位のレンダリング、境界、状態、非機能要件を整理し、トレードオフを明示します。

主な機能

  1. 01ルートごとのレンダリング戦略
  2. 02モジュールとインターフェースの境界設計
  3. 03状態とデータの計画
  4. 04性能・アクセシビリティ・セキュリティ計画
  5. 05設計資料と次の手順の作成

活用シーン

  1. 01CSR、SSR、SSG、ISR、RSC の選択
  2. 02新規 SPA やハイブリッドアプリの計画
  3. 03状態とキャッシュ戦略の整理
  4. 04アーキテクチャのトレードオフ検討

インストール

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

$npx skills add https://github.com/ratacat/claude-skills --skill modern-web-app-architecture

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
accessibility-and-i18n.md
architecture-decisions.md
design-patterns.md
micro-frontends.md
performance.md
react-patterns.md
rendering-strategies.md
security-and-auth.md
spa-fundamentals.md
state-management.md
testing-and-quality.md
tooling-and-delivery.md

詳細

モダンな Web アプリケーションアーキテクチャ(SPA/SSR/SSG/RSC)

概要

モダンな Web アプリケーション(SPA やハイブリッドレンダリングアプリを含む)の設計と構築に関する包括的なガイダンスです。このスキルでは、トレードオフ、明確な境界、本番環境で利用できる実践方法(パフォーマンス、アクセシビリティ、セキュリティ、テスト、デリバリー)を重視します。

基本原則: アーキテクチャにおけるあらゆる要素はトレードオフです。「正解」はなく、特定のコンテキストにおいて最も問題の少ない組み合わせがあるだけです。

動作モード(このスキルの使い方)

有効化されたら、次の順に進めます。

  1. コンテキストを明確にする(質問は最大5~10個) → ユーザー、ルート、SEO、インタラクティブ性、データ、認証、チーム、制約。
  2. ルートごとにレンダリング戦略を選択する(「アプリ全体で1つの戦略」にはしない)。
  3. 境界を定義する → 機能/ドメインモジュール、共有ライブラリ、所有権、安定したインターフェース。
  4. 状態とデータを計画する → ローカル/共有/グローバル/サーバー/URL の状態、キャッシュ戦略、無効化、楽観的更新。
  5. 非機能要件を計画する → パフォーマンス予算と測定、アクセシビリティ計画、セキュリティ態勢、可観測性。
  6. 成果物を作成する → トレードオフを明示した簡潔な推奨事項と、具体的な次のステップ(フォルダー構成、ADR、チェックリスト)。

ユーザーが質問に答えられない場合は、妥当な前提を明示して続行します(作業を止めないでください)。

使用する場面

  • 新しい SPA または Web アプリケーションを始めるとき
  • レンダリング戦略(CSR、SSR、SSG、ISR、RSC)を選ぶとき
  • 状態管理を実装するとき
  • Core Web Vitals(LCP/INP/CLS)を最適化するとき
  • 複数のフロントエンドチームに対応できるよう拡張するとき
  • アーキテクチャのトレードオフを判断するとき
  • レガシーなフロントエンドからモダンなフロントエンドへ移行するとき

初期確認の質問(最初に尋ねる)

  • 主なユーザージャーニーを3つ挙げ、それぞれの目標レイテンシを教えてください(例:「検索 → 商品 → 決済」)。
  • SEO が必要なルートはありますか?公開されているルートと認証が必要なルートはどれですか?
  • データの形態はどのようなものですか?主に CRUD、リアルタイム、オフライン優先、複雑なフォーム、大規模なテーブル/チャートのどれに当たりますか?
  • 制約は何ですか? ブラウザーのサポート範囲、バンドルサイズの上限、市場投入までの期間、コンプライアンス(SOC2/HIPAA/PCI)などです。
  • チーム構成はどうなっていますか?開発者やチームの数、リリース頻度、所有権の境界を教えてください。
  • 希望するスタック(React/Vue/Angular/vanilla)は何ですか?TypeScript の使用は可能ですか?

参考ファイル

トピック読み込むタイミング
@references/design-patterns.mdJavaScript のパターン(Module、Observer、Factory など)を実装するとき
@references/react-patterns.mdReact のコンポーネント、フック、状態、コンポジションを扱うとき
@references/spa-fundamentals.mdSPA のアーキテクチャ、ルーティング、モジュール構成を扱うとき
@references/micro-frontends.mdチームを拡大し、独立したデプロイを行うとき
@references/performance.mdバンドルサイズ、読み込み、Core Web Vitals を扱うとき
@references/architecture-decisions.mdトレードオフ、結合、適合性関数を扱うとき
@references/rendering-strategies.mdCSR と SSR、SSG、ISR、RSC を比較するとき
@references/state-management.mdローカル、グローバル、サーバー状態のパターンを扱うとき
@references/security-and-auth.md認証の選択肢、トークンの保存、XSS/CSRF、CSP、API の境界を扱うとき
@references/accessibility-and-i18n.mdWCAG の基本、SPA のフォーカス管理、インクルーシブなコンポーネント、i18n の落とし穴を扱うとき
@references/testing-and-quality.mdテスト戦略、CI の品質ゲート、アクセシビリティチェック、コントラクトテストを扱うとき
@references/tooling-and-delivery.mdバンドル、環境、デプロイ、可観測性、機能フラグを扱うとき

アーキテクチャの簡易判断ツリー

Project Requirements?
├─ SEO critical + dynamic content → SSR (or SSR+streaming)
├─ SEO critical + mostly static → SSG/ISR (or hybrid)
├─ Mostly behind auth + app-like UX → CSR SPA (or hybrid with pre-rendered shell)
├─ Mixed (marketing + app) → Hybrid/Islands (route-level strategy)
│
Team Size?
├─ <5 developers → Modular monolith SPA
├─ 5-15 developers → Well-structured SPA or Service-based
├─ >15 developers, multiple teams → Consider micro-frontends
│
Domain Complexity?
├─ Simple CRUD → Layered architecture
├─ Complex workflows → Domain-partitioned (DDD)
├─ Multiple bounded contexts → Micro-frontends

デフォルトの出力(作成する内容)

ユーザーのリクエストに応じて、以下の出力を目指します:

  • ルート戦略マップ:ルート → CSR/SSR/SSG/ISR/RSC とその理由をまとめた小さな表
  • モジュール境界の概要:機能フォルダー、共有ライブラリ、インターフェースの契約
  • 状態マップ:ローカル/共有/グローバル/サーバー/URL と、選択したツールのパターン
  • データ計画:キャッシュ/無効化、エラー状態、楽観的更新、ページネーション
  • 品質計画:テストレイヤー + CI ゲート + アクセシビリティチェック
  • パフォーマンス計画:予算 + 計測 + 具体的な読み込み戦略(分割ポイント)
  • リスク一覧:上位 5 件のリスク + 軽減策(例:ハイドレーションのコスト、認証の態勢、チーム間の結合)

重要なパターンのクイックリファレンス

コンポーネントパターン
パターン使用する場面
コンテナー/プレゼンテーションデータと UI を分離する
複合コンポーネント組み合わせ可能な API(Select、Menu)を構築する
フックHOC を使わずに状態を持つロジックを共有する
プロバイダーグローバルデータのプロップドリリングを避ける
状態管理
アプローチ使用する場面
useState/useReducerコンポーネントのローカル状態
Contextテーマ、認証、更新頻度の低いグローバル状態
Zustand/Jotaiシンプルなグローバル状態、最小限の定型コード
Redux Toolkit複雑な状態、タイムトラベルデバッグ
React Query/SWRサーバー状態、キャッシュ、バックグラウンド更新
XState明示的な状態機械を使う複雑なフロー
パフォーマンスの要点
手法効果
コード分割初期バンドルを小さくする
遅延読み込み重要でない処理の読み込みを遅らせる
React.memo不要な再レンダリングを防ぐ
useMemo/useCallback参照を安定させる
仮想リスト大規模なデータセットに対応する

アーキテクチャ特性(3~7 個を選択)

特性確認する質問
スケーラビリティ同時ユーザー数はどれくらいですか?成長率はどれくらいですか?
パフォーマンス許容できる TTI はどれくらいですか?LCP の目標値は?
デプロイ可能性どのくらいの頻度でリリースしますか?独立してデプロイしますか?
テスト容易性変更の検証はどのくらい簡単ですか?
保守性想定される寿命はどれくらいですか?
モジュール性要件はどのくらいの頻度で変わりますか?

避けるべきアンチパターン

アンチパターン問題解決策
プロップドリリング密結合Context または状態管理
巨大なコンポーネント責務が多すぎる関心ごとごとに分割する
早すぎる最適化根拠のない複雑さまずプロファイルする
共有された可変状態競合状態、バグ不変パターン
モノリシックなバンドル初期読み込みが遅いコード分割
過剰なデータ取得帯域幅の浪費GraphQL または BFF
デフォルトで LocalStorage にトークンを保存XSS によってアカウントが乗っ取られるhttpOnly Cookie + CSP を優先する(セキュリティの参考資料を参照)
サーバーデータにグローバルストアを使用キャッシュ無効化が困難サーバー状態には React Query/SWR を使用する

パフォーマンス予算

予算はユーザーやデバイスに合わせて調整する必要がありますが、これらは「デフォルトで高速」なアプリを作るための良い出発点です:

指標目標要改善
LCP<2.5s2.5–4s
INP<200ms200–500ms
CLS<0.10.1–0.25
TTFB<800ms800ms–1.8s
ルートの JS(初期)<170KB gzip<300KB gzip

出典

以下の資料を統合:

  • Learning JavaScript Design Patterns(Osmani、2023)
  • React in Depth(Barklund、2024)
  • SPA Design and Architecture(Scott)
  • Single Page Web Applications(Mikowski & Powell)
  • Building Micro-Frontends(Mezzalira)
  • Micro Frontends in Action(Geers)
  • Responsible JavaScript(Wagner)
  • High Performance Browser Networking(Grigorik)
  • Web Performance in Action(Wagner)
  • Frontend Architecture for Design Systems(Godbolt)
  • Fundamentals of Software Architecture(Richards & Ford)
  • Software Architecture: The Hard Parts(Ford ほか)
  • Patterns.dev

コメント