Instal·la
npx skillscat add ame-team/ame-design-skills/ame-ui-philosophy Instal·la des del registre de SkillsCat.
AME UI Philosophy Skill
本 Skill は、TypeScript + Tailwind
CSS を用いる各種プロダクト・共通コンポーネントに適用可能な、汎用 UI/UX デザイン・統一基準を AI
Agent が実行可能なガイドラインとして定義したものです。特定プロジェクト専用ではなく、同スタックを使う任意のリポジトリで利用できます。コンポーネント生成・修正・リファクタリングを行う際は、必ず本ドキュメントを適用してください。タイポグラフィ(フォント定義・多言語フォント切替・見出し階層)の詳細ルールは
[[ame-ui-typography]] Skillに分離されているため、併用すること。
1. 核心哲学 (Core Philosophy)
すべての UI 設計は、以下の 3 原則を起点に判断すること。
- 引き算のデザイン: 装飾は情報伝達を助ける場合のみ許可。自己主張する装飾は排除する。
- 余白による構造: 構造は「線(border/hr)」より「余白」で作る。線は最後の手段。
- 真面目感(フォーマルさ): 開発ツールとして厳格で落ち着いたトーンを維持する。
2. デザイン4大原則 (Design Principles)
Tailwind クラス適用時は次を厳守する。
| 原則 | 適用ルール (Tailwind) |
|---|---|
| 近接 (Proximity) | 関連情報は近づける (gap-2, gap-4)。無関係情報は離す (mt-8, p-6)。区切りは安易な border-b / hr ではなく余白を優先。 |
| 整列 (Alignment) | 原則 左揃え (text-left, items-start)。中央揃えはロゴや短いコピー等の限定用途のみ。 |
| 反復 (Repetition) | 8px グリッド(4, 8, 16, 24, 32...)を厳守。任意値 (p-[13px]) 禁止。角丸は rounded-md / rounded-lg のみ。 |
| コントラスト (Contrast) | サイズ・太さ・色濃さに明確な差をつける。中途半端な差(text-base と text-sm のみ等)を禁止。 |
3. アイコン・図表 (Icons & Diagrams)
3.1 アイコン使用ルール
- 既知のサービス・機能・操作に紐づく要素(ボタン、ラベル、ナビゲーション項目等)には、文言だけでなく対応するアイコンを併記する。例:「GitHub」ボタンには GitHub アイコン、「コピー」操作には Copy アイコンを付与する。
- アイコンセットは Lucide
を標準とする(利用スタックに応じたパッケージを選択する。例:lucide-react,lucide-vue-next,lucide-svelte)。ストローク型・currentColor
継承のため、本 Skill の配色/ダークモード規定(§4)と親和性が高く、装飾目的の多色アイコン(禁止事項 §9 参照)を避けられる。 - サイズは Tailwind の 8px グリッドに揃える(インラインテキスト添え字は
size-4、単体ボタン・見出し添え字はsize-5)。任意ピクセル値 (w-[18px]) は禁止。 - アイコン単体で意味を持たせる場合(アイコンのみボタン等)は、必ず
aria-label
を付与しテキスト情報を代替する(アクセシビリティ §7 準拠)。 - 装飾目的のみのアイコン追加は禁止。情報伝達・操作対象の明確化に資する場合のみ使用する(核心哲学 §1「引き算のデザイン」準拠)。
3.2 図表・ダイアグラムの実装手段
表現内容に応じて実装手段を使い分ける。
| 種別 | 実装手段 | 例 |
|---|---|---|
| 相対配置で表現できる簡易な図(フロー図、ボックス&矢印、レイアウト模式図) | HTML + Tailwind | flex/grid と border/bg-* の組み合わせ |
| 座標・パス・角度・スケールの精密な制御が必要な図(グラフ、図形描画、任意曲線) | SVG | <svg> + <path>/<circle> 等 |
- 判断基準: Flexbox/Grid の相対配置だけで組めるか(→ HTML)、絶対座標やパスの計算が要るか(→
SVG)で選択する。 - HTML 実装はレスポンシブ・ダークモード対応が容易なため、座標計算が不要な限り優先する。
- SVG 実装時も色は
--color-primaryまたはcurrentColor経由にし、dark:
でのコントラスト維持を確保する(§4 準拠)。
3.3 図表の可変性(フォント・多言語・カラー対応)
図表(HTML/SVG いずれの実装でも)は、通常の UI コンポーネントと同じ可変性要件に従うこと。決め打ちの見た目で固定しない。
- フォント: 図表内のラベル・注釈テキストにも
font-familyを決め打ちせず、[[ame-ui-typography]]
Skill の--font-ui-ja-sans/--font-ui-en-sans等の CSS 変数を継承させる。SVG 内<text>もfont-family: var(--font-ui-...)を指定し、locale切替でフォントが自動的に追従するようにする。 - 多言語 (i18n): 図表内の文言は翻訳キー経由にし、ハードコードしない(§8 準拠)。
ja/en
でラベル長が変わっても崩れないよう、SVG は固定座標へのテキストのはめ込みを避け、viewBox
や余白を可変にする。HTML 実装はflex/gridの伸縮性を活かし、折返し・最小幅で対応する。 - カラー: §3.2 の通り
--color-primary/currentColor
を使い、ライト/ダーク切替と 1ポイントカラー変更(§4.2)の両方に追従させる。
4. 配色システムとダークモード (Color + Dark Mode)
4.1 ベース配色
- ライトモード: 背景
bg-white/bg-gray-50、テキストtext-gray-900/700/500 - ダークモード: 背景
bg-gray-900(純黒#000を避ける)、テキストtext-gray-100/300/400
テーマ切替は light / dark / system をサポートし、app_settings
へ永続化する。保存スキーマ例(本リポジトリ):{ locale: "ja"|"en", themeMode: "light"|"dark"|"system", colorPreset: "<presetId>", fontPreset: <FontPreset enum 値>, customFont: string }(fontPreset
の enum 値の定義は ame-ui-typography
Skill を参照)。キー名・既定値は実装(SettingsContext 等)と同期させること。フォント関連項目(fontPreset
/ customFont)の仕様・enum 値の定義は ame-ui-typography
Skill を単一の情報源として参照する(本 Skill では重複定義しない)。
クラスベース配色(標準実装): テーマは <html> の .dark クラスで制御する。Tailwind CSS
v4 では dark: バリアントの既定がprefers-color-scheme(OS 依存)のため、クラスベース配色を採用する場合は@custom-variant dark (&:where(.dark, .dark *)); をスタイルエントリへ追加し、 .dark
クラス連動に変更すること(CSS 変数 --color-* は .dark ブロックで別値を定義)。 system
モードでは matchMedia("(prefers-color-scheme: dark)")
の変更リスナーで OS テーマ変更へライブ追従すること(初回描画時のみの適用で止めない)。
FOUC 対策(初回描画のちらつき防止): <head> のインラインスクリプトで保存済みテーマモード
(app_settings.themeMode)を描画前に .dark
クラスへ適用すること。適用対象はテーマモードのみとし、色プリセット・フォントはアプリ側のマウント処理で適用する。
4.2 1ポイントカラー(5プリセット)
--color-primary を切り替えて利用する。ライト・ダークで別値を持つこと。
| 名称 | Light | Dark Variant | 意味 |
|---|---|---|---|
| Trust Blue | #005B99 |
#3B82C4 |
信頼・技術 |
| Stable Green | #2D6A4F |
#4F8A6E |
安定・成長 |
| Grounded Orange | #C2410C |
#DD6B3D |
注意・アクション |
| Sophisticated Indigo | #4338CA |
#7C79E8 |
高級感・モダン |
| Clarity Teal | #0F766E |
#2FA39A |
明瞭・冷静 |
通常テキストのコントラスト比は最低 4.5:1(WCAG AA)を満たすこと。
5. スペーシング・レイアウト (Spacing & Layout)
- 8px グリッド厳守: 4 / 8 / 16 / 24 / 32 / 48 / 64px(
gap-1/2/4/6/8/12/16) - 任意値禁止:
p-[13px]等を使用しない - 角丸:
rounded-md/rounded-lg
のみ。ただし、アイコン、バッジ、アバター、スウォッチ等の円形UIはrounded-fullを許容する。 - 境界線:
border/border-b/divide-y/hr
は最終手段。先に余白で解決する(※ヘッダーやタブ等の下線は許容)
6. アニメーション (Animation)
6.1 規定値(duration / easing)
| 用途 | duration | easing | Tailwind 例 |
|---|---|---|---|
| マイクロインタラクション | 150ms | ease-out |
transition-all duration-150 ease-out |
| 状態変化(色・背景) | 200ms | ease-out |
transition-colors duration-200 ease-out |
| 要素の出現・消失 | 200-300ms | ease-in-out |
transition-opacity duration-300 ease-in-out |
| ページ切替 | 200-300ms | ease-in-out |
ルーティング遷移 |
| チャットテキスト描画 | ストリーミング | - | 文字/ブロック単位フェード(duration-150) |
6.2 制約
- 300ms 超のアニメーション禁止
- 装飾目的のアニメーション(回転・バウンス・パララックス)禁止(※稼働状態やロードを示すパルス・スピン等は例外)
prefers-reduced-motion: reduce時はmotion-reduce:*で無効化
7. アクセシビリティ (Accessibility: WCAG 2.1 AA)
- 通常テキスト 4.5:1 以上、大テキスト 3:1 以上
- 色だけに依存せず、ラベル・アイコン・形状差を併用
- 全機能キーボード操作可能、
focus-visible:で明確なフォーカス表示 - セマンティック HTML と正しい見出し階層を維持
- フォームは
labelを関連付け、エラーはテキストで明示 - 動的更新(チャット追加など)は
aria-liveで通知
8. 多言語対応 (i18n)
8.1 対応言語
- 初期リリースは
ja/en - 将来言語を追加可能な i18n 構造を前提に設計
8.2 実装要件
- UI 文字列はすべて翻訳リソース経由(ハードコード禁止)
- 言語切替は設定 UI から実行可能にする
- 選択言語は
app_settingsに永続化する - 日付・時刻・数値は
IntlAPI 等でロケール準拠にする - ラベル長が増えても崩れないレイアウト(折返し・最小幅・余白)を確保する
8.3 フォントと i18n の接続ルール
locale に応じたフォント切替の詳細ルール(言語別フォント定義、Mono フォールバック等)は
[[ame-ui-typography]] Skill の「フォントと多言語対応 (i18n) の接続ルール」を参照・適用すること。
9. 禁止事項 (Negative Constraints)
- 過度なドロップシャドウ(
shadow-lg,shadow-xl) - グラデーション背景(
bg-gradient-to-*) - 余白で解決可能な区切り線(
border-b,hr) - 8px グリッド外の任意値(
p-[13px]等) text-justifyrounded-xl以上- テキストのハードコード(翻訳リソースを通さない UI 文言)
10. AI 実行ワークフロー (Execution Workflow)
コンポーネント生成・修正時は、以下 Step 1〜5 を必ず実行すること。
Step 1: 要件分析と情報設計
- コンポーネントの目的、画面内コンテキスト、利用ロケール(
ja/en)を確認する - 情報優先順位とセマンティック構造(
main/section/article/nav)を決定する
Step 2: レイアウト設計(引き算 + 余白)
- 8px グリッドで要素を配置し、余白で情報構造を分離する
- 関連要素は
gap-*で近接、非関連要素はmt-*/p-*で分離する - 線ではなく余白を優先し、角丸は
rounded-md/lgに限定する - 既知のサービス・操作に紐づく要素にはアイコン(Lucide)を併記し、図表は HTML/SVG のどちらで実装するかを内容に応じて判断する(§3 準拠)
Step 3: スタイル適用(Typography / Color / i18n)
- タイポグラフィ(見出し階層・フォント・行間・字間・行長)は [[ame-ui-typography]]
Skill の規定に従って適用する --color-primaryとdark:を使い、ライト/ダーク双方でコントラストを満たす- 文字列を翻訳キー経由へ統一し、日時/数値をロケール形式にする
Step 4: アクセシビリティとモーション検証
focus-visible、label、aria-*、aria-liveを確認する- アニメーションは規定 duration/easing 内に収める
motion-reduce:*を適用し、色だけに依存した状態表現を排除する
Step 5: 禁止事項と品質ゲート最終確認
- 禁止事項(シャドウ、グラデーション、任意値、過剰角丸、ハードコード文言)を全点検する
- 既知の操作・サービスに紐づく要素にアイコン抜けがないか、図表の実装手段(HTML/SVG)が内容に見合っているかを確認する
ja/enの表示崩れと読みやすさを確認し、問題なければ最終コードを出力する