👶

スケルトンスクリーンを実装してみた

2022/03/13に公開

はじめに

react-content-loader を使ったスケルトンスクリーンの実装について書いた記事です。Create React Content Loader のページでコードも生成され、すごく便利ツールだったので試したことをまとめました。

https://github.com/danilowoz/react-content-loader

https://skeletonreact.com/

スケルトンスクリーンとは

画面に表示するデータが読み込まれるまでの間、そのコンテンツの枠組みだけを事前に表示させるUIのことです。

こういうやつです。

https://skeletonreact.com/#gallery

スケルトンスクリーンのメリット

画面に表示するデータが読み込まれるまでの間、ローディングやスピナー、空白の画面を表示することに比べて、スケルトンスクリーンは待機してる体感時間を短く感じるメリットがあります。(それほど大きな差はないらしいですが。)

Skeleton screens (as splash screens), when used to indicate that a screen is loading, are perceived as being shorter in duration when compared against a blank screen (our control) and a spinner — but not by much

https://uxdesign.cc/what-you-should-know-about-skeleton-screens-a820c45a571a

また、事前に枠組みを表示させるので、レイアウトシフトがそもそも起きなくなります。(ローディング中と結果の画面のガタつきなどがなくなります。)

レイアウトシフトは、表示された要素がレンダリングされたフレームから次のフレームへと位置を変更する際に発生します。

https://web.dev/i18n/ja/cls/

その一方で、スケルトン画面と実際の結果が一致しない場合は、ユーザーを混乱させるし、フラストレーションを与えてしまう可能性もあります。

When the skeleton screen doesn’t match the outcome, we’ve created confusion and frustration that will overcome any benefit you might have gotten from trying to handle that delay in a better way.

https://timkadlec.com/remembers/2020-11-02-skeleton-screens/

やったこと

以下、今回試したことです。

(1) スケルトンスクリーンのデザイン
  • スケルトンスクリーンのデザインを用意します。(デザイナーさんに作ってもらった🤝)
(2) `react-content-loader` を導入する
$ yarn add react-content-loader
(3) Create React Content Loader にて、(1)のコンポーネントを作成
  • Create React Content Loader にて、(1)のデザインのスケルトンスクリーンのコンポーネントを作ります。
  • 自動生成されるのめっちゃ便利

(4) (3)で生成したコンポーネントをプロジェクト内で実装
  • (3)で生成したコンポーネントをコピペして、スケルトンスクリーンを導入したいプロジェクト内に実装
(5) (4)で実装したコンポーネントを必要な箇所から呼び出す
  • 今回は、カードのスケルトンスクリーンを作成して、一覧表示の画面でローディン中は表示させるようにしました。

  • 実装イメージ、参考にしたコード(vercel/commerce)

https://github.com/vercel/commerce/tree/main/site/components/ui/Skeleton

https://github.com/vercel/commerce/blob/main/site/components/search.tsx#L333

おわりに

  • react-content-loader はじめて使ったけどめっちゃ便利でした。実装してて楽しかったです。
  • 今回はあまり複雑じゃない画面(ひとつのAPIを叩いた際のローディングの表示をスケルトンスクリーンに変えただけ)の実装だったので、割と簡単という印象でしたが、複雑な画面の実装になってくると、結構大変そうでした。スケルトンスクリーンについていろいろ調べてる中で以下の記事が実践的で勉強になりました。

https://logmi.jp/tech/articles/325589

  • Lighthouseのスコア見たら0になってたのナイス✅✅✅

参考

https://zenn.dev/kii/articles/progress-indicator-ui

GitHubで編集を提案

Discussion