Design Notes

「Design Notes」は、日々の制作や学びの中で得たコーディング、Webデザイン、UIデザイン、UXデザインに関する知見を整理し、可視化することを目的としたサイトです。 自身のリファレンスとして蓄積しつつ、同じ分野に関心を持つ方の実務や学習にも役立てていただけることを目指しています。

Design Process(GDDベース)

①リサーチ

  • ビジネス・戦略理解:ビジネス目標やKPI,KGIの理解、プロダクトの目的や製品ビジョン、マネタイズ手法等の理解
  • 文献調査:プロダクトに関連する文献(競合製品や既存製品、社内資料)の分析
  • 競合分析:競合サービスの特徴や、強み、弱み、差別化ポイントの分析
  • ステークホルダーインタビュー:各部門(主にマーケティングやエンジニア、営業)と制約条件やプロダクトの目的等の確認
  • 顧客インタビュー:プロダクトを購入する人へのインタビュー。製品を購入する上でのゴールや、既存の課題などを把握する
  • ユーザーインタビュー&行動観察:ユーザーのニーズや不満、モチベーション、ゴール等を把握

②ペルソナモデリング

  • 基本属性:名前、年齢、職業、居住地など
  • 背景・文脈:どのような環境にいて、どんなライフスタイル送っているか
  • ゴール:そのサービスや製品を通じて何を成し遂げたいか
  • ニーズと動機:なぜそれが必要なのか、どのような価値を求めているか
  • ペイン:何に困っていて、何がストレスや不満になってるか
  • 行動特性:製品や特定の状況に対してどのような振る舞いや考え方をするか
  • 優先付け:場合によってはプライマリー、セカンダリーとペルソナタイプを決める

③要件定義

  • 問題ステートメント策定:リサーチとペルソナから導き出された、解決すべき本質的な課題や不満点を言語化
  • ソリューション・コンセプトの定義:どのような体験を提供したいか、そのためにどんな解決策を提供するかを決める
  • ユースケース・シナリオの作成:ペルソナがゴールを達成するために、どのような流れで製品を利用するのか、そのために何ができる必要があるか整理
  • 要件の抽出:ユースケースから具体的なデータ要素、機能要素に分けて必要なものを洗い出す

④情報設計・インタラクションデザイン

  • ユーザーフローの整理:ペルソナがゴールに達成するまでの行動を整理。類似サービスがあればフローを参考にする
  • 情報のグルーピングと階層構造の整理:抽出したデータ要素や機能を、論理的なまとまり(カテゴリー)に分類する。また、情報の親子関係や優先順位を整理し、全体像を俯瞰できる階層構造を構築
  • 画面遷移とナビゲーション:各画面がどのように繋がり、ユーザーが迷わず目的の場所へ移動できるかという動線を設計する
  • レイアウト設計(ワイヤーフレーム):視覚的な装飾を排し、情報の配置、UI要素の優先度、コンテンツのボリュームを具体化する。ブラウザのレンダリング構造や実装の実現性を考慮しつつ、骨組みを作る
  • プロトタイピング:実際のデバイスでの操作感、インタラクション、画面間のつながりに違和感がないかを確認する

⑤ビジュアルデザイン

  • デザインコンセプト・トンマナ策定:サービスが提供したい価値や感情を言語化し、色、タイポグラフィ、雰囲気の方向性を決める
  • スタイルガイド・デザインシステムの構築:カラーパレット(プライマリー、アクセント、背景色)、フォントサイズ、余白(Spacing)、角丸などの基本ルールを規定する
  • デザインの精緻化:ワイヤーフレームに基づき、情報をより直感的に伝えるための視覚的な強弱、アイコン、画像などを適用し、完成図を作る
  • マイクロインタラクション:ボタンのホバー状態、ローディングアニメーション、画面遷移の演出など、操作の手応え(フィードバック)を設計

⑥検証・改善

  • ヒューリスティック評価:UIデザインの原則や視認性のガイドラインに照らし合わせ、レイアウトやナビゲーションに論理的な破綻がないか、実装前にセルフチェックを行う
  • ユーザービリティテスト:プロトタイプを用いて、ユーザーが迷わず操作できるか、認知負荷が高い箇所はないかなど、実際の振る舞いからインターフェースの課題を抽出する
  • アクセシビリティテスト:デバイス環境や身体的状況に関わらず、誰もが情報を正しく受け取り、操作を完結できる品質(コントラスト比や操作性)に達しているかを確認
  • ゴール達成度の検証:プロダクトが「ユーザーの抱える課題」を本当に解決できているか、当初定義したペルソナの「ゴール」を最短で達成できる設計になっているかを検証
  • テストや検証で改善が必要な部分の改善

Color

コントラスト比

視覚的なアクセシビリティを向上させるため、テキストと背景のコントラスト比は一定の基準を満たす必要がある。 WCAG(Web Content Accessibility Guidelines)はコントラスト比を以下の基準で定めている。 コントラスト比の計算はAdobe Color CCや、figmaのプラグインである「Contrast Grid」を利用すると簡単にできる。

AA(最低限の推奨基準)

・通常のテキスト 4.5:1以上
・大きいテキスト(18pt以上または、14ptの太字) 3:1以上
・UIコンポーネント(ボタン、リンクなど) 3:1以上
*基本的に現在のデバイスやWeb標準(96dpi)では、1pt=1.33pxと換算する。

AAA(より高いアクセシビリティを求める推奨基準)

・通常のテキスト 7:1 以上
・大きいテキスト(18pt以上または、14ptの太字) 4.5:1 以上
・UIコンポーネント(ボタン、リンクなど) 特別な要件はないが、7:1以上を推奨するケースもある。

Typography

フォントサイズ

  • 見出しなどのインパクトが必要な要素:48~64px
  • 本文は16~24px。基本的に長文は16pxの方が読みやすいし、画面幅も取りすぎないから良い。長文で文字がデカいと、一画面あたりの情報量が減るからユーザービリティが落ちる。
  • 最小のフォントサイズは12pxとする。それ以上小さいとほぼ読めないので使用しない。12pxも画面の制約上やむを得ない場合の使用にとどめ、基本的には最小は14pxとする。
  • 欧文は和文より小さいので、同じ役割のテキストでは、基本的に欧文は和文より大きくする。フォントによって大きさが異なるので、具体的な数値の指定はなく、フォントに合わせて指定する。
  • 基本的に4pxまたは8px単位の大きさで指定する。
  • 同じ役割のものは同じ大きさに。(例:各セクションの見出しとなるh2なら32pxとか)
  • ユーザーによっては、ユーザーエージェントにより、文字サイズを拡大・縮小して使う場合もあるため、特定の文字サイズに依存したデザインにしてはいけない(文字サイズを変更したらデザインが崩れるものはダメってこと)。これに関連して、文字画像は基本ロゴ以外では用いない。

両端揃えを使わない

両端揃えを使うと、不自然な空白が生まれてしまい、単語の区切りが認識しづらくなることで、可読性が低下する。 また、画面幅に応じて、単語のスペースが変わるため、レスポンシブデザインとの相性も悪い。 加えて、低視力・読字障がい(ディスクレシア)の人にとって、単語の間隔が不均一だと読みにくいこともあり、WCAG(Web Content Accessibility Guideliness)でも両端揃えは非推奨となっている。 以上のことから、テキストでは両端揃えを使わずに、左揃えを基本とする。

line-height(行間)

基本的には1.5以上が推奨されている。 ただし、見出しなどフォントサイズが大きいもの(目安としては40px以上)は1.3~1.5くらいの方が読みやすい。 また、ボタンなどの一行で表示されるようなものは、高さの計算や余白の計算が複雑になるので、line-heightを1にしても良い。

