1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに 🌟

今回は Fluent UI 2 の Spinner をテーマに、まずは土台となる考え方を整理します。
特に、似た目的で検討しやすい Progress BarSkeleton との違い、そして Fluent UI Blazor 5 の FluentSpinner との違いを重点的にまとめます。

本記事は、ガイダンス・レイアウト・アクセシビリティ・コンテンツの順に整理します。中でもアクセシビリティと文言設計は実装品質に直結するため、厚めに扱います。

Fluent UI 2 とは ✨

Fluent UI 2 は、Microsoft の Fluent 2 デザインシステムに沿った UI コンポーネント群です。
単に見た目をそろえるためではなく、「いつ使うか」「どう配置するか」「支援技術でどう伝わるか」まで含めて設計されている点が特徴です。

Spinner も同様で、公式 usage では次の原則が示されています。

  • 待機が 1 秒を超えるときに使う
  • 処理の残り時間は示さない
  • 進捗率を伝える必要があるなら determinate progress bar を使う

出典: Fluent UI 2 Spinner usage

これまでの Fluent UI 2 シリーズ(全件)📚

本記事執筆時点でのシリーズ記事をすべて掲載します。

Spinner と Progress Bar / Skeleton の使い分け 🔄

似た役割に見えても、伝える情報が異なります。

コンポーネント 主なユースケース 伝える情報
🔄 Spinner 待機が 1 秒以上で、進捗率が出せない処理 「処理中です」
📊 Progress Bar(determinate) 完了までの進捗率を示せる処理 「どこまで進んだか」
🧱 Skeleton コンテンツの骨組みを先に見せたい読み込み 「この形の情報が出る」

Spinner は状態通知に向いていますが、完了見込みまでは伝えません。
そのため、残り時間や進捗率が重要な場面では Progress Bar を選ぶのが自然です。

Skeleton は「読み込み中の見た目の期待値」を先に提示したいときに有効です。たとえばカード一覧やプロフィール画面のように、レイアウトを先に見せることで体感待ち時間を下げたい場面に向きます。

Fluent UI Blazor 5 と Fluent UI 2 の Spinner の違い

Fluent UI 2 側は usage で「どう使うべきか」が強く定義されています。
一方、Fluent UI Blazor 5 側は FluentSpinner の API と実装上の調整点が明確です。

観点 Fluent UI 2 Spinner (React usage) Fluent UI Blazor 5 FluentSpinner
🎯 中心 ガイダンス(いつ使うか) 実装パラメータ(どう設定するか)
⏱️ 使う目安 1 秒以上の待機 即時タスクには使わない(Do/Don't)
♿ アクセシビリティ 3 秒以上ならラベル + aria-labelledby 単体配置時は tabIndex=\"0\" を検討、reduced-motion 時に説明を追加
🧭 表示数 一次情報上は明示的な「1個まで」規定は見当たらない 「同時に複数表示しない」推奨あり
⚙️ API usage中心(コード API 細部は別ページ) Size / AppearanceInverted / Visible を直接指定可能

Blazor の Visiblebool?true/false/null)なのは実装面で実用的です。
false は非表示、null は非レンダーとして扱えるため、描画負荷や DOM 量を意識した制御がしやすくなります。

Spinner のガイダンス・レイアウト・アクセシビリティ・コンテンツ

ガイダンス

  • 待機が短い(体感 1 秒未満)処理では Spinner を出しすぎない
  • 進捗が数値で表現できるなら Progress Bar を優先する
  • 「今何を待っているか」を利用者が判断できる文言を添える

レイアウト

Fluent UI 2 の usage では、Spinner は「ロード対象セクションの中央」に置く方針です。
画面の一部だけがロード中なら、他のセクションの操作を妨げない配置にします。

この原則を守ると、画面全体が止まったように見える誤解を避けやすくなります。

アクセシビリティ(重要)

ここが最重要です。
Fluent UI 2 の usage では、3 秒以上かかる処理にはラベルを付け、aria-labelledby でスクリーンリーダーに伝えることが示されています。

実務では次を最低ラインにすると安全です。

  • Spinner 単体表示を避け、必ず文言で状態を補う
  • 文言と Spinner を確実に関連づける(aria-labelledby など)
  • 長い処理では、必要に応じて別途ステータスメッセージも提供する

Blazor 側のガイダンス(tabIndex=\"0\" の検討、reduced-motion 時の説明追加)も、同じ方向性です。
「見えている」だけでなく「読める・伝わる」状態を作ることが重要です。

コンテンツの説明(重要)

Spinner のラベルは、短く具体的であるほど理解しやすくなります。Fluent UI 2 の usage では次が推奨されています。

  • 具体的な動詞を使う
  • -ing 形で短く書く
  • 3 語以内を目安にする
  • 末尾は " ..."(スペース + 三点リーダー)
  • 曖昧語(loadingauthenticating など)を避ける

例:

  • Syncing profile ...
  • Saving draft ...
  • ⚠️ Loading ...(対象が不明)
  • ⚠️ Working on it ...(行為が曖昧)

文言の品質は、待ち時間そのものは変えられなくても、利用者の不安を大きく減らします。

まとめ 📝

Spinner は「処理中を見せる部品」ですが、実際は 使う条件・置き場所・読み上げ・文言までセットで設計するコンポーネントです。
特にアクセシビリティとコンテンツ設計を丁寧に行うと、同じ待機時間でも体験品質が大きく変わります。

次は、React 実装と Fluent UI Blazor 5 実装のサンプルコードを並べて、同じ要件をどう書き分けるかを具体化していきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?