Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
日本語の概要は準備中です。原文の説明を表示しています。
Use when building or changing any interactive mobile UI - VoiceOver/TalkBack labels, grouping, headings, focus order, Dynamic Type/font scale, reduce motion, contrast, and the automated check for each stack.
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
VoiceOver and TalkBack are not an edge case — they're how a meaningful share of your users, and every store review, go through the screen. Every control that is interactive needs a label a screen reader can speak; every screen needs a sane reading and focus order; text needs to scale.
Core principle: build it accessible the first time — retrofitting labels after the fact means re-testing the whole screen.
| Concern | Flutter | Compose | SwiftUI |
|---|---|---|---|
| Label | Semantics(label:) / tooltip / semanticLabel on Image/Icon | contentDescription (null = decorative) | accessibilityLabel / Button("…", systemImage:) |
| Grouping | MergeSemantics | Modifier.semantics(mergeDescendants = true) | .accessibilityElement(children: .combine) |
| Heading | Semantics(header: true) | semantics { heading() } | .accessibilityAddTraits(.isHeader) |
| Hidden/decorative | ExcludeSemantics | Modifier.clearAndSetSemantics {} | Image(decorative:) |
| Custom action | CustomSemanticsAction | Modifier.semantics { customActions = … } | .accessibilityAction(named:) |
| Live region | Semantics(liveRegion: true) | Modifier.semantics { liveRegion = … } | .accessibilityAddTraits(.updatesFrequently) |
Rules that apply everywhere:
@ScaledMetric (SwiftUI) / theme text styles (Flutter, Compose) everywhere text appears — never a hardcoded point/sp size that ignores the system font-scale setting.MediaQuery.disableAnimationsOf(context) (Flutter), LocalAccessibilityManager/animation duration checks (Compose), @Environment(\.accessibilityReduceMotion) (SwiftUI) — skip or shorten a decorative animation, never a functional state change.meetsGuideline — androidTapTargetGuideline (48×48), iOSTapTargetGuideline (44×44), labeledTapTargetGuideline, textContrastGuideline. Run all four against any new interactive widget's test (see mobile-visual-self-review's worked example).rule.enableAccessibilityChecks() (ui-test-junit4-accessibility) runs the Accessibility Test Framework before every UI-mutating test action. It requires an API 34+ device/emulator — on Robolectric it only warns, so a Robolectric-only pass is inconclusive and must be said so in the closing message. tryPerformAccessibilityChecks() for a manual, one-off gate inside a test.try app.performAccessibilityAudit() (Xcode 15+) inside a UI test — fails the test on a real finding (e.g. insufficient contrast, missing label).When you have a device but not a screen reader to drive, mobile_read_ui {filter: "clickable=\"true\""} is your proxy for "what would TalkBack/VoiceOver say here": every line needs a non-empty text or content-desc, and the bounds must meet the tap-target floor. This is not a substitute for the automated checks above — it catches missing labels, not contrast or reading order.
❌ IconButton(icon: Icon(Icons.delete), onPressed: delete) // no label at all
✅ IconButton(
icon: const Icon(Icons.delete),
tooltip: 'Delete task', // spoken by TalkBack/VoiceOver
onPressed: delete,
)
// ❌ Button(action: delete) { Image(systemName: "trash") } // icon-only, silent
// ✅
Button("Delete task", systemImage: "trash", action: delete)
.labelStyle(.iconOnly) // visually icon-only, still spoken
tooltip/contentDescription/accessibilityLabel.enableAccessibilityChecks() pass as a verified result.Icon/Image used as the entire content of a tappable control with no label anywhere in the diff.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
日本語の概要は準備中です。原文の説明を表示しています。
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
日本語の概要は準備中です。原文の説明を表示しています。
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
日本語の概要は準備中です。原文の説明を表示しています。
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
日本語の概要は準備中です。原文の説明を表示しています。
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
日本語の概要は準備中です。原文の説明を表示しています。
Use when deciding whether a request needs an analiz task before implementation - the conditions that require the architect's analysis versus going straight to implementation
日本語の概要は準備中です。原文の説明を表示しています。