具体的なline-heightの値は各フォントサイズで、テキストボックスの高さが4か8の倍数になるように指定する必要がある。 また、line-heightの値は、%ではなく絶対値で指定した方が良い。 理由は、4や8の倍数にすると、グリッドシステムとの整合性が取れることに加え、他の要素との整列や余白設計がしやすくなるため。 また、line-heightの値に絶対値ではなく、%を使用すると小数点が発生し、余白計算が複雑になってしまうため。

line-heightの値の例

font-size line-height
48px 72px(150%)
40px 60px(150%)
32px 52px(162.5%)
28px 44px(157.142・・・%)
24px 40px(166.666・・・%)
20px 32px(160%)
16px 28px(175%)
14px 24px(171.428・・・%)
12px 20px(166.666・・・%)

letter-spacing(文字間)

  • 小さい文字(12〜14px):0〜0.02em
  • 本文(16〜18px):0.02〜0.05em
  • 見出し(20px以上):0.05〜0.1em
  • ボタン・ナビゲーション:0.05〜0.1em

文字間隔は上記の値が可読性とデザインのバランスが取れる。ただし、書体によって適切な文字間隔は異なるものなので、 杓子定規に上記の基準に当てはめるのではなく、書体ごとに調整すること。

また、WCAG2.1の基準では、文字間隔(letter-spacing)をフォントサイズの0.12倍(0.12em)以上にしても、レイアウトが崩れないように設計することを求めている (よく誤解があるが、これはデフォルトで文字間隔を0.12emにしろという意味ではないことに注意)。参考「達成基準 1.4.12: テキストの間隔を理解する」

paragraph spacing(段落間)

段落の間隔はフォントサイズの2倍以上が推奨されている。

Layout

  • 基本的にリキッドレイアウトを採用。画面幅に合わせて流動的に変動させる。そのため、widthの指定は基本的に固定値をとらずに、max-width:X%;とwidth:100%;のように%で指定する。
  • ブレイクポイントはスマホで768px, タブレットで992pxとする。

トランケーション(短縮)の活用

画面幅が小さくなった時、フォントサイズや要素の最大幅の調整以外に、トランケーションを使う手もある。 トランケーションとは、短縮の意味で、たとえば、カードのタイトルを「デザインシステムを作る10のメリ・・・」のように、末尾に省略記号を用いて表現したりすること。 基本的に、レスポンシブ時の対応としては、詰める(余白の縮小)→縮める(フォントサイズやアイコンサイズ、要素の最大幅の縮小)→短縮(情報の一部をカット)→折りたたむ の順番で考えると良い。

余白/角丸

余白

  • 基本8の倍数で余白を取る。8で難しい時は、4の倍数で余白を取る。
  • 一貫性:同じ要素の組み合わせには同じ余白を取る。
  • 情報構造:関連性のあるものの余白は他より小さく取る。
  • 操作性:タップ領域間は最低でも16px離すなど、使いやすさ、読みやすさを確保する。

角丸(border-radius)

  • 角が丸いと、親しみやすさや優しさ、モダンな印象を与える
  • 基本的には4の倍数で指定し、同じ要素には同じ値を。
  • 要素の外側と内側の両方に角丸がある場合は、内側の角丸は外側より小さくすると自然な印象になる。

Button

  • ターゲットエリア(操作を受け付ける有効範囲全体)は44px×44px以上とする。
  • タップエリア(視覚的に描画されている部分)に関しては、各ガイドラインで明確な基準は示されていないが、操作性の観点から、基本的には28px×28px以上あるのが望ましい。
  • ボタンが並ぶ場合、タップエリア間は最低16px以上離す。これは特にタブレット・スマホで誤操作を避けるために重要。

ボタンの文言

ボタンの文言は、曖昧で誤解を招くようなものではなく、簡潔かつ論理的なものにする。 悪い例だと、カートに移動するボタンの文言が「購入する」「注文する」などになっているパターンなど。 こうゆう場合は、ボタンの文言も「カートに移動する」、次のページで「注文を確定する」といった文言にする。

文字数の制約がなければ、ボタンの文言は基本的に名詞ではなく動詞で表現する。例:「注文」ではなく「注文する」など。 これは、押した後に何が起こるかをユーザーが瞬時に理解しやすくするという目的がある。 また、ボタンの文言が名詞だと、今の状態を表しているのか、次の動作を意味しているのかわかりづらい(フリップフロップ問題)

「戻る」、「キャンセル」などの否定的なアクションのボタンの文言に関しては、HIGでは「キャンセル」という文言で統一するように提唱されている。

ステートの作成

ボタンを作ったら、必ずhover時、押下時のデザインも作成する。inputやtextareaの場合はfocus時のデザインも作成する。仕様によっては、無効状態(disable)のデザインも作る。 ボタンのデザインは、デフォルトの階調の中から明度・彩度を調整したものを使うことが多い。 一般的なのは、hover時はデフォルトより少し暗く、押下時はさらに暗く、フォーカス時は色をそのままで境界線を入れるデザイン。

ステートのデザイン例

ボタンのサイズに関して

ボタンサイズは「高さは固定」「横幅は内容に応じて可変」を基本とする。 横幅はラベルの長さに対して一定の左右余白を与えることで自然に伸縮させ、最低限の最小幅だけを定めておけば、多言語対応や文言変更があってもレイアウトが破綻しない。 通常のアプリUIではこの可変式を標準とする。

一部の例外として、モーダル内で複数ボタンの視覚的な並びを揃えたい場合や、LPのCTAなど見せ方を重視した局面に限り、幅を固定または揃える運用を許容する。 あくまでも例外的な扱いであり、プロダクト全体のUIでは可変式の方が再利用性・保守性ともに優れている。

高さはSmall / Medium / Large のように数種類に統一して定義し、32px・40px・48pxといった一般的なレンジを採用する。 高さはラインハイトではなく“コンポーネントの物理的な高さ”として固定することで、各サイズの一貫性が保てる。

フォントサイズは、ボタンの高さと視認性のバランスで決める。Medium(40px)では14px〜16pxが標準的で、Smallでは12px〜14px、Largeでは16px前後が適切となる。 フォントサイズに合わせて上下余白を都度調整するのではなく、あくまで固定された高さの中で自然に中央に揃うように行間(line-height)を調整し、上下余白は結果として導かれる形にすると整合性が保たれる。

最終的には、「高さは固定」「横幅は可変」「例外時のみ幅固定を許容」という3点を一貫して運用することで、視認性・操作性・再利用性が安定し、デザインシステムとしても破綻しない仕様になる。

ボタンのスタイルに関して

  • プライマリーボタン:塗りを目立つ色(プライマリーカラー)、テキストを白塗り。*下記例を参考に
  • セカンダリーボタン:白塗りつぶしで、アウトラインとテキストをプライマリーカラーに
  • ターシャリーボタン:塗りもアウトラインもない、テキストボタン(テキストのカラーはプライマリーまたはテキストカラー)に
  • 破壊的なアクションボタン:後戻りできない削除の操作などでは、赤系統の目立つ色を用いる。並列する他のアクションボタンとの役割を考え、赤塗りつぶしにするか、アウトラインとテキストだけ赤かを選択する。

セカンダリーボタンもプラリマリーボタンと別の色で塗りつぶしにする事例もあるが、基本的に、塗りつぶしは目立つボタンになるので、 セカンダリーボタンも塗りつぶしにしてしまうと、ユーザーが重要度を誤認したり、迷う恐れがあるので、基本はセカンダリーはアウトライン型にする。

ボタンの使い分けに関して

  • 基本的に一つのグループ内にプライマリーボタンは一つまで。セカンダリー、ターシャリーは複数あっても良い
  • プライマリーボタンは、ユーザーが最も選択する可能性の高いアクションに対して適用
  • セカンダリーボタンは中程度の選択肢で、ユーザーの主なタスクを妨げない重要なアクションに用いる
  • ターシャリーボタンはセカンダリーボタンより低い可能性の選択肢、または補足的なアクションに用いる

