UIXHERO

Button(ボタン)

UIで最も重要なインタラクション要素であるボタンの、機能(階層)、状態、配置を一貫させるための設計基準。

2026年2月26日
更新: 2026年8月28日
17
by Dengen Yosho(DGYS)

ユーザーのアクションをトリガーし、画面内の「次にすべきこと」を視覚的に明確にする部品。

ボタンは見た目の部品であると同時に、フィッツの法則がそのまま効く操作対象です。押しやすさはクリック領域・到達しやすさで、画面内の優先順位は主要導線視覚的階層で判断します。

この記事を読むと、バリアント選択・状態設計・A11y要件の判断が自分でできるようになります。


1. UI例(Preview / Live)

このボタンは、 GUNJO の Button 実装です。バリアント(役割)・サイズ・状態を、実際の設計トークンでそのまま確認できます(右上の Code で編集も可能)。

実装で見る(GunjoUI)

この部品を、デザインシステム GUNJO の実装で確かめられます。

2. 定義(Definition)

ユーザーのアクション(送信・保存・削除など)をトリガーする最も基本的なインタラクション要素。

リンクとの違い<a> はページ遷移、<button> はシステム状態の変更。役割が異なるため混用しない。


3. 使い分け(When to use / When NOT to use)

3.1 When to use

  • フォームの送信やデータの保存・削除など、システムの状態を変更するとき
  • ユーザーに特定のアクションを強く促したいとき
  • モーダルの開閉など、の状態を切り替えるとき

3.2 When NOT to use

  • 単純な別ページへの遷移(テキストリンクまたは <a> を使う)
  • 文章の中にインラインで埋め込むとき(リンクを使うべき)
  • アイコンだけで意味が伝わらない場合(aria-label なしのアイコンボタンは不可)

3.3 代替UI(Alternatives)

  • ページ遷移 → Link<a>
  • トグル切替 → Toggle / Switch
  • 展開 → DropdownMenu

4. 設計判断の核(Decision Principles)

アクションの重要度と視覚的重みを必ず一致させる。

判断の優先順位:① 役割(何をする?) → ② 優先度(この画面で何が主役?) → ③ 状態(今使えるか?) → ④ 配置(どこに置く?)

  • Primaryは1画面(1セクション)に1つまで
  • 複数並ぶ場合は Primary / Secondary / Tertiary で明確なをつける
  • 破壊的操作(削除・リセット)は必ず Destructive スタイルで意味を分離する
  • ボタンのラベルは「動詞」で書く(×「設定」→ ○「設定を保存する」)

5. 状態設計(States)

5.1 必須状態(Required)

  • Default:操作可能な基本状態。クリッカブルであることが見た目で分かること
  • Focus:キーボード操作時にフォーカスリングを表示(省略不可)
  • Disabled:透明度を下げ、操作不可を示す。cursor-not-allowed を付与

5.2 条件付き状態(Conditional)

  • Hover:マウスオーバー時に色・影を変化させクリッカブルと示す
  • Active:クリック・タップの瞬間に押下感を伝える(scale or 色を濃く)
  • Loading:処理中にスピナーを表示し、ボタンを同時に disabled にして重複送信を防ぐ
状態必須何を伝えるか
Default押せることを示す
Focus今ここにいることをキーボードユーザーに示す
Disabled今は押せないことを示す
Hover押せることをマウスユーザーに強調する
Active押した瞬間の押下感を伝える
Loading処理中であることを伝え、重複操作を防ぐ

6. バリエーション設計(Variants)

見た目の違いではなく、意味の違いでバリアントを選ぶ。

バリアント目的1画面での上限
Primary最重要アクション1つ
Secondary補助的なアクション複数可
Tertiaryキャンセル・低優先アクション複数可
Destructive削除など不可逆な破壊的操作文脈で判断

禁止パターン:同一画面に Primary が複数 → どれを押すべきか分からなくなる

併用の指針:Primary + Secondary の組み合わせが最も安全。Tertiary は3つ以上並べない。


7. パターン集(Good / Bad / How to fix)

7.0 よく崩れる設計パターン(3つ)

  • 優先順位の崩壊:Primaryボタンが複数存在し、どれを押すべきか迷わせる
  • 状態の欠落:Hover/Focus/Loadingがなく、押せるのか・押せたのか伝わらない
  • リンクとの混同:ページ遷移(<a>)とアクション実行(<button>)の役割が曖昧になる

7.1 Bad(典型3つ)

  • 「保存」「次へ」「キャンセル」が全て同じ青塗りつぶしで並んでいる
  • Loadingスピナーを出しているのにボタンが押せるまま → 重複送信が発生する
  • アイコンのみのボタンに aria-label がない → スクリーンリーダーが読み上げられない

