HIG Compliance — Apple Human Interface Guidelines 準拠チェック・補正
Apple Human Interface Guidelines(https://developer.apple.com/jp/design/human-interface-guidelines/) を権威ある基準として、システム全体のUIの一貫性・完全性を横断的にチェックし、補正するスキル。
Agent Team による並行実装で発生しがちな「画面ごとの微妙なずれ」を検出・修正することに特化する。
既存スキルとの棲み分け:
design-system-audit: デザイントークン(数値体系)の整合性 → 数値レベルui-ux-design: 個別画面のUI設計・レビュー・実装 → 画面レベルhig-compliance(本スキル): HIG原則に基づくシステム横断の振る舞い・用語・構造の一貫性 → システムレベル
前提条件
| 参照ファイル | 用途 | フォールバック |
|---|---|---|
docs/development-patterns.md |
デザインシステム・UI規約 | project-config.md §7 を直接参照 |
| Apple HIG(公式URL) | UIガイドライン基準 | WebFetch で直接参照 |
Apple HIG の参照方法
- WebFetch で
https://developer.apple.com/jp/design/human-interface-guidelines/を直接参照する - 該当カテゴリのページを必要に応じて個別に取得する(ボタン、ナビゲーション、アイコン等)
- プロジェクトの
docs/development-patterns.mdに HIG ベースのルールが記載されていればそちらを優先する
基本姿勢
- Apple HIG を第一基準とする — 迷ったらHIGに立ち返る
- システム全体の一貫性を最優先する — 個別画面の「良さ」よりシステム全体の統一を重視する
- ずれの検出は機械的・網羅的に行う — 目視では見落とす微差こそ本スキルの対象
- 修正案は具体的かつ1つに絞る — 「AかBか」ではなく「Aに統一」と断言する
- 判断に迷う場合のみユーザーに選択肢を提示する
使い方
/hig-compliance # src/ 全体をチェック
/hig-compliance src/features/ # 特定ディレクトリのみ
/hig-compliance --fix # チェック + 自動補正
/hig-compliance --fix src/features/ # 特定ディレクトリ + 自動補正
/hig-compliance --glossary # UI用語集の生成・更新のみ
出力先
- チェックレポート:
output/reports/review/HIG_COMPLIANCE_{YYYYMMDD}.md - UI用語集(生成時):
docs/ui-glossary.md
他スキルとの連携
| 前工程 | 本スキル | 後工程 |
|---|---|---|
/implementing-features /ui-ux-design |
/hig-compliance |
/code-review /e2e-testing |
/design-system-audit |
/hig-compliance |
— |
推奨フロー: 実装完了 → design-system-audit(トークン整合性)→ hig-compliance(HIG準拠・一貫性)→ code-review
ワークフロー
Phase 1: UI用語集の確立(初回 or --glossary 時)
プロジェクト全体で使用するUI用語を統一するための用語集を生成する。
docs/ui-glossary.md が存在しない場合、または --glossary 指定時に実行。
1.1 現状の用語収集
以下をサブエージェントで並行スキャンする:
| スキャン対象 | 手法 | 収集内容 |
|---|---|---|
| ボタンラベル | Grep で >保存< >キャンセル< label= title= aria-label= 等を収集 |
全ボタンのキャプション一覧 |
| ページタイトル | Grep で <h1 <title PageTitle Header コンポーネントを収集 |
全画面タイトル一覧 |
| ナビゲーション | Grep でメニュー・タブ・ブレッドクラムのラベルを収集 | ナビゲーション項目一覧 |
| フォームラベル | Grep で <label placeholder= を収集 |
フォーム項目一覧 |
| アラート・通知 | Grep で toast alert confirm dialog のメッセージを収集 |
通知メッセージ一覧 |
| 空状態 | Grep で empty no-data EmptyState を収集 |
空状態メッセージ一覧 |
1.2 用語の標準化
HIG の原則に基づいて用語を標準化する:
- 動詞の統一: 「保存」「セーブ」「保管」→ 1つに統一
- キャンセル系の統一: 「キャンセル」「取消」「戻る」「閉じる」→ 文脈に応じて使い分けルールを定義
- 確認系の統一: 「OK」「確認」「はい」「了解」→ HIG準拠の推奨表現に統一
- 破壊的操作: 「削除」「消去」「除去」→ HIG に従い動詞で明示(「〜を削除」)
1.3 docs/ui-glossary.md 出力
# UI用語集
## ボタンラベル標準
| 操作 | 標準ラベル | NG例 | HIG根拠 |
| ---- | ---------- | ---- | -------- |
| 新規作成 | 作成 | 新規、追加、新しく作る | Buttons: 簡潔で動作を示す動詞 |
| 保存 | 保存 | セーブ、保管、OK | Buttons: 具体的な動詞を使う |
| 削除 | 削除 | 消す、除去、消去 | Buttons: 破壊的操作は明確に |
| 取消 | キャンセル | 取消、やめる、戻る | Buttons: 「キャンセル」を標準とする |
| 確認 | [具体的な動詞] | OK、はい、確認 | Buttons: 「OK」より具体的な動詞を推奨 |
## ページタイトル標準
| パターン | 形式 | 例 |
| -------- | ---- | -- |
| 一覧画面 | [名詞]一覧 or [名詞] | ユーザー一覧 |
| 詳細画面 | [名詞]詳細 or [名詞名] | ユーザー詳細 |
| 作成画面 | [名詞]を作成 | ユーザーを作成 |
| 編集画面 | [名詞]を編集 | ユーザーを編集 |
| 設定画面 | 設定 or [カテゴリ]設定 | 通知設定 |
## アイコン使用標準
| 操作 | 標準アイコン | 必須/推奨 |
| ---- | ------------ | --------- |
| 追加 | Plus / PlusCircle | 推奨 |
| 削除 | Trash2 | 必須 |
| 編集 | Pencil / Edit | 推奨 |
| 検索 | Search | 必須 |
| 設定 | Settings / Gear | 必須 |
| 戻る | ArrowLeft / ChevronLeft | 必須 |
| 閉じる | X | 必須 |
| メニュー | Menu / MoreHorizontal / MoreVertical | 必須 |
| フィルタ | Filter / SlidersHorizontal | 推奨 |
| ソート | ArrowUpDown | 推奨 |
## 通知メッセージ標準
| 種別 | 形式 | 例 |
| ---- | ---- | -- |
| 成功 | 「[名詞]を[動詞]しました」 | ユーザーを作成しました |
| エラー | 「[名詞]の[動詞]に失敗しました」 | ユーザーの作成に失敗しました |
| 確認 | 「[名詞]を[動詞]しますか?」 | このユーザーを削除しますか? |
| 警告 | 「[影響の説明]。[動詞]しますか?」 | この操作は取り消せません。削除しますか? |
Phase 2: HIG準拠チェック(8カテゴリ)
以下のカテゴリをサブエージェントで並行スキャンする。
カテゴリ A: ボタン・アクションの一貫性
HIGの「Buttons」「Menus」「Toggles」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| 同一操作のキャプションが画面間で異なる | 用語集と照合 | 「一貫性のある用語を使う」 |
| 破壊的ボタンに警告スタイルが適用されていない | variant="destructive" color="error" 等の有無 |
「破壊的アクションは視覚的に区別する」 |
| 確認ダイアログで「OK」が使われている | Grep で >OK< "OK" |
「具体的な動詞を使用する」 |
| ボタンの配置順序が画面間で異なる | 主アクション/副アクションの左右位置 | 「主アクションは一貫した位置に配置」 |
| アイコンのみのボタンにラベルがない | aria-label title の有無 |
「アクセシビリティ」 |
カテゴリ B: アイコンの完全性・一貫性
HIGの「Icons」「SF Symbols」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| 同一操作に異なるアイコンが使用されている | アイコンimport一覧と操作の対応を分析 | 「同じ概念には同じアイコンを使う」 |
| アイコンが設定されるべき箇所に欠落している | 用語集のアイコン標準と照合 | 「一貫性」 |
| アイコンサイズが画面間で異なる | size= width= height= className の値を比較 |
「視覚的な一貫性」 |
| テキストとアイコンの組み合わせが不統一 | ボタン内の <Icon> + テキストパターンを比較 |
「テキストとアイコンの関係性」 |
カテゴリ C: ナビゲーション・画面遷移の一貫性
HIGの「Navigation bars」「Tab bars」「Sidebars」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| 戻るボタンのスタイル・位置が画面間で異なる | ナビゲーションコンポーネントの実装比較 | 「予測可能なナビゲーション」 |
| パンくずリストの有無が画面間で不統一 | Breadcrumb コンポーネントの使用状況 | 「ユーザーの現在位置を示す」 |
| ページ遷移のアニメーションが不統一 | transition / animation の使用パターン | 「一貫した遷移」 |
| モーダル vs ページ遷移の使い分けが不統一 | Dialog/Sheet の使用基準 | 「モーダルの適切な使用」 |
カテゴリ D: フォーム・入力の一貫性
HIGの「Text fields」「Labels」「Entering data」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| 同じ種類の入力フィールドのスタイルが異なる | Input / Select / Textarea の variant/size 比較 | 「一貫した入力体験」 |
| プレースホルダーの文体が統一されていない | placeholder テキストの表現パターン | 「ヒントテキストは簡潔に」 |
| バリデーションエラーの表示方法が異なる | エラーメッセージの表示パターン比較 | 「インラインでのフィードバック」 |
| 必須/任意の表示方法が統一されていない | required マーク・ラベルの形式 | 「明確なラベリング」 |
| フォームのレイアウト(縦/横)が不統一 | フォーム構造の比較 | 「予測可能なレイアウト」 |
カテゴリ E: フィードバック・状態表示の一貫性
HIGの「Alerts」「Progress indicators」「Status」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| ローディング表示の方式が画面間で異なる | Spinner / Skeleton / Progress の使用比較 | 「一貫したフィードバック」 |
| 成功/エラー通知の表示方法が異なる | toast / alert / banner の使い分け比較 | 「フィードバックの一貫性」 |
| 空状態のデザインが画面間で異なるか欠落 | EmptyState コンポーネントの使用比較 | 「コンテンツが無い場合もガイダンスを提供」 |
| 確認ダイアログの構造が画面間で異なる | Dialog 内の構造(タイトル/説明/ボタン)比較 | 「アラートの構造」 |
| エラー画面のデザインが統一されていない | ErrorBoundary / error page の比較 | 「エラー時のガイダンス」 |
カテゴリ F: タイポグラフィ・テキストの一貫性
HIGの「Typography」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| 見出し階層が画面間で異なる | h1-h6 / text-xl 等の使用パターン比較 | 「明確な情報階層」 |
| 日付・時刻のフォーマットが不統一 | 日付表示パターンの収集・比較 | 「一貫したフォーマット」 |
| 数値のフォーマットが不統一 | 数値表示(カンマ区切り・単位)の比較 | 「一貫したフォーマット」 |
| 文末表現の不統一 | 「〜です」「〜する」等の文体比較 | 「一貫したトーン」 |
カテゴリ G: レイアウト・構造の一貫性
HIGの「Layout」「Lists and tables」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| 一覧画面のレイアウト(テーブル/カード/リスト)が不統一 | 一覧表示コンポーネントの比較 | 「一貫したコンテンツ表示」 |
| 詳細画面のセクション構造が不統一 | セクション分割パターンの比較 | 「予測可能な構造」 |
| ページヘッダーの構造が不統一 | タイトル+アクションボタンの配置比較 | 「一貫したヘッダー構造」 |
| リストアイテムの構造が不統一 | リスト項目の内部構造比較 | 「一貫したリスト表示」 |
カテゴリ H: アクセシビリティの一貫性
HIGの「Accessibility」セクションに基づく。
| チェック項目 | 検出方法 | HIG根拠 |
|---|---|---|
| フォーカス順序が論理的でない | tabIndex の使用パターン | 「論理的なフォーカス順序」 |
| 画像の alt テキストが欠落している | <img <Image の alt 属性チェック |
「代替テキスト」 |
| カラーのみで情報を伝えている箇所がある | 色+アイコン/テキストの併用チェック | 「色だけに依存しない」 |
| タッチターゲットが小さすぎる | ボタン/リンクのサイズ確認(44x44pt以上) | 「最小タッチターゲット」 |
Phase 3: 一貫性分析
Phase 2 の収集データを基に、画面間の差異をマトリクスで可視化する。
3.1 ボタンキャプション一貫性マトリクス
| 操作 | 画面A | 画面B | 画面C | 統一案 | 状態 |
|------|-------|-------|-------|--------|------|
| 保存 | 保存 | セーブ | 保存する | 保存 | NG |
| 削除 | 削除 | 削除 | 消去 | 削除 | NG |
| 戻る | 戻る | キャンセル | 閉じる | (文脈依存) | 要判断 |
3.2 アイコン使用一貫性マトリクス
| 操作 | 画面A | 画面B | 画面C | 統一案 | 状態 |
|------|-------|-------|-------|--------|------|
| 編集 | Pencil | Edit2 | — (欠落) | Pencil | NG |
| 削除 | Trash2 | Trash | Trash2 | Trash2 | NG |
| 追加 | Plus | Plus | PlusCircle | Plus | NG |
3.3 UX状態実装マトリクス
| 画面 | ローディング | エラー | 空状態 | 確認ダイアログ |
|------|------------|--------|--------|-------------|
| 画面A | Spinner | toast | ✅ | ✅ |
| 画面B | Skeleton | alert | — | ✅ |
| 画面C | Spinner | toast | ✅ | — |
Phase 4: 不整合の分類と優先度
| 分類 | 基準 | 優先度 | 自動修正 |
|---|---|---|---|
| キャプション不一致 | 同一操作で異なるラベル | HIGH | ✅ 可能 |
| アイコン欠落 | 標準アイコンが設定されるべき箇所に無い | HIGH | ✅ 可能 |
| アイコン不一致 | 同一操作で異なるアイコン | HIGH | ✅ 可能 |
| 確認ダイアログの「OK」使用 | 具体的動詞に置換すべき | MEDIUM | ✅ 可能 |
| フィードバック方式の不一致 | toast/alert の混在等 | MEDIUM | ⚠️ 部分的 |
| 空状態の欠落 | 他画面にはある空状態が無い | MEDIUM | ❌ 新規実装 |
| レイアウトパターンの不一致 | ページヘッダー構造の差異等 | MEDIUM | ⚠️ 部分的 |
| 文体・フォーマットの不一致 | 日付形式、敬体/常体の混在 | LOW | ✅ 可能 |
| a11y 不備 | alt欠落、タッチターゲット不足 | HIGH | ⚠️ 部分的 |
Phase 5: レポート出力 or 自動補正
レポートのみ(デフォルト)
output/reports/review/HIG_COMPLIANCE_{YYYYMMDD}.md に出力。
自動補正(--fix)
以下の順序で修正を適用する:
- キャプション統一: 用語集に基づき、ボタン/リンクのラベルを一括置換
- アイコン統一: 用語集のアイコン標準に基づき、import とコンポーネントを修正
- 確認ダイアログ修正: 用語集で1:1マッピングが定義されている場合のみ「OK」→ 具体的動詞に置換
- 修正後にビルド・lint・テストを実行して破壊的変更がないことを確認
レポートのみ(自動補正対象外): アイコン欠落補完(新規要素追加が必要)、フォーマット統一(日付・数値の関数変更は影響範囲が広い)。これらはレポートに記載し人間の判断に委ねる。
自動補正の安全基準:
- 用語集で 1:1 マッピングが定義されている変換のみ実行
- 複数候補がある場合はレポートに記載して人間に委ねる
- 修正前後で機能が変わらないことをテストで確認
出力契約
レポート出力仕様
| セクション | 必須 | 制約 |
|---|---|---|
| チェック概要 | ✅ | スキャン範囲・ファイル数・チェック項目数 |
| 用語集との照合結果 | ✅ | 一致率・不一致一覧 |
| カテゴリ別チェック結果 | ✅ | A〜H の各カテゴリ。0件でも見出しは残す |
| 一貫性マトリクス | ✅ | ボタン・アイコン・UX状態の比較表 |
| 不整合一覧 | ✅ | HIGH→MEDIUM→LOW の順 |
修正サマリー(--fix 時のみ) |
条件付き | 修正ファイル数・修正内容・テスト結果 |
| 推奨アクション | ✅ | 人間の判断が必要な項目 |
| HIG準拠スコア | ✅ | カテゴリ別スコア + 総合スコア |
重要度定義
| レベル | 判定基準 | 例 |
|---|---|---|
| MUST | HIG明示違反、同一操作でのUI矛盾、a11y不備 | 同じ「保存」操作で異なるキャプション、アイコン欠落 |
| SHOULD | HIG推奨との乖離、パターン不一致 | ローディング表示の不統一、空状態の欠落 |
| CONSIDER | 改善余地のある箇所 | 文体の微差、レイアウトの軽微な差異 |
指摘記述フォーマット
- [ ] `ファイルパス:行番号` 指摘内容。**HIG根拠**: 該当ガイドライン。**統一案**: 具体的な修正。**対象画面**: 影響する画面一覧。
レポートフォーマット
# HIG準拠チェックレポート: {YYYY-MM-DD}
## チェック概要
- スキャン範囲: {src/ 全体 or 特定ディレクトリ}
- スキャン対象ファイル数: X
- 画面(ページ)数: Y
- チェック項目数: Z
- 用語集: {docs/ui-glossary.md を使用 / 新規生成}
## 用語集との照合結果
- ボタンキャプション一致率: X%
- アイコン標準充足率: X%
- 不一致項目数: X
## カテゴリ別チェック結果
### A: ボタン・アクションの一貫性
- [ ] `file:line` 指摘。**HIG根拠**: xxx。**統一案**: yyy。
### B: アイコンの完全性・一貫性
...
### C: ナビゲーション・画面遷移の一貫性
...
### D: フォーム・入力の一貫性
...
### E: フィードバック・状態表示の一貫性
...
### F: タイポグラフィ・テキストの一貫性
...
### G: レイアウト・構造の一貫性
...
### H: アクセシビリティの一貫性
...
## 一貫性マトリクス
### ボタンキャプション
| 操作 | 画面A | 画面B | ... | 統一案 | 状態 |
| ---- | ----- | ----- | --- | ------ | ---- |
### アイコン使用
| 操作 | 画面A | 画面B | ... | 統一案 | 状態 |
| ---- | ----- | ----- | --- | ------ | ---- |
### UX状態実装
| 画面 | ローディング | エラー | 空状態 | 確認ダイアログ |
| ---- | ------------ | ------ | ------ | -------------- |
## 不整合一覧
### MUST(必須修正)
- [ ] ...
### SHOULD(推奨修正)
- [ ] ...
### CONSIDER(検討)
- [ ] ...
## 修正サマリー(--fix 実行時のみ)
- 修正ファイル数: X
- 修正内容:
- [修正概要]
- ビルド結果: pass / fail
- テスト結果: X passed, Y failed
## 推奨アクション
1. [人間の判断が必要な項目]
## HIG準拠スコア
| カテゴリ | スコア | 評価 |
| -------- | ------ | ---- |
| A: ボタン・アクション | X/100 | — |
| B: アイコン | X/100 | — |
| C: ナビゲーション | X/100 | — |
| D: フォーム・入力 | X/100 | — |
| E: フィードバック | X/100 | — |
| F: タイポグラフィ | X/100 | — |
| G: レイアウト・構造 | X/100 | — |
| H: アクセシビリティ | X/100 | — |
| **総合** | **X/100** | — |
用語集のメンテナンス
- 初回: Phase 1 で自動生成 → ユーザーレビュー →
docs/ui-glossary.mdに保存 - 更新:
/hig-compliance --glossaryで再スキャン・差分表示 - 実装時参照:
/implementing-features実行時にdocs/ui-glossary.mdを参照させることで、新規画面でもずれを防止
用語集を他スキルに連携する方法
docs/ui-glossary.md が存在する場合、以下のスキルが自動参照する:
/implementing-features: 新規UI実装時にキャプション・アイコンを用語集に準拠/ui-ux-design: レビュー時に用語集との照合をチェック項目に追加/code-review: UI変更を含むレビュー時に用語集準拠を確認
連携の前提: 上記スキルの「デザインシステム確認」ステップで
docs/ui-glossary.mdを読み込むよう、docs/development-patterns.mdのデザインシステムセクションに用語集への参照を記載すること。
禁止事項
- 用語集に定義されていない独自のキャプション・ラベルの追加
- HIG の原則に反するUI変更
- アイコンの恣意的な変更(用語集の標準に従う)
--no-verifyによるフック迂回--forceによるプッシュ