並列するボタンの配置に関して

ダイアログ内にアクションボタンを 3 つ以上配置することは、HIG・Material Design いずれのガイドラインでも推奨されていない。 アクションボタンの数は 2つまでに絞るのが基本である。配置は横並びを標準とし、縦配置はレイアウト上の制約などでスペースが確保できない場合に限られる。

横に並べる際は、左右の役割が明確に分かれる。
右側:主要アクション(primary action)、ユーザーが最も選択する可能性が高い行動を置く。例:OK / Save / Continue などの肯定的・前向きな操作。
左側:重要度の低いアクション・否定的アクション(secondary)、Cancel / Back など、操作を中断したり戻ったりする行動を配置する。この左右の視覚的序列により、ユーザーはどちらが“進むための操作”なのかを瞬時に判断できる。

縦並びでは、上下の序列がそのまま優先順位になる。 上:主要アクション、 下:副次的・否定的アクション 横配置と同様に、より選択してほしい行動を知覚的な終端(この場合は上)に置くことで、行動の優先度を明確に示すことができる。

詳細に関しては下記記事にまとめている。配置・スタイル・文言から考えるダイアログのボタン設計

ボタンの配置例

hover時のアニメーション

プライマリーボタンをセカンダリーボタンの色に反転させるのはやめた方が良い。 プライマリー、セカンダリーは重要度を決める役割なのだから、ホバー時に反転させるのは適切なアニメーションではない。 基本的には、box-shadowをつけるか、色の濃さを一段階あげたものを使うなどが良い。

ボタンの例

Icon

ボタン内にアイコンを使う場合

ボタン内にアイコンを使う時、左から右に書く言語の場合は、アイコンはラベルの右側に配置する。

意味が直感的に伝わるか

見ただけでなんの機能か伝わることが最優先。 抽象的すぎるアイコンを使わない。意味が伝わらないアイコンは、テキストラベルを付与して使用する。

一貫したスタイルを保つ

太さ、角の丸み、線の長さを統一する。バラバラだとUI全体がチグハグに見える。 また、Iconセットは一種類に統一する(例:Lucide、Material Icons、Heroiconsなど)。

タップ領域

ボタンと同様に44px*44px以上を推奨基準とし、アイコン間を16px以上離す。

意味の重複・混乱を避ける

「同じアイコンなのに違う意味で使ってる」とか、「似た機能に違うアイコン」があると混乱のもととなる。 例えば、同じ「+」アイコンが「新規作成」と「追加」両方の意味で使われているのはNG。 意味に対してアイコンは1対1対応に近づける。

アニメーション・フィードバック

状態変化を動きで補足するのもUXとして効果的。 例えば、「いいね」ボタン → ハートがバウンドするなど、「保存済み」アイコンがトグルで変化するなど。

UI Component

ドロップダウンメニュー

ドロップダウンメニューは、ボタンやラベルをクリック(またはホバー)した際に複数の選択肢が縦方向に展開されるUIパターン。 ナビゲーション項目の切り替えや操作メニューの表示など、主にユーザー操作や画面遷移を誘導する目的で使われる。 HTMLやCSS、JavaScriptを組み合わせたカスタム実装が一般的で、見た目や動作を自由にデザインできる反面、アクセシビリティ対応には配慮が必要。 フォーム送信は通常できないが、JSやバックエンド処理で可能となる。実務では、デザインの観点から、セレクトボックスをドロップダウンメニューに置き換えるケースも多い。

*セレクトボックスと見た目や動きが似ているので混同しないように注意。

セレクトボックス

セレクトボックスは、フォーム内であらかじめ用意された複数の選択肢の中から、ユーザーが1つを選択できるUIコンポーネント。 HTMLのselect要素で実装されることが多く、フォームの送信時に選択された値がサーバーに送られることを目的としている。 ブラウザ標準のスタイルが適用され、アクセシビリティや操作性は高い一方で、カスタマイズ性は低い。

デートピッカー

デートピッカーは、日付(場合によっては時刻)を入力・選択させるためのUIコンポーネント。 ユーザーが日付をミスなく簡単に選べるように設計されており、フォームや予約、スケジュール管理など幅広い場面で使われる。 デートピッカーには、カレンダー式とドラムロール式がある。 1ヶ月前後の近い日付の選択やPCブラウザ中心のシステムであればカレンダー式、 生年月日など遠い過去の記録や遠い日付の選択にはドラムロール式が向いている。

例:カレンダー式

カウンター

「カウンター(Counter)」とは、ユーザーが数値を増減させるためのインタラクティブなUI要素のことを指す。 典型的には「+(プラス)」と「−(マイナス)」のボタンで構成され、数値の入力欄や表示とセットで使われる。 キーボードを使わずに直感的に操作でき、入力ミスが少ないため、商品の購入個数や人数など、正確な値指定が求められ、小さい範囲での値の調整に用いるのが有効。

スライダー

スライダーは、ユーザーが連続的または範囲的な値を視覚的に調整できるUIコンポーネント。 バーを左右にドラッグすることで、値を調整することができる。 細かい値が調整しづらい反面、直感的で、認知負荷が少なく、価格帯や音量といった範囲指定に向いている。

トグルボタン

複数の状態を切り替えるボタン形式のUI。 一般的には「押すたびに状態が切り替わるボタン」で、状態に応じて見た目が変わる(色・文言・アイコンなど)。 トグルボタン使用時は、状態が明確にわかるようなラベルの文言や配色を心がける。

似たようなUIコンポーネントにスイッチ(トグルスイッチ)があるが、 基本的には、単純な機能のON/OFFにはスイッチ(トグルスイッチ)を用い、 フィルター(降順or昇順など)や表示切り替え(リストorカードなど)といった、複数の状態の切り替えにはトグルボタンを用いる。 なお、下記の例のような、表示切り替えはセグメントコントロールと言うこともある。

スイッチ(トグルスイッチ)

スイッチ(Switch)は、ある機能の有効・無効(ON/OFF)を切り替えるためのUIコンポーネント。 一般に、横にスライドするような外観(iOSやAndroidの設定画面に見られる)が特徴。 状態変更は即時で、リアルタイムに反映されることが望ましい。 また、スイッチが単体でオンなのかオフなのかわかりやすいように、ラベルの文言やスイッチのUIを工夫すること。

通知を受け取る

ページャー

ページャー(Pagenation)とは、大量のデータをページ単位で分割し、ユーザーにその一部を段階的に表示させるUIコンポーネントです。 例:« 1 2 3 4 5 » のようなナビゲーション。 主な用途としては、検索結果や、管理画面の一覧ページ、掲示板、レビュー表示など。

ページャーのメリット

・必要な分だけ表示/取得するため、表示速度が安定
・何ページ中の何ページ目といった明確な位置把握が可能
・URL共有しやすい

ページャー使用上の注意

・現在位置が視覚的に明確となるように、現在ページにアクティブな強調を入れる
・ページ数が多すぎる時は省略表示が必要。(例:1 2 3 ... 45 46 47)
・前後ボタン(« / »)の活性・非活性を制御
・モバイルでは全ページ数表示を避けて ◀ 3 / 10 ▶ のような簡略表示に

無限スクロールとの使い分け

ページャーでは、ユーザーは特定のページに直接移動できるため、情報の位置が把握しやすく、再訪性にも優れている。 一方、無限スクロールは、SNSやニュースフィードのように流し見するコンテンツに適しており、スクロールするだけで次々とデータを読み込むため、没入感が高く直感的。 ただし、無限スクロールはページの途中から再開しづらく、フッターにたどりにくい、パフォーマンスやSEO面での課題もあるため、使用場面を選ぶ必要がある。 目的が「探す・管理する」ならページャー、「読み流す・消費する」なら無限スクロールが適している。