7.2 Good(対になる3つ)

  • 「保存」をPrimary、「次へ」をSecondary、「キャンセル」をTertiaryに → 重要度が一目瞭然
  • Loading時に disabled を同時付与 → 重複送信ゼロ
  • アイコンボタンに aria-label="閉じる" を付与 → 全ユーザーが操作できる

7.3 How to fix(手順)

  1. この画面で「最もユーザーに押してほしいアクション」を1つ決める
  2. そのアクションだけに Primary スタイルを適用する
  3. 残りのアクションを重要度順に Secondary / Tertiary に降格する
  4. 削除など破壊的アクションは Destructive スタイルへ変更する
  5. 各ボタンに Focus / Disabled / Loading の状態が実装されているか確認する

7.4 GUNJO 実装で見る(Bad / Good)

同じ GUNJO の Button を、崩れた使い方と正しい使い方で並べたもの。


8. ルール(Must / Better)

Must(守らないと壊れる)

Better(品質が跳ねる)


9. アクセシビリティ要件(必須)

Keyboard

  • Tab でフォーカスでき、Enter および Space でアクションを実行できること

Focus

  • フォーカスリングは周囲の要素と4.5:1以上のコントラストを持つこと

Screen Reader

  • ラベルは文脈に依存しない明確な動詞にする。アイコンのみのボタンは aria-label 必須
<!-- アイコンのみのボタン例 -->
<button aria-label="閉じる">
  <svg aria-hidden="true">...</svg>
</button>

Touch / Pointer

  • 最小 44×44px 以上を確保する

Contrast / Readability

  • ボタンテキストと背景色は4.5:1以上のコントラスト比を確保する

10. 実装メモ(Implementation Notes)

  • <a>onClick でアクションを実行するパターンは避ける。必ず <button type="button"> を使う
  • type="submit"<form> 内での送信専用。意図しない送信を防ぐため、アクション専用ボタンには type="button" を明示する
  • Disabled 状態では pointer-events: none だけでなく aria-disabled="true" または disabled 属性を付与してスクリーンリーダーにも伝える
  • Tailwind の focus-visible:outline を使うと、マウス操作時はリングを出さずキーボード操作時だけ表示できる(とA11yの両立)

11. 関連リンク


まとめ

ボタンの設計は「ユーザーを迷わせない」ことが全てです。迷ったら 4. 設計判断の核 に戻り、アクションの重要度と視覚的重みが一致しているかを確認してください。状態設計(5.)とバリアント選択(6.)が揃えば、UIの品質と安定感は大きく向上します。

更新のお知らせ

サイトに載せていない実例や、新しい記事のお知らせはこちらで出しています。

読んだ内容を、自分の画面に当てるとき

UIXHEROは、記事を書くほかに、画面の検品・判定、デザインシステムの構築、実装と改善の伴走を受けています。何を頼めばいいか決まっていない段階の相談も、同じ窓口で受けます。

UIXHEROに頼めることを見る

※ 記事の内容についての質問や、書いてほしいテーマの要望も同じ窓口で受けています

記事をシェア

メールでお知らせを受け取る

最終更新: 2026年8月28日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

UI/UXデザイナー兼デザインエンジニア デザイン歴25年以上 情報設計〜UIデザイン〜React/TypeScriptによる実装までを一気通貫で担当 大手企業のDXプロジェクトや決済アプリ領域で、デザインリードとして改善と構築を経験 現在はフリーランスとして、プロダクトのUI/UX改善とデザインシステム構築を支援 長年の実務の中で感じてきたのは、 「良いUI」はセンスではなく、再現可能な判断の積み重ねであるということ UIXHEROは、 心理学や行動科学の知見を、現場で使える設計言語に翻訳するための場所 関心領域は「ユーザーの行動が変わるUI」 人の認知・注意・意思決定の構造を理解し、 “なぜそのUIが機能するのか”を言語化することを目指している

あわせて読みたい

この記事に関連する記事をご紹介します

Bar Chart(棒グラフ)

カテゴリごとの量を棒の長さで比べるチャート。ゼロ基線の扱い、並び順、縦横の選び方、しきい値の見せ方という設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
18

Donut Chart(ドーナツチャート)

中央をくり抜いた円で構成比を示すチャート。中央に置く値の選び方、円グラフとの使い分け、リングの太さ、凡例の作りという設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
17

Gauge Chart(ゲージチャート)

1つの値を範囲の中に置いて示す半円のチャート。範囲の両端に意味があるかという条件、しきい値の帯の設計、色だけで良否を伝えない書き方という設計判断とアクセシビリティ要件を解説する。

2026年8月27日
16

もっと深く知りたいですか?

ここに掲載されていないトピックについても、リクエストがあれば解説記事を追加します。 わかりにくい点や、具体的な事例について知りたいことがあれば教えてください。

リクエストを送る