📄
概念 📚 software-design-concepts

デザインシステム

コンポーネントライブラリ・スタイルガイド・デザイントークンを軸とした一貫性と開発効率の両立

デザインシステムとは、一貫したUIを効率よく構築するためのコンポーネント・デザイントークン・ガイドライン・ツールの集合体である。プロダクトが成長し複数のチームが開発に関わると、デザインの不統一や重複した実装が生まれやすくなる。デザインシステムはこの問題を構造的に解決し、デザイナーとエンジニアが共通の言語でコミュニケーションできる基盤を提供する。

Atomic Designはデザインシステムのコンポーネント設計方法論の一つで、UI要素を「Atoms(ボタン・入力欄等の最小単位)」「Molecules(複数のAtomの組み合わせ)」「Organisms(Moleculeを組み合わせたセクション)」「Templates」「Pages」の5段階に分類する。この階層構造により、コンポーネントの再利用範囲と依存関係が明確になり、変更の影響範囲を制御しやすくなる。

Storybookはコンポーネントを独立した環境でインタラクティブに開発・文書化できるツールであり、デザインシステムの中核となる。各コンポーネントのStory(状態・バリエーション)を定義することで、実際のアプリケーションに組み込まずに視覚的な確認が可能になる。また、Storybookはデザイナーへのレビュー依頼や、アクセシビリティチェック・ビジュアルリグレッションテストの基盤としても活用される。

コードレビューで着目するポイント

  • デザイントークン(色・スペーシング・タイポグラフィ)がコードで一元管理され、ハードコードされた値が散在していないか
  • Storybookのデフォルト状態・エラー状態・ローディング状態など、コンポーネントの各バリエーションがStoryとして定義されているか
  • コンポーネントの粒度が適切か(一つのコンポーネントが過度に多くの責務を持っていないか)
  • デザインシステムのバージョニングが管理されており、破壊的変更(APIの変更等)がセマンティックバージョニングで明示されているか
  • FigmaのデザインとコードのコンポーネントのProps APIが対応しているか(デザインと実装の乖離がないか)
  • デザインシステムのコンポーネントが実際のプロダクトで使われており、デザインシステムとプロダクトが乖離していないか

典型的なアンチパターン

デザイントークンの重複定義: #1a73e8 という青色が primary-blue という変数と button-color という変数の2箇所で定義されていると、将来の変更時に片方だけ更新して不整合が生まれる。色・スペーシングの実値は一箇所のみで定義し、他は参照する形にすべきである。

デザインシステムの「ゴースト化」: 一度構築したデザインシステムを更新せず放置し、プロダクト側が独自のコンポーネントを増やし続けることで、デザインシステムが実態を反映しなくなる状態。デザインシステムの更新プロセスと所有者を明確にしないと起きやすい問題である。

全コンポーネントのAtomic化強制: Atomic Designの概念を厳格に適用し、本来プロダクト固有のページコンテキストで成立する要素まで再利用前提のAtomに分解しようとすると、過度に汎用化されたAPIを持つ使いにくいコンポーネントが生まれる。実用上のトレードオフを判断して設計する必要がある。

参考リソース

  • ツール: Storybook - コンポーネント開発・文書化・ビジュアルテストのデファクトツール
  • 書籍: 「Atomic Design」(Brad Frost) - デザインシステムのコンポーネント設計方法論の原典(無料でオンライン公開)
  • 事例: Radix UI - アクセシビリティに優れたヘッドレスUIコンポーネントライブラリ
  • 事例: shadcn/ui - Radix UIをベースにしたカスタマイズ性の高いデザインシステムの実装例
  • ツール: Style Dictionary - デザイントークンを複数プラットフォーム向けに変換・配布するツール
  1. 1. 📄アーキテクチャスタイル
  2. 2. 📄ドメインモデリング
  3. 3. 📄モジュール分割と依存管理
  4. 4. 📄データモデリング
  5. 5. 📄API設計
  6. 6. 📄整合性とトランザクション
  7. 7. 📄非同期処理(Queue/Event)
  8. 8. 📄キャッシング
  9. 9. 📄ユーザーリサーチ
  10. 10. 📄情報アーキテクチャ
  11. 11. 📄インタラクションデザイン
  12. 12. 📄UX原則とヒューリスティクス
  13. 13. 📄アクセシビリティ(UX観点)
  14. 14. 📄UXメトリクス
  15. 15. 📄スケーラビリティ
  16. 16. 📄可用性とレジリエンス
  17. 17. 📄オブザーバビリティ
  18. 18. 📄環境・インフラ設計
  19. 19. 📄データマイグレーション
  20. 20. 📄セキュリティ設計原則
  21. 21. 📄データ保護とマルチテナント
  22. 22. 📄LLMセキュリティ
  23. 23. 📄ビジュアルデザイン原則
  24. 24. 📄デザインシステム
  25. 25. 📄コンポーネント設計
  26. 26. 📄スタイリング
  27. 27. 📄設計原則
  28. 28. 📄デザインパターン(GoF)
  29. 29. 📄エンタープライズパターン
  30. 30. 📄クリーンコード
  31. 31. 📄リファクタリング
  32. 32. 📄型設計とコントラクト
  33. 33. 📄関数型プログラミング概念
  34. 34. 📄エラーハンドリング
  35. 35. 📄テスト戦略と哲学
  36. 36. 📄テスト種別(機能テスト)
  37. 37. 📄テスト種別(UI・ビジュアル)
  38. 38. 📄テスト種別(契約・境界)
  39. 39. 📄並行処理・マルチスレッド
  40. 40. 📄パフォーマンス最適化
  41. 41. 📄ドキュメント管理
  42. 42. 📄バージョン管理と開発プロセス
  43. 43. 📄脅威モデリング
  44. 44. 📄通信保護(TLS)
  45. 45. 📄暗号化・機密情報管理
  46. 46. 📄認証・セッション管理
  47. 47. 📄認可・アクセス制御
  48. 48. 📄入力バリデーション
  49. 49. 📄インジェクション攻撃
  50. 50. 📄正規化(データベース正規化)