ステータスラベル

ステータスラベルは、オブジェクトや項目の「現在の状態」や「処理状況」を短い文字列で視覚的に表現するラベル。 主な用途としては、注文状況の表示(配送中、完了、キャンセル)など。

ステータスラベルのメリット

  • 状態が一目でわかり、視認性が高い
  • 配色やアイコンによって、状態を直感的に伝えられる
  • 情報整理の助けになり、一覧表示で特に有効

ステータスラベルの注意点

  • 状態の意味がユーザーにわかりやすい文言や色設計でないと誤解を招く
  • 多用すると逆に視覚ノイズになる
  • 状態が変化するものであれば、リアルタイム更新や明示的な変更反映も考慮する

完了 未対応 キャンセル 一時停止

チップ

チップは、タグ・属性・選択済みの要素などをコンパクトに表現するUIパーツで、しばしば削除や選択解除などの操作も含む。 主な用途としては、フィルターや検索条件の表示、選択した項目の一覧表示、ラベル/分類タグ。

チップのメリット

  • タグや選択情報を視覚的に整理できる
  • 削除や切り替えなどの操作と一体化しやすい
  • アイコン、アバター、削除ボタンなど表現の幅が広い

チップの注意点

  • 操作できるか否か(削除可・選択可など)を明確に伝える必要がある
  • チップが多くなると横幅を圧迫しやすく、レスポンシブ対応が必要
  • 小さすぎるとタップしにくいUIになる(モバイルでは注意)

#React ×
#UX設計 ×
#Figma ×

ツールチップ

ツールチップ(Tooltip)とは、ユーザーが要素にカーソルを合わせたときに表示される、補足的な情報を示す小さなポップアップUI。 主にボタンやアイコン、略語などの意味や用途を一時的に説明するために使われる。

ツールチップの利点

  • 情報の補足:UIをシンプルに保ちながら、詳細情報やアイコンの意味などを説明しユーザーの理解を助ける
  • UIの省スペース化:常時説明を表示せず、必要な時だけ表示する

ツールチップ使用時の注意点

  • 重要情報はいれない:必須情報や操作説明を依存させるとUXを損なうので、補足や詳細情報にのみ用いる
  • 簡潔な内容にする:補足説明が長文になるのはホバー時に表示するツールチップ向きではない。長文で説明する必要がある場合は、ポップオーバーやモーダルを使用する。
  • スマホやタブレットでは使えない:基本的にはPC中心のUIで用いる。スマホ・タブレットで使用するなら、クリック、タップで表示ができるポップオーバーやモーダルを使用する。

投稿の編集

モーダルダイアログ

モーダルダイアログ(Modal Dialogue)とは、ユーザーの画面上に最前面で表示され、背景の操作を一時的にブロックするダイアログウィンドウのこと。 主に「確認」「警告」「入力」など、ユーザーの注意を引き、即時の対応を求める用途で使われる。

モーダルの利点

  • ユーザーの注意を集中できる:他の要素を操作できないため、重要な意思決定や確認に向いている
  • 入力や確認を一時的に行える:削除確認・フォーム・設定などを画面遷移せずに行える

モーダル使用時の注意点

  • 多用するとUXを損なう:頻繁な表示や重ね表示はユーザーの集中を妨げる
  • 背景ブロックを忘れずに行う:背景の操作ができてしまうと、モーダルの意味がなくなる
  • ボタンの文言は明確で具体的に:「はい」「いいえ」「OK」「キャンセル」などは何に対しての同意・中止か不明確。「削除する」「保存しない」「編集を破棄」など動作が明確に伝わる文言にする。

バッジ

バッジ(Bedge)は、主に小さな円や角丸長方形の中に数字や短いテキストを表示して、 「その要素に関連する情報がある」ことを強調するために使われる。 代表的な用途としては、通知件数や、カート中の商品数、ユーザーのオンライン状態、新着情報など。

バッジのメリット

  • 一目で情報量が把握できる
  • アイコンだけではわからない数的な意味・存在を補完
  • ユーザーへの注意喚起・アクション誘導に繋がる

バッジの注意点

  • 数字の意味が直感的に伝わるか:例)バッジに「5」と表示されたとき、それが「通知数」か「未読数」か曖昧だと混乱する
  • 常に表示すると視覚的ノイズになるため、本当に重要な情報にのみ使用すべき
  • 色の意味と一貫性を持たせる:赤=未読/エラー、緑=完了など、他UIと整合性が取れているか確認

カートに進む 3
NEW

メッセージアラート

メッセージアラートは、画面上に固定表示される通知UIで、ユーザーにエラー・警告・成功など重要度の高い情報を明示的に伝えるための視認性の高い帯状の要素。 主に画面上部やフォーム直下のコンテンツ内に表示され、ユーザーが閉じない限り残り続ける。

メッセージアラートの利点

  • 目立つ位置で確実に伝えられる
  • 内容が残り続けるため、ユーザーが読み返せる
  • 成功・警告・エラーの色分けがしやすい

メッセージアラートの注意点

  • 成功通知には少し強すぎる印象になることがある(過剰に見える)
  • 通知の重要が低いのに、目立ちすぎると逆効果になる

保存が完了しました。
一部の入力項目が未記入です。
保存に失敗しました。もう一度お試しください。

トースト

トーストは、画面の端(多くは右上または下)に一時的に表示される(数秒で消える)軽量な通知UIで、 保存や送信の完了など、重要度の低い操作のフィードバックを邪魔せず伝える目的で使われる。基本的に、レイアウトには属さず、オーバーレイで表示される。

トーストの利点

  • 即時で軽快なフィードバックが可能(保存完了など)
  • ユーザーの操作を妨げずに通知できる
  • 数秒で自動的に消える為操作が不要

トーストの注意点

  • ユーザーが見逃すリスクがある
  • 情報が残らない為、記録性が低い
  • 複数同時に表示されるとUXが混乱しやすい
  • UIに重ねて表示されるため、視覚的ノイズや誤タップの原因になることがある

トーストとメッセージアラートの使い分け

  • トースト:保存成功、送信完了などの軽微な成功通知/軽微かつ操作の流れを邪魔したくない時
  • メッセージアラート:入力ミス、エラー、必須フィードバックや成功通知だが文脈に強く結び付けたい時

プログレスステッパー

複数の工程(ステップ)を視覚的に並べて、現在どのステップにいるかを線や番号・アイコンで示すUIコンポーネント。 ステップインジケーターやマルチステップUIとも呼ばれる。 主な用途は、会員登録や購入フロー、アンケートなどのマルチステップフォーム。

*カウンターの「+」「−」ボタンのことをステッパー(数値ステッパーまたは、カウンター型ステッパー)と呼ぶことがあるので混同しないように注意。

プログレスステッパーの利点

  • 現在位置・全体の進捗が一目でわかり、安心感や予測性を与える:離脱率の低下、心理的な不安の軽減
  • 複雑な情報を段階的に整理できる

プログレスステッパーの注意点

  • ステップ数は明確で適切に:ステップが多すぎると逆にストレスになる。通常は3~5ステップ程度が適切
  • ステップ名は簡潔に意味のわかるもの:Step1,Step2などはNG。「基本情報」「配送先」など具体的に示す
  • 戻る、進むの操作を一貫性のある設計に:ステップを飛ばしたり、自由に戻れるかどうかの挙動を明示。戻ったときにデータが消えるとユーザーが混乱・苛立つ原因になる
  • モバイル対応への配慮:横幅が限られるため、縦並びや進捗バー型への切り替えを検討する。モバイルではステップが折りたたまれているか、プログレスバーだけになることもある

1
基本情報
2
配送先
3
確認・完了

カルーセル

