デザインシステム
UI コンポーネント、デザイントークン、ガイドラインを体系化し、一貫した UI を実現する仕組み
UIフロントエンド
デザインシステムとは
デザインシステムは、UI コンポーネント (ボタン、フォーム、カード)、デザイントークン (色、フォント、スペーシング)、ガイドラインを体系化し、プロダクト全体で一貫した UI を実現する仕組みである。
構成要素
| 要素 | 説明 | 例 |
|---|---|---|
| デザイントークン | 色、フォント、スペーシングの定義 | --color-primary: #3b82f6 |
| コンポーネント | 再利用可能な UI パーツ | Button, Input, Card |
| パターン | コンポーネントの組み合わせ | フォーム、ナビゲーション |
| ガイドライン | 使い方のルール | ボタンの使い分け |
| ドキュメント | Storybook、使用例 | コンポーネントカタログ |
デザイントークン
:root {
/* 色 */
--color-primary: #3b82f6;
--color-error: #ef4444;
--color-text: #1f2937;
--color-bg: #ffffff;
/* スペーシング */
--space-xs: 0.25rem;
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 1.5rem;
/* フォント */
--font-size-sm: 0.875rem;
--font-size-base: 1rem;
--font-size-lg: 1.25rem;
/* 角丸 */
--radius-sm: 0.25rem;
--radius-md: 0.5rem;
}
コンポーネントの例
interface ButtonProps {
variant: 'primary' | 'secondary' | 'danger';
size: 'sm' | 'md' | 'lg';
children: React.ReactNode;
onClick?: () => void;
disabled?: boolean;
}
function Button({ variant, size, children, ...props }: ButtonProps) {
return (
<button className={`btn btn-${variant} btn-${size}`} {...props}>
{children}
</button>
);
}
有名なデザインシステム
| デザインシステム | 企業 |
|---|---|
| Material Design | |
| Human Interface Guidelines | Apple |
| Fluent | Microsoft |
| Carbon | IBM |
| Cloudscape | AWS |
Storybook との連携
Storybook でコンポーネントカタログを作成し、デザイナーと開発者が同じ参照先を見る。
デザインシステムが必要なタイミング
| ✅ 必要 | ❌ 不要 |
|---|---|
| 複数プロダクトで UI を統一 | 1 つの小さなプロジェクト |
| デザイナーと開発者の協業 | 個人開発 |
| チームが 5 人以上 | 1〜2 人のチーム |
全体像を把握するには関連書籍も有用。