カルーセル(carousel)とは、WebやアプリのUIにおいて、複数のコンテンツ(画像・カード・バナーなど)を横にスライドして切り替えられるUIコンポーネントのこと。 スライダーとも呼ばれる。 主な用途としては、トップページのバナー表示や、商品ギャラリー、カードリストなど、情報をコンパクトに見せる手段として使われる。 しかし、下記で詳細を述べるが、カルーセルは意外と使い勝手が悪いため使用例はかなり限定される。カルーセルの採用には慎重に。

カルーセルを使っても良い場面

  • スマホで限られたスペースに複数のコンテンツ並べたい時
  • 重要度の均等な情報を複数載せたい時:レビュー一覧や投稿ギャラリーのようなどれが見られても構わないもの
  • 全部を見てもらう前提ではないとき:Netflixのように「パーソナライズされた大量のおすすめ」を提供するケース
  • サブコンテンツとしての補助表示:メイン情報の妨げにならず、「あると嬉しい」情報のまとめ(例:関連商品など)

カルーセルを使わない方が良い場面

  • 全ての内容を確実に見てほしいとき:見られるのは最初の1〜2枚程度。重要情報の伝達に不向き
  • PCのヒーローヘッダーとしての利用(特に自動再生):ユーザーは読み飛ばしがち/動きに気づかないことが多い/読んでる最中に流れる
  • 異なる内容のキャンペーンを詰め込むとき:情報過多・切り替えの負担が大きくなる(「結局何が言いたいの?」になる)
  • 代替手段があるのに、なんとなく採用しているとき:カードグリッド・セクションごとの縦配置などの方が、情報に優先度をつけやすいケースもある

アコーディオン

開閉の気づきと分かりやすさ

ユーザーが「ここ、開ける場所なんだ」とすぐに分かるデザインになっているか? トリガー部分に アイコン(▶ / ▼)や「もっと見る」などのテキストを明示。 開閉でアイコンが回転するなど、視覚的なフィードバックがあるとベター。 ヘッダー自体を押せるようにするとUX向上(テキストだけがトリガーだと狭い)。

適度なアニメーションを入れる

アニメーションがないと、開いたのかどうか分かりにくい&チープに見える。 開閉に0.2〜0.3秒程度のトランジションをつけると、自然で心地よい体験に。 一瞬で切り替わると、ユーザーが何が起きたか理解しづらい。

中身の内容量と妥当性のバランス

そもそも「アコーディオンにするべき情報か?」は慎重に判断。 開いた中に1文だけしかない → アコーディオンにする意味ない。 頻繁にアクセスされる情報は最初から展開しておく方が良い場合もある。 また、デスクトップでは、画面幅の制約がスマホより少ないので、初めから展開しておくほうが良い。
やりがち:FAQ全部閉じてる → 検索性が悪くなって UXダウン
良い例:「よくある質問」の中でも一番問い合わせが多い内容は最初から開いておく

アコーディオンを使いすぎない

情報を詰め込みすぎると、クリック地獄になる危険性も。 特にスマホでは、開いて閉じてまた開いて…を繰り返すとユーザー疲れする。 「そもそも全部リスト形式で出す方が早い」ってケースもある。

インプット

入力フォームの長さ

インプットの入力フォームは、入力すべき言葉の長さに合わせたものにする。 その方が、入力すべきものをより直感的にわかりやすくできる。 ただし、入力フォームの長さがバラバラだと、見た目のバランスが崩れるため、 見た目の統一感と入力量の期待値はバランスの取れた折衷案を採用する。 例えば、inputエリアのサイズはsm, md, lgの3パターンだけ用意し、入力量の期待値はプレイスホルダーで伝えるなど。

*textareaもinputと同様に、入力すべき内容の長さに合わせた大きさにする。

悪い例

良い例

プレースホルダー使用の注意点

プレースホルダーには、入力例を入れ、フォントカラーは入力済みと十分に区別できる色を使用する。以下、プレースホルダー使用の注意点をまとめる。

プレースホルダーをラベルの代替にしない。
「名前」「メールアドレス」などの入力欄で、ラベルを置かずにプレースホルダーだけに頼る設計はNG。 入力中に消えてしまうため、「何を入力すべきか」忘れやすい。 また、スクリーンリーダーが読み上げにくくなるなど、アクセシビリティも大幅に低下する。

入力ルール、エラーガイドはプレースホルダーに入れない。
「8文字以上の英数字、大文字を含む」など、詳細なルールはプレースホルダーに書いても、入力中に消えるので、入力後にチェックできなくなってしまう。 したがって、入力ルールやエラーガイドはinputの外に記載する。 同様の理由で、「必須」「任意」をプレースホルダーで伝えるのもNG

重大な警告

重要な内容の削除などの確認モーダルなどは、セマンティックのエラーを使う。意図せずに注視するような、サイトのカラーとは少し異なる違和感を感じるくらいの色にした方が良い。

Accessibility

アクセシビリティとは、視覚・聴覚・身体的な障害を持つ人を含めた、すべてのユーザーが公平にアクセスし、利用できるようにするための設計上の配慮を指す。 音声読み上げへの対応や、キーボードのみでの操作、色覚に配慮した配色設計などがその代表例。 アクセシビリティは、特定のユーザー層のための配慮ではなく、「誰一人取り残さない」設計思想として、すべての人にとっての使いやすさを保証するものでもある。

*ユーザビリティとの混同に注意

Focusについて

WCAGのガイドラインでは、Focusについて、次のような基準を設けている。 第1に、Tabキーで全てのインタラクティブ要素にフォーカス可能にする。 第2に、Tabでの移動順序は論理的であること。 第3に、Tabで移動した時に、フォーカスが視認できる(視認性の高いデザインに)こと。

また、マウスクリックで不要なフォーカスが出ないように、:focusではなく、:focus-visibleを用いた方が良い。 加えて、focusのデザインは視認性が高くなるよう、サイトのテーマカラーに違和感のない目立つ色(青系を使うことが多い)を使用し、outlineを用いると良い。

Usability

Usability(ユーザビリティ)とは、誰もが直感的に操作でき、効率よく目的を達成できるように設計された「使いやすさ」のことを指す。 ユーザーがシステムやサービスを使う際に迷わず操作できるか、余計なストレスを感じずに目的に到達できるかどうかが重要な基準となる。 ラベルやナビゲーションの分かりやすさ、ボタンの配置、エラー表示の明確さなどは、すべてユーザビリティに関わる要素。

*アクセシビリティとの混同に注意

親指ゾーンを考慮したUI設計

親指ゾーン(Thumb Zone)とは、スマホを片手で持った時に親指が届きやすい範囲のこと。 近年、スマホは大きくなってきており、大きくなるにつれて、画面上部に親指が届かないケースが増えている。 こうした背景から、親指ゾーンを考慮した、片手操作のしやすいUI設計が重要となっている。

親指ゾーンを意識したUI設計の例

  • ナビゲーションバーは画面上部ではなく、画面下に配置。
  • 主要なボタン(CTAボタンなど)は画面右下に配置。

十分なタップエリアの確保

ボタンやテキストリンク、アイコンなど、UI要素の種類に関係なく、タップエリアは44px×44px以上の確保を目安とする。 これは、誤タップを防ぎ、押しやすさを保つための最低基準であり、スマートフォンのような小さな画面でも快適な操作性を実現する重要な配慮。 特に、テキストリンクはタップエリアが小さくなりがちなので注意。 タップエリアを確保するためには、line-height や padding を使って見た目を崩さずタップ領域を広げるとよい。 ただし、これはあくまでも目安なので、UI審美性の観点から、32px×32px程度のタップエリアにする場合もある。

押下時のデザインについて

box-shadowtransform: translateY(Xpx);をhover時より小さくして、沈み込むようなデザインにするのが一般的。

エンプティステート

エンプティステートとは、アプリケーションやWebサービスにおいて、まだ表示するデータが存在しない状態を指す。 たとえば、「お気に入りが登録されていない」「検索結果が0件」「投稿がまだない」など、コンテンツが空のタイミングに表示されるUIのこと。 単に「空であること」を伝えるだけでなく、ユーザーに次の行動を促したり、安心感を与えたりする重要な役割を担う。 基本的に、エンプティステートは必ず用意するように。

エンプティステートの失敗例

エンプティステートでありがちな失敗は、ただ「データがありません」とだけ表示してしまうケース。 それではユーザーは次に何をすればよいのか分からず、離脱につながる可能性がある。 また、文字だけで淡白に伝えてしまうと、空白感が強調されてしまい、体験として寂しい印象を与えてしまう。

効果的なエンプティステート

エンプティステートを効果的に設計するためには、いくつかの工夫が必要。 まずは、状態の理由を分かりやすく説明すること。 次に、ユーザーに次の行動を提案すること(例:「+ボタンで新規作成しましょう」「検索条件を変更して再検索してください」など)。 また、視覚的な要素(イラストやアイコン)を添えることで、空白の印象を和らげ、ブランドのトーンも演出できる。

まだお気に入りがありません
気になるアイテムを「♡」アイコンからお気に入りに追加できます。 あとでまとめて見返すことができますよ。

外部リンク表示のルール

Webサイト内で、外部のWebサイトやサービスへ遷移するリンクには、利用者が「これは外部サイトに移動する」ことを事前に認識できるよう、 リンクテキスト内に外部リンクであることを示すアイコンを表示する。

テキストリンクのタップエリアについて

テキストリンクは、paddingの調整をしないとタップエリアが狭く押しづらいので、paddingを入れて、クリック(orタップ)可能なエリアを広げる。 目安としては高さ40px以上なので、フォントサイズにもよるが、12pxくらいの余白を入れると良い。 ただし、本文中の中に含まれるテキストリンクに余白を入れると、デザインが乱れるので、下線や色をリンクであることを明示できるようにするのに止める。

Animation

アニメーションは、「サイトの華やかさ」ではなく、「使いやすさを高めるため」に設計することが重要。

良いアニメーションの使い方

  1. 重要な要素への視線誘導(動くものに注意が向く習性の利用):訴求したいポイントや情報などに視線を誘導するためにアニメーション。ただし、動いだり点滅する要素は、ユーザーの注意を引くが、同時に、ユーザーの気を散らす原因にもなるため、視線誘導の手段としてアニメーションを使用するのは慎重にする必要がある。
  2. ユーザーに対するフィードバックを与える: ボタンのクリック時に軽微な動きを加えることで、操作が成功したことを視覚的に伝える。 ハンバーガーメニューを押すとバツに変わるとか、アコーディオンのアローボタンの変形とか。
  3. スムーズなトランジション:ページやセクション間の移動を自然に見せ、体験を一貫させる。

悪いアニメーションの使い方

  1. 目的や意味のないアニメーション:目的がなく、ただサイトを賑やかな感じや華やかな感じににしたいだけのアニメーションは、ユーザーの目が疲れるし、集中力を損い、離脱率の増加を招く。
  2. 情報の遅延:アニメーションで情報が表示されるまでの時間が遅れると、ユーザーの苛立ちを誘発する場合がある。これもユーザービリティを損ない、離脱率の増加につながる。
  3. 混乱のリスク:動きが多いことで、どこに注目すべきかが分かりにくくなり、情報伝達が妨げられる可能性がある。

transition-timing-function

イージング 特徴 主な用途
ease 最初と最後が緩やかで自然な動き(デフォルト) ボタンホバー、フェードインアウト、基本UI
linear 一定速度で動く機械的な動き ローディングバー、スライダーなどの時間を正確に見せるアニメーション向き
ease-in ゆっくり開始し、最後は速くなる勢いのある動き モーダルウィンドウ、スライドイン、カードやリストの出現
ease-out 最初は速く、最後はゆっくり 要素のフェードアウト、ナビゲーションメニューのアニメーション、クリックした時のフィードバック
ease-in-out 最初と最後がゆっくり、中間は速い。easeと似てるが、easeより滑らかでリッチな印象 モーダルの開閉、スクロールエフェクト、UIアニメーション全般

アニメーションの時間

1. 一般的なhoverエフェクト

アニメーション対象 推奨時間 理由
ボタン・リンク 0.2~0.3s クリックのレスポンスを阻害させず、自然な動きだから。
テキストの色変化 0.2s ほぼ即時の変化が望ましい
背景色の変更 0.3~0.4s 早すぎるとチカチカし、遅すぎると不自然
アイコンの回転・ズーム 0.3~0.4s スムーズな動きが求められる
シャドウ・ボーダー 0.3~0.5s 自然な変化を演出
画像のフェード 0.4~0.6s 視認性を保ちつつ、心地よいエフェクト

2. 大きな動き(スライドなど)

アニメーション対象 推奨時間 理由
メニューのスライド 0.3~0.5s 早すぎると急に現れる印象を与え、遅すぎると操作性が低下するため。
カードのフリップ 0.4~0.6s 滑らかさを保ちつつ、ストレスなく見ることができる。
モーダルなどのフェードイン 0.3~0.5s すぐに表示されるべきだが、若干の遅れがあると自然だから。

テキストHover時のアニメーションについて

hover時に文字を太くするアニメーションはNG。 理由は、太くすることで要素のサイズが変わり、他の要素や背景との位置関係がズレることで、ガタつきが生じ、視覚的なノイズとなるから。 基本的にテキストのホバー時のアニメーションでは背景色やフォントのカラーを変化させる等で対応する。

心理学とデザイン

ヒックの法則

選択肢が増えるほど、人は意思決定に時間がかかる。

デザインへの応用

  • メニューの選択を減らすこと。
  • 重要な情報を優先的に表示するなど。

ミラーの法則

人間の短期記憶の容量は「7(±2)」個の情報までしか保持できない。

デザインへの応用

  • 情報を7個以下のグループに分ける。
  • 長いフォームはステップごとに分ける。
  • アイコンやメニューは適切な数に抑える。

ヤコブの法則

ユーザーは他のサイトと同じような動作を期待する

デザインへの応用

  • UIの標準ルールに従う(例:ハンバーガーメニュ、検索バーなど)
  • 不要な独自デザインを避ける
  • アイコンを他の一般的なサイトと別の意味で用いない(地球マークを地図にしたり、歯車を編集ボタンにしたりしないなど)
  • リデザインを行う場合は、移行期間を設けたり、気に入らなければ前のバージョンに戻せるなどの用意が必要。リデザインで大きく顧客を失う事例もある(スナップチャットとか)。

シリアルポジション効果

人は最初と最後の情報を覚えやすい

デザインへの応用

  • 重要なコンテンツをページの冒頭と末尾に配置
  • ナビゲーションメニューでは最も重要な項目を最初と最後に置く

プロスペクト理論

人は利益を得る喜びより、損失を避ける心理の方がはるかに強い

デザインへの応用

  • 割引や期間限定キャンペーンを提示
  • 「今買わないと損!」と感じさせるUI
  • 返品保証やリスク軽減策を強調

ドハティ闘値

0.4秒以内にフィードバックを返すと、ユーザーの操作がスムーズに感じる

デザインへの応用

  • ローディンアニメーションを短くする
  • 時間のかかる処理を行う場合は、プログレスバーなどで処理が進んでいることを伝えると、体感の待ち時間を減らせる。
  • *なお、ユーザーの注意をタスクに引きつけることができるのは10秒が限界とされており、それを超える場合は完了までの時間や進行中の表記を加えると良い。

フォールス・コンセンサス効果

デザイナーや開発者は「自分の考えが一般ユーザーにも通じる」と思いがち

デザインへの応用

  • ユーザーテストを重視する
  • デザインをチーム内だけでなく、実際のユーザーに試してもらう
  • ユーザーペルソナを作成し、客観的に分析する

美的ユーザービリティ

見た目が美しいデザインは、使いやすいと認識されやすい

デザインへの応用

  • 美しいタイポグラフィ、適切な配色、整ったレイアウト
  • 高品質な画像や視覚効果を取り入れる
  • 余白を適切に活用し、洗練された印象を与える

バリデーション関連

ログイン画面の時のバリデーションエラーの内容

メールアドレスとパスワードでログインするタイプのログイン画面において、 メールアドレスかパスワードのいずれかを間違えてログインに失敗した場合、 エラーメッセージには、必ず「メールアドレスかパスワードのいずれかが間違っています」と、どちらが間違っているかわからないような表記にする。 「このメールアドレスは登録されていません」や「パスワードが間違っています」のような、どちらが間違っているかをわかるような表記は避ける。

理由は、ブルートフォース攻撃(総当たり攻撃)を防ぐため。 「このメールアドレスは登録されていません」とあると、攻撃者が「このメールアドレスは存在しない」と判断できる。 また、「パスワードが間違っています」とあると、「このメールアドレスは存在するけどパスワードが違う」と分かる。 以上より、不正ログイン対策のため、、エラーメッセージには、メールアドレスかパスワードどちらが間違っているのか明記しないことが重要となる。

Figma

以下、デザインの変更容易性や実装との親和性等を考慮した、Figmaの利用方法や機能について記載。

オートレイアウトの利用

基本的には、すべてのフレームでオートレイアウトを利用する。 理由は、①開発時の実装と構造を一致しやすくため、②コンポーネントの再利用性を高めるため、③レスポンシブ対応のしやすさ、 ④デザインの変更容易性の向上、⑤要素の整列、間隔の統一(手動配置だと微妙にズレや見落としが発生する)。

また、オートレイアウトを使用する際は、オートレイアウトの詳細設定から「線」を「レイアウトに含まれる」に変更すると、実装との親和性がとれる(実装でも基本box-sizing:boder-box;を使うから)。

コンテンツを内包とコンテンツに合わせて拡大の利用

SP表示のボタンや2カラムレイアウトなど、画面幅に合わせて幅を変動させたい場合は、オートレイアウトを使用し、 親要素に「コンテンツを内包」と子要素に「コンテンツに合わせて拡大」、最大幅の指定を利用する。 そうすることで、実装でmax-width:固定値; width:100%;を指定したのと同じ表現ができる。

レイヤー構造はHTMLの構造に沿って作る

figma上でのレイヤー構造は、HTMLの構造に沿って作る。 オートレイアウトを使用する場合は、HTMLのように構造化してレイヤーを作らないと、親子関係を保てなかったり、レスポンシブ対応が難しくなる。

絶対位置の利用

オートレイアウトを利用している際、オートレイアウトを無視して、コンテンツの右上にアイコンを置きたい等の場合は、「位置」の右にある(2025/03時点でのUI)「オートレイアウトを無視」と「制約」を利用するとよい。 これによって、オートレイアウトを使用しながら、position: absolute;を使用しているのと同じような表現ができる。

*制約:top, left, bottom, rightの基準点を指定するもの

コンポーネントプロパティ「テキスト」

コンポーネント内のテキストをプロパティとして管理し、インスタンスごとに簡単に変更できる機能のこと。 これを用いることで、以下の利点がある。 ①インスタンスごとのテキストの変更が容易になる。 ②レイヤーのテキストの命名が統一され、管理が容易になる。 ③フォーマット崩れ、バリアントの肥大化を避けられる。 ④開発者との連携がスムーズになる(変更可能な部分であることの理解、デザインとコードの整合性)。

コンポーネントにネストされたインスタンスを利用している場合は、コンポーネントのプロパティで「ネストされたインスタンス」を選択することで、ネストされたインスタンスのプロパティも使用可能となる。

「スタイル」ではなく「バリアブル」の利用

基本的に、色やサイズ、間隔、数値などはスタイルではなくバリアブルで管理する。 バリアブルの方が、スタイルより多くの種類を統一的に管理でき、CSS変数やデザイントークンに近い形でデザインできる。 また、バリアブルにはモードがあるため、ダークモードなどテーマの切り替えも容易である。 加えて、バリアブルはタイポグラフィーだけでなく、余白やボーダーの角丸なども変数化できるため、コンポーネントやオートレイアウトとも相性が良い。

figma上でのタイポグラフィーの管理

バリアブルとスタイルを併用していくのが現時点ではベターなのではないかと考えられる。 バリアブルでタイポグラフィーを管理すれば、デザインシステムの整理にはメリットがあるが、いくつかの問題もある。 第1に、バリアブルをスタイルに適用すると、行間(line-height)、文字間(letter-spacing)は%ではなくpxで指定されるため、汎用性が低い(フォントのサイズ毎に文字間と行間をpxで指定する必要がある)。 第2に、バリアブルでは、書体、太さ、サイズ、行間、文字間を別々で指定する必要があり、一括管理できない。一方で、スタイルでは、それらを一括管理できる。 以上のことから、現時点では、タイポグラフィーの管理には、バリアブルとスタイルを併用するのがベターだと考える。

また、line-heightはスタイルで%指定しない方が良い。%で指定すると、フォントサイズによっては高さがどうしても4や8の倍数にならず、小数点が発生するから。 したがって、バリアブル内で、各フォントサイズごとに固定値でline-heightを指定して(例:font-sizeが48pxでline-heightが72pxなど)、スタイル内でバリアブルの値を代入するのが良い。

コーディング

下線を引くアニメーションの実装の際の注意

Hover時にborder-bottomで下線を引くアニメーションをつける場合、デフォルトの状態でborder-bottom:transparent;にしないと、要素がホバー時に動いて不自然な挙動になるので注意。

表示切り替えとアニメーションについて

display: none; から display: block; への切り替えは、CSSアニメーションやトランジションの対象にならない。 display プロパティは「離散値(discrete value)」であり、値が切り替わる瞬間に要素の表示状態が一気に変化するため、中間状態を表現できないため。 そのため、要素の出現や消失にアニメーションを付けたい場合は、opacity や transform など、数値で補間可能なプロパティを利用する。 例えば以下のように、非表示時は opacity: 0; にしておき、表示時に opacity: 1; へ、トランジションさせることで、フェードイン効果を実現できる。

Tips

  • 背景色にグラデーション:背景色とか、塗りの面積が大きい要素はグラデーションを使った方が野暮ったくならない。なお、グラデーションを作る場合、色相環で隣接する色を用いると良い。
  • 実機での確認の重要性 :デザインツール上でのデザインと、実際に実機で確認するデザインには印象に差がある。 特によくあるのは、コントラストの印象と余白、文字サイズ。デザインツール上では、デカく作りがち。 基本的に、各パーツごとに、何pxだったら、どのくらいの大きさの印象なのか頭に入れておくこと。 また、スマホ版のデザインを作るときは、プロトタイプ機能で実機のスマートフォンで表示を確認しながら作ること。

Hover時アニメーションのOpacityについて

ボタンのhover時アニメーションでopacityを下げるのは少しチープに見える。 Opacity下げるアニメーションは基本ロゴが画像とかの時など、最終手段として用いる。 hover時はborderやbox-shadow、色(colorとbackground-color)の濃淡で対応するとチープに見えない。

戻るボタンは極力使わない

近年のUIトレンドとして、単純な「戻るボタン」は減っている。 代わりにバツボタンや、スワイプジェスチャー、パンくずリストやタブ、ページごとに完了や閉じるのアクションなどが使われている。 このようなトレンドの変化の背景には、シンプルでミニマルなUIが好まれ、UIノイズを減らす目的で戻るボタンを置かなくなったことや、 ジャスチャーやUXが進化し、スワイプで戻れる、バツで閉じるなど、行動が洗練されてきたことがある。

黒で#000は極力使わない

黒で#000を使うと、背景色の白やグレーとのコントラストが強すぎて、目が疲れてしまう。 また、紙面上の黒インクは完全な黒ではなく、周囲の光の反射で少しグレーに見える。一方で、デジタルデータの黒(#000)は光を完全に吸収する黒なので、不自然に映る。 したがって、黒を用いる場合は、#1c1c1cなど、少しグレーがかった黒を用いるのがいい。

#000000
#1c1c1c
#212121
  • #000000
    「デザインにおいて、色の選び方は視認性や印象に大きな影響を与えます。特に黒の使い方は重要で、純黒(#000)はコントラストが強すぎるため、長時間の閲覧では目が疲れやすくなります。そのため、多くのWebデザインでは少しグレーがかった黒(#333 や #222)が使われることが一般的です。また、ダークモードの背景としては、完全な黒ではなく、#121212 のようなオフブラックが好まれます。適切な黒を選ぶことで、洗練された印象を与え、ユーザーの快適な体験につなげることができます。」
  • #1c1c1c
    「デザインにおいて、色の選び方は視認性や印象に大きな影響を与えます。特に黒の使い方は重要で、純黒(#000)はコントラストが強すぎるため、長時間の閲覧では目が疲れやすくなります。そのため、多くのWebデザインでは少しグレーがかった黒(#333 や #222)が使われることが一般的です。また、ダークモードの背景としては、完全な黒ではなく、#121212 のようなオフブラックが好まれます。適切な黒を選ぶことで、洗練された印象を与え、ユーザーの快適な体験につなげることができます。」
  • #212121
    「デザインにおいて、色の選び方は視認性や印象に大きな影響を与えます。特に黒の使い方は重要で、純黒(#000)はコントラストが強すぎるため、長時間の閲覧では目が疲れやすくなります。そのため、多くのWebデザインでは少しグレーがかった黒(#333 や #222)が使われることが一般的です。また、ダークモードの背景としては、完全な黒ではなく、#121212 のようなオフブラックが好まれます。適切な黒を選ぶことで、洗練された印象を与え、ユーザーの快適な体験につなげることができます。」

明朝体・セリフ体でboldは極力使わない

太くしたいなら、weight500(semibold)まで。明朝やセリフ体は、横線が細く、縦線が太いという特性があり、太さのコントラストが美しさの要因となっているから、boldにするとその美しさが損なわれてしまう。

インタラクションコストについて

インタラクションコストとは、ユーザーが目的を達成するために必要な労力を指す概念。 主に、認知的コスト、物理的コスト、時間的コストに分類することができる。 認知的コストとは、ユーザーが考える必要のある負担のこと。例えば、「このボタンを押したらどうなるのかわからない」、「どこをクリックしたらいい?」といったもの。 物理的コストとは、クリックやスクロール、入力などの操作負担のこと。例えば、「ボタンが小さくて押しづらい」、「入力フォームが長すぎる」など。 時間的コストとは、目的達成にかかる時間のこと。例えば、「ページの読み込みが遅い」、「複雑なプロセスを経ないと、目的の情報に辿り着けない」など。 基本的には、これらのインタラクションコストをいかに下げるかが、ユーザー体験を向上させる上では重要となる。

しかし、認知的コストと物理的コストの2つはトレードオフの関係にあることが多い。この際、どちらを優先すればいいのか。 まず、認知的コストを優先して下げるべきケースは、初心者ユーザーが多い、複雑な情報を扱うUI,タスクの正確性が求められる場合である。例えば、ECサイトの購入プロセスや、金融系のフォーム。 次に、物理的コストを優先して下げるべきケースは、アクティブユーザーが多いサイト・アプリ、上級者向けの専門的なツール(フォトショップとか)、効率が求められる作業などである。

情報のグルーピング方法

  • 背景色のコントラスト:セクションの区切りなど大きな切り替えに利用
  • 余白:繋がりが強いけど区切りたい。例:段落の区切りや、同じグループ内のカードの区切り
  • 罫線:大きな区切りではあるけど、余白の時と同じ程度のつながりの区切りでも使える。ただし、乱用するとUIが汚く見えるので使用は限定的に(罫線の中に罫線は使わないなど)。

最大文字数の考慮

基本的にカード内など、限られた領域内にコンテンツを表示させる場合は、最大文字数の考慮して設計する。 Figma上ではトランケート機能で表現できる。

画像の種類について

JPEG(.jpg/ .jpeg)

写真や背景画像、色の諧調が滑らかなビジュアルに使われることが多い。

特徴
  • フルカラー(約1,677万色)に対応
  • 非可逆圧縮:一度圧縮すると元の画像に戻せない
  • 写真やグラデーションなど、色数が多い画像に向いている
長所
  • ファイルサイズを小さくできる
  • 広くサポートされ、互換性が高い
短所
  • 圧縮すると細部が劣化
  • 透過に対応していない

PNG(.png)

ロゴ、UIアイコン、スクリーンショット、透過が必要な画像に使われることが多い

特徴
  • PNG-8(256色)とPNG-24(フルカラー)がある
  • 可逆圧縮:圧縮しても画質劣化なし
  • 透過に対応
長所
  • ロゴやアイコンなど、線や色の境界がはっきりした画像に強い
  • 背景透過できる
短所
  • ファイルサイズがJPEGより大きくなりがち

SVG(.svg)

ロゴ、アイコン、図表、イラスト、UI装飾に使われることが多い。

特徴
  • ベクターフォーマット(数式で形を定義)。拡大縮小しても画質劣化なし
  • XMLベースでテキスト編集可能。CSSやJavaScriptで動的制御できる
長所
  • 解像度に依存せず高品質
  • 軽量
  • 色や形をコードで変更でき、アニメーションも可能
短所
  • 写真や複雑なグラデーションには不向き
  • 非常に複雑な図形だと重くなる

用語

このセクションでは、Webデザイン・コーディング・UIデザイン、UXデザインの現場でよく耳にするものの、意味を正確に説明しようとすると意外と迷ってしまう用語を集めました。

コーディング関係

  • DOM(Document Object Model):HTMLやXMLをプログラムから操作可能な構造として表したもの。
  • メディアクエリ:画面サイズやデバイス条件に応じてCSSを切り替える仕組み。

デザイン関係

  • CI(Corporate Identity):企業の理念や姿勢、存在意義を社会に伝えるための、企業の「アイデンティティ設計」のこと。通常MI, BI, VIで構成。
  • MI(Mind Identity):理念・使命・ビジョン・価値観など
  • BI(Behavior Identity):行動指針・企業文化・マナーなど
  • VI(Visual Identity):ロゴ・色・フォントなどの視覚要素
  • アフォーダンス:オブジェクトの形状や見た目から操作方法を直感的に理解させる性質。
  • ヒューリスティック評価:経験則や既知の原則に基づいてUIを評価する方法。ユーザーテストの前段階によく使われる。

命名規則に関して

  • kebab-case:単語をハイフン(-)で区切る形式。HTMLのクラス名、CSSのカスタムプロパティ名に使われることが多い。
    例)user-profile-image
  • snake_case:単語をアンダースコア(_)で区切る形式。データベースのカラム名、Pythonの変数名などに使われることが多い。
    例)user_profile_image
  • PascalCase:単語の先頭をすべて大文字にする形式。OOPのクラス名、コンポーネント名(Reactなど)に使われることが多い。
    例)UserProfileImage
  • camelCase:先頭単語は小文字、2単語目以降は先頭を大文字にする形式。JavaScriptの変数名や関数名に使われることが多い。
    例)userProfileImage

参考文献