PWA向けデザインガイド|使いやすさ・表示速度・オフライン対応を高める実践設計
PWAは、Webサイトの開きやすさを維持しながら、ホーム画面への追加、オフライン表示、通知、独立した画面での起動など、アプリに近い利用体験を提供できる仕組みです。しかし、Webアプリマニフェストやサービスワーカーを導入しただけでは、利用者にとって本当に使いやすいPWAにはなりません。通信が不安定なときに何が表示されるか、ホーム画面から起動したときに迷わず操作できるか、更新中の状態が正しく伝わるかなど、通常のWebサイトよりも多くの利用状況を想定した設計が求められます。
PWA向けのデザインでは、色や余白、画像、文字の見せ方といった視覚表現だけでなく、読み込み、保存、同期、インストール、権限許可、再接続などの状態変化も画面の一部として扱います。利用者が操作結果を判断できない画面は、技術的には正常に動いていたとしても、利用者からは不具合のように見えます。そのため、現在何が起きているか、次に何ができるか、入力した内容が失われていないかを、短い文章や視覚的な変化によって継続的に伝える必要があります。
本記事では、PWA向けデザインを15の重要項目に分け、それぞれを5つの小見出しで詳しく解説します。画面幅への対応、インストール案内、オフライン表示、表示速度、スマートフォン操作、通知、フォーム、アクセシビリティ、ブランド表現、検証方法まで、実際の制作で必要になる内容を一つずつ整理します。記事内では、HTML、CSS、JavaScript、Webアプリマニフェストのコード例も紹介し、設計と実装を結び付けながら説明します。
1. PWA向けデザインとは
PWA向けデザインとは、Web技術で構築されたサービスを、端末、通信状態、起動方法が変化しても安定して利用できるように設計する考え方です。通常のWebページのように検索結果や共有リンクから開ける利便性を残しながら、繰り返し利用されるアプリに近い操作性を実現することが目的になります。
1.1 見た目だけでなく状態変化を設計する
一般的な画面デザインでは、通常時に表示される文章、画像、ボタン、メニューなどへ意識が向きやすい傾向があります。しかしPWAでは、読み込み中、オフライン、送信待ち、同期失敗、更新可能といった状態も、通常画面と同じ程度に重要です。これらの状態を設計せずに実装へ進むと、処理中に白い画面が表示されたり、操作を受け付けているのか分からなかったりする問題が起こります。
状態変化を設計する際は、「何が起きたか」「入力内容は残っているか」「利用者は次に何をすればよいか」という三つの情報を整理します。例えば通信が切れた場合でも、保存済みの記事を閲覧できるのであれば、画面全体をエラー表示で覆う必要はありません。利用できる機能はそのまま残し、送信や更新など通信が必要な操作を行った時点で、具体的な案内を表示する設計が適しています。
1.2 Webサイトとアプリの利用方法を自然につなぐ
Webサイトは、検索結果、広告、共有されたURLなどから初めて訪れる利用者が多く、必要な情報を確認した後に離脱することも珍しくありません。一方、アプリは端末へ保存され、利用者が目的を持って繰り返し起動することを前提にしています。PWAでは、この二つの異なる利用方法を一つのサービス内で無理なくつなぐ必要があります。
初回訪問者には、通常のWebサイトとして内容を理解しやすい構成を提供し、インストールや通知許可を急いで求めないことが重要です。利用者が記事を保存した、予約を完了した、商品をお気に入りへ追加したなど、再訪する理由が生まれた段階でホーム画面への追加を案内すると、機能の価値が伝わりやすくなります。利用者の関係が深まるにつれて機能を段階的に案内する設計が、継続利用につながります。
1.3 画面単位ではなく利用経路全体を考える
PWAの画面を設計するときは、トップ画面、一覧画面、詳細画面、入力画面を個別に整えるだけでは不十分です。利用者がどこから訪れ、どの順番で操作し、どの時点で通信が切れる可能性があるかを、一連の利用経路として整理する必要があります。
例えば予約サービスでは、検索結果から予約詳細を開き、日付を選択し、個人情報を入力し、確認画面から送信するまでが一つの流れです。この途中で通信が切れた場合、入力内容を端末へ一時保存するのか、送信だけを保留するのかによって必要な画面が変わります。利用経路ごとに起こり得る状態を洗い出すことで、通常画面だけを設計した場合に見落としやすい問題を発見できます。
1.4 端末とブラウザの差を前提にする
PWAで利用できる機能や表示方法は、端末、基本ソフト、ブラウザによって異なる場合があります。ホーム画面への追加方法、通知の利用可否、全画面表示、背景での同期などが、すべての利用環境で完全に同じように動作するとは限りません。
そのため、特定機能が利用できることを前提に主要な操作を設計すると、対応していない環境で利用者が目的を達成できなくなる危険があります。通知を利用できない場合でも、PWA内のお知らせ画面で重要情報を確認できるようにするなど、代替手段を用意することが大切です。対応環境では便利な機能を追加し、非対応環境では通常のWebサービスとして成立させる段階的な設計が求められます。
1.5 成果を判断する指標を先に決める
PWAを導入すると、ホーム画面への追加数や通知許可数だけを成果として追いかけてしまうことがあります。しかし、追加された後に一度も起動されなければ、利用者に継続的な価値を提供できたとは言えません。PWAの目的に応じて、再訪率、操作完了率、読み込み時間、入力離脱率、オフライン時の継続率などを確認する必要があります。
予約サービスであれば予約完了率、情報サービスであれば保存記事の再閲覧率、業務用PWAであれば一つの作業を完了するまでの時間が重要な指標になります。画面変更を行う前に、どの行動を改善したいかを明確にしておくと、公開後の数値を正しく評価できます。見た目の印象だけで判断せず、利用者が目的を達成しやすくなったかを基準に改善を進めます。
2. 利用環境に合わせた画面設計
PWAはスマートフォンだけでなく、タブレット、ノートパソコン、大型画面など、さまざまな環境で利用されます。また、ブラウザの中で開かれている場合と、ホーム画面から独立表示で起動されている場合でも、利用できる表示領域や操作方法が変わります。
2.1 画面幅に応じて情報を再配置する
小さな画面向けの設計では、パソコン向けの画面を単純に縮小するだけでは、読みやすさや操作性を維持できません。横方向に並べられていた情報を縦方向へ変更し、利用者が最初に必要とする内容から順番に配置する必要があります。補助的な情報は折りたたみ、詳細が必要な利用者だけが開けるようにすると、画面全体を整理できます。
画面幅によって表示順序を変える場合は、見た目の順番とHTML上の順番が大きく異ならないように注意します。視覚上は上にある操作が、読み上げやキーボード操作では最後に移動する構造になると、操作の理解が難しくなります。重要度に基づいてHTML自体の順番を決め、表示方法だけを画面幅に合わせて調整する構成が理想的です。
2.2 表示領域の高さが変わることを考慮する
スマートフォンのブラウザでは、画面上部のアドレス欄や下部の操作欄が、スクロールに応じて表示されたり隠れたりします。そのため、画面の高さを固定的に指定すると、下部のボタンが画面外へ押し出されたり、不要な余白が残ったりする可能性があります。特に入力画面や全画面に近い構成では、この問題が操作完了率へ影響します。
画面全体の高さを利用する場合は、動的な表示領域へ対応した単位を併用し、内容が増えた場合には自然に縦へ広がるようにします。下部へ主要操作を固定する場合は、その高さと同じだけ本文側へ余白を確保し、最後の文章や入力項目が隠れないようにします。固定表示は便利ですが、表示内容を覆わないことを必ず確認しなければなりません。
実装例:動的な画面高さへの対応
.pwa-screen {
display: flex;
flex-direction: column;
min-height: 100vh;
min-height: 100dvh;
}
.pwa-screen__main {
flex: 1;
padding: 24px 16px 120px;
}
.pwa-screen__action {
position: sticky;
bottom: 0;
padding: 16px;
background: #ffffff;
border-top: 1px solid #d9d9d9;
}
2.3 端末の切り欠きと安全領域を確保する
ホーム画面からPWAを起動し、独立表示や全画面に近い状態で利用すると、端末上部の切り欠きや下部の操作領域に内容が重なることがあります。画面上部の戻るボタンが切り欠きの下へ入り込んだり、下部の送信ボタンが端末操作領域へ重なったりすると、主要機能を利用できなくなる可能性があります。
端末が持つ安全領域の値を利用し、通常の余白へ追加する形で配置を調整します。上部見出し、固定ナビゲーション、下部操作欄だけでなく、横向き表示時の左右の余白も確認する必要があります。特定端末だけを見て固定値を決めるのではなく、環境に応じて余白が変化する設計にすることが重要です。
実装例:安全領域を含めた余白
.app-header {
padding-top: calc(12px + env(safe-area-inset-top));
padding-right: calc(16px + env(safe-area-inset-right));
padding-left: calc(16px + env(safe-area-inset-left));
}
.bottom-navigation {
padding-right: calc(12px + env(safe-area-inset-right));
padding-bottom: calc(12px + env(safe-area-inset-bottom));
padding-left: calc(12px + env(safe-area-inset-left));
}
2.4 縦向きと横向きの両方で確認する
スマートフォン向けPWAは縦向きで設計されることが多いものの、利用者が常に縦向きで操作するとは限りません。動画、地図、表、画像編集、長い入力作業などでは、横向きへ切り替える利用者もいます。横向きになったときに固定見出しと下部ナビゲーションが重なると、本文を表示できる領域が極端に狭くなる場合があります。
向きを固定する設定を行う場合でも、サービスの目的に本当に必要かを検討する必要があります。単に設計が難しいという理由で固定すると、端末を横置きして利用する人や、補助器具で端末の向きを変えられない人にとって使いにくいサービスになります。可能な限り両方の向きへ対応し、特定画面だけ制約が必要な場合は理由を分かりやすく伝えます。
2.5 文字サイズの変更に耐えられるようにする
利用者が端末設定やブラウザ設定で文字を拡大すると、固定された高さのボタン、見出し、入力欄から文章がはみ出すことがあります。文字が途中で切れるだけでなく、隣の操作と重なり、どのボタンを押しているか分からなくなる危険もあります。そのため、要素の高さは内容に応じて広がる構成を基本にします。
日本語は同じ意味でも表現によって文字数が大きく変わるため、短い項目名だけで表示確認を行うのは不十分です。長い氏名、住所、商品名、通知文などを入れた状態でも崩れないかを確認します。重要な文章を一行で省略するのではなく、複数行表示や詳細表示を使い、情報そのものを失わせないことが重要です。
3. インストール体験の最適化
PWAのインストールは、利用者がサービスを継続的に利用するための入口になります。ただし、インストール数を増やすことだけを目的にすると、初回訪問時から大きな案内を表示し、かえって内容の閲覧を妨げる結果になりやすいため注意が必要です。
3.1 サービスの価値を理解した後に案内する
利用者が初めてページを開いた直後は、サービスが自分に必要かどうかを判断している段階です。この時点でホーム画面への追加を求めても、追加後にどのような利点があるのか理解できないため、拒否される可能性が高くなります。拒否操作の印象が強く残ると、後から必要性を感じても再び案内を開いてもらいにくくなります。
インストール案内は、予約完了、記事保存、お気に入り登録、会員登録、複数回の訪問など、利用者が再訪する理由を持った段階で表示するのが効果的です。「インストールしてください」と一方的に求めるのではなく、「次回からホーム画面ですぐ確認できます」「保存内容を素早く開けます」など、利用者にとっての具体的な利点を説明します。
3.2 独自の案内とブラウザの案内をつなげる
ブラウザが表示するインストール案内は、表示条件や時期が環境によって変わるため、サービス側だけで完全に制御できない場合があります。そのため、PWA内に小さな案内欄や説明画面を設け、利用者が追加操作を選んだ時点でブラウザ側の案内へつなげる方法が有効です。
独自案内を常に表示すると、内容閲覧の妨げになり、何度閉じても表示される案内として不快感を与えます。一度閉じた利用者には一定期間表示しない、すでにホーム画面から起動している場合は表示しないなど、状態に応じた制御が必要です。案内を閉じても、設定画面やメニューから再び開けるようにしておくと、必要になった利用者が自分で操作できます。
3.3 Webアプリマニフェストを正しく設定する
Webアプリマニフェストには、PWAの正式名称、短い名称、説明、起動位置、表示形式、背景色、主題色、言語、アイコンなどを記述します。これらの情報は、インストール案内、ホーム画面、起動中の画面、端末のアプリ一覧などで利用されるため、単なる技術設定ではなくブランド表現の一部として扱う必要があります。
正式名称が長すぎると、ホーム画面や端末の一覧で途中までしか表示されないため、短い名称も用意します。アイコンは一つの大きさだけではなく、複数の表示環境に合わせた大きさを準備し、端末側で丸形や角丸に切り抜かれても主要な図形が欠けない形式を含めます。背景色と主題色は、起動画面と実際の最初の画面が自然につながるように設定します。
実装例:Webアプリマニフェスト
{
"name": "暮らしの予定管理",
"short_name": "予定管理",
"description": "予定や作業内容を端末から素早く確認できるPWA",
"start_url": "/?source=installed",
"scope": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#2457c5",
"lang": "ja",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icons/icon-512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "/icons/icon-maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
3.4 インストールできない環境でも迷わせない
すべてのブラウザや端末で、同じインストール操作が利用できるわけではありません。利用可否を確認せずに「ホーム画面へ追加」というボタンを表示すると、押しても何も起こらない、または説明と異なる画面が開く問題が発生します。利用者から見ると機能が壊れているように感じられます。
対応状況を確認したうえでボタンを表示し、直接案内を開けない環境では、共有項目やブラウザメニューから追加する手順を説明します。ただし、端末ごとの長い手順を最初からすべて見せると読みにくいため、利用者が「追加方法を見る」を選んだ場合だけ詳しい説明を表示します。追加できない環境でも、通常のWebサービスとして主要機能を利用できる状態を維持します。
3.5 インストール後の初回起動を整える
ホーム画面へ追加した後に最初に起動した画面が、通常のWeb訪問とまったく同じ内容だけでは、インストールした利点を感じにくくなります。利用者が以前保存した情報、最近確認した内容、よく使う機能などへ素早く移動できる構成にすると、継続利用の価値が伝わります。
ただし、インストール直後に長い説明や複数段階の初期設定を強制すると、すぐに使いたい利用者の妨げになります。主要機能を最初から利用できる状態にし、設定や案内は後から確認できるようにします。「後で設定する」「説明を閉じる」といった選択肢を明確に設け、利用者が自分の目的を優先できる画面にします。
4. オフライン時の利用体験
PWAの特徴としてよく挙げられるのが、通信がない状況でも一部の情報や機能を利用できる点です。しかし、すべての内容を端末へ保存すればよいわけではありません。情報の新しさ、安全性、保存容量、利用目的を考慮し、オフライン時に本当に必要な範囲を決めます。
4.1 オフラインでも必要な情報を選定する
予約確認、乗車情報、作業手順、保存した記事、購入済みの券などは、移動中や通信が不安定な場所でも確認したい可能性が高い情報です。一方、現在の在庫、残高、株価、空席状況のように頻繁に変化する情報は、古い状態のまま表示すると重大な誤解を招く恐れがあります。
情報を完全保存、一時保存、オンライン限定の三つ程度に分け、機能ごとに扱いを決めると設計しやすくなります。保存した情報を表示する場合は、取得日時や最終更新日時を明記し、最新ではない可能性を判断できるようにします。古い情報を表示すること自体よりも、それが現在の情報であるかのように見せることが問題になります。
4.2 オフライン状態を明確に伝える
通信が切れたときに画面上の変化がないと、利用者はボタンが反応しない、読み込みが終わらない、サービスに障害が発生していると考える可能性があります。画面上部の通知欄や小さな状態表示を使い、現在オフラインであることを分かりやすく伝えます。
ただし、保存済みの情報を問題なく閲覧できる場合に、画面全体を警告で覆う必要はありません。利用可能な機能はそのまま残し、送信、更新、新しい検索など、通信が必要な操作を選んだ時点で詳しい案内を表示します。オフラインであることだけでなく、「保存済み情報は閲覧できます」など、現在できることも併せて伝えると安心感につながります。
4.3 オフライン専用画面を用意する
端末へ保存されていないページをオフラインで開こうとした場合、ブラウザ標準の接続エラーを表示すると、利用者はPWAから外へ出たように感じることがあります。サービスの見た目を保った専用画面を用意し、接続できない理由と利用可能な操作を説明することが重要です。
専用画面には、再試行ボタン、保存済み情報への移動、トップ画面への移動、通信状態の確認方法などを配置します。「インターネットに接続できません」という文章だけで終わらせず、利用者が次に取れる行動を示します。再接続が確認できた場合は、自動的に元のページへ戻すのではなく、入力中の内容や閲覧位置を失わないように注意します。
実装例:サービスワーカーによるオフライン画面
const CACHE_NAME = "pwa-design-guide-v1";
const OFFLINE_PAGE = "/offline.html";
self.addEventListener("install", (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
return cache.addAll([
"/",
OFFLINE_PAGE,
"/styles/app.css",
"/scripts/app.js"
]);
})
);
});
self.addEventListener("fetch", (event) => {
if (event.request.mode !== "navigate") {
return;
}
event.respondWith(
fetch(event.request).catch(async () => {
const cache = await caches.open(CACHE_NAME);
return cache.match(OFFLINE_PAGE);
})
);
});
4.4 入力途中の内容を失わないようにする
長い入力画面で通信が切れた場合、送信に失敗するだけでなく、画面更新や戻る操作によって入力内容そのものが消える可能性があります。利用者が時間をかけて入力した内容を失うと、同じ操作をやり直す負担が大きく、サービスへの信頼も低下します。
入力内容を端末内へ一時保存し、通信回復後に復元または再送信できるようにします。ただし、「保存しました」という表現だけでは、サーバーへ送信済みなのか端末内だけに残っているのか判断できません。「この端末に一時保存しました」「現在は送信されていません」など、保存場所と処理状態を具体的に伝える必要があります。
4.5 再接続後の同期状態を表示する
通信が回復したとき、保留中の操作を自動的に送信または同期できる場合があります。しかし、利用者に知らせず処理を行うと、二重送信、内容の上書き、意図しない公開などへの不安が生じます。自動同期を行う場合でも、開始、完了、失敗の状態を確認できるようにします。
複数の変更が保留されている場合は、すべてを一つの状態として表示するのではなく、どの項目が同期され、どの項目が失敗したかを確認できる画面を用意します。失敗した操作には再試行、編集、削除の選択肢を提供し、利用者が処理内容を管理できるようにします。
5. 読み込み速度を高める設計
PWAでは、技術的な読み込み時間だけでなく、利用者がどれだけ早く内容を理解し、操作を始められるかが重要です。すべての資源が読み込まれるまで白い画面を見せるのではなく、必要な情報から順に表示し、処理が進んでいることを伝えることで、体感的な待ち時間を短くできます。
5.1 最初に必要な内容を優先表示する
画面を開いた直後に必要なのは、ページの目的を示す見出し、主要な内容、現在の状態、最初に行う操作です。画面下部の画像、地図、動画、補助情報、外部部品などを同時に読み込むと、最初に必要な内容の表示が遅くなる可能性があります。
初期表示へ必要な資源を絞り、画面外にある内容は利用者が近づいた時点で読み込みます。特に大きな画像や動画は、表示される前から取得すると通信量と処理負荷が増えます。ただし、利用者がすぐ見る可能性が高い画像を遅らせすぎると、逆に表示が不自然になるため、優先順位を画面ごとに判断します。
実装例:画像の遅延読み込み
<img
src="/images/pwa-design-guide.webp"
alt="スマートフォンに表示されたPWAの画面設計例"
width="960"
height="640"
loading="lazy"
decoding="async"
>
5.2 読み込み中の骨組みを表示する
データ取得中に何も表示されないと、利用者は処理が進んでいるのか、画面が停止しているのかを判断できません。実際の文章や画像が入る位置へ、薄い背景の骨組みを先に表示すると、どのような内容が表示されるか予測しながら待てます。
骨組みの大きさは、最終的に表示される内容と大きく変わらないようにします。読み込み後に要素の高さが急に変わると、押そうとしていたボタンやリンクの位置が移動し、誤操作につながります。繰り返す強い点滅は避け、動きを減らす設定を利用している環境では静的な表示へ切り替えます。
5.3 読み込み後の画面のずれを防ぐ
画像、広告、外部埋め込み、動的な案内欄などの大きさを事前に確保していない場合、読み込みが完了した瞬間に周囲の文章が押し下げられます。利用者が文章を読んでいる途中で位置が変わると、読み続けていた箇所を見失い、操作中であれば誤った項目を押す可能性があります。
画像には幅と高さを指定し、内容の縦横比をブラウザが事前に計算できるようにします。動的な内容には最小高さを設ける、表示領域を限定する、読み込み前から同じ大きさの骨組みを出すなどの方法があります。広告や外部部品についても、表示されるまで領域をゼロにしないことが重要です。
5.4 再訪時は保存データを先に活用する
再訪した利用者に対して、毎回すべての情報を取得し直すと、ホーム画面から起動した利点を感じにくくなります。前回取得した情報を先に表示し、その裏側で新しい情報を取得する方法を使うと、利用者は待たずに内容を確認できます。
ただし、価格、残高、在庫、予約状況など、古い情報が大きな判断へ影響する場合は慎重に扱います。保存データには最終更新日時を表示し、更新中であることを明示します。新しい情報が取得されたときに値が変わった場合は、突然置き換えるだけでなく、更新された箇所を分かりやすく示します。
5.5 不要な動きで処理を重くしない
画面遷移や操作結果を伝える動きは、利用者の理解を助けます。しかし、背景全体を動かす、大きな画像を繰り返し拡大する、多数の要素を同時に変化させると、低性能な端末では表示が遅れ、指の操作に画面が追従しなくなる場合があります。
動きは装飾目的だけで追加せず、状態変化、要素の追加、画面の移動方向などを伝えるために使います。位置や大きさを頻繁に再計算させる方法より、透明度や変形を利用した軽い表現を選びます。また、短い時間で完了させ、利用者が操作できるまで不要に待たせないことが重要です。
6. スマートフォン操作に適した画面構成
PWAはスマートフォンで利用される機会が多いため、指で押しやすく、片手でも主要な操作を完了できる画面構成が求められます。パソコン向けの小さなリンクや細かな操作をそのまま縮小すると、誤操作や離脱の原因になります。
6.1 押しやすい操作領域を確保する
表示上は小さな文字やアイコンでも、周囲を含めた押下領域を十分に確保する必要があります。特に閉じる、戻る、追加、削除などの操作が密集していると、利用者が意図しない項目を押す可能性が高くなります。
操作領域を広げる際は、見た目の図形そのものを大きくしすぎる必要はありません。内部余白を追加し、隣接する操作との間隔を確保することで、画面の密度を保ちながら押しやすくできます。購入、送信、削除など結果の大きい操作は、補助操作から離れた位置へ配置します。
6.2 片手で届きやすい位置を利用する
画面が大型化したスマートフォンでは、端末を片手で持った状態から上部の操作へ親指を伸ばすことが難しくなります。検索、保存、次へ進むなど頻繁に使う操作を画面下部へ置くと、持ち替えずに利用しやすくなります。
ただし、すべての操作を下部へ集めると、ボタンやメニューが増えすぎて目的の操作を探しにくくなります。主要操作、画面移動、補助操作を分け、常に表示する項目を限定します。利用頻度の低い設定や詳細操作は、追加メニューや詳細画面へまとめると画面を整理できます。
6.3 下部ナビゲーションの項目数を絞る
下部ナビゲーションは、主要な画面へいつでも移動できる便利な仕組みです。しかし、項目数が多くなると、一つひとつの幅が狭くなり、日本語の名称が途中で切れたり、隣の項目を押しやすくなったりします。
主要画面を三つから五つ程度に絞り、それ以外は「その他」や設定画面へまとめます。アイコンだけでは意味を正確に理解できない場合があるため、短い日本語の名称を併記します。現在表示中の項目は色だけに頼らず、背景、太さ、下線、形状など複数の違いで示します。
6.4 長い画面でも現在位置を把握できるようにする
記事、商品詳細、入力画面などが長くなると、利用者は現在どの内容を見ているのか、どれだけ残っているのか分からなくなる場合があります。現在の小見出し、入力の進行状況、目次へ戻る操作などを提供すると、画面内の位置を把握しやすくなります。
固定見出しや進行表示は便利ですが、常に大きな領域を占有すると、本文を読める範囲が狭くなります。下方向へ読んでいるときは縮小し、上方向へ戻ったときに再表示するなど、利用状況に応じて変化させる方法が有効です。重要な操作まで隠さないように、再表示の条件を明確にします。
6.5 長押しや横移動だけへ依存しない
長押し、横方向への払い操作、二本指操作などは、画面上から存在を発見しにくく、すべての利用者が知っているとは限りません。主要機能をこうした操作だけへ割り当てると、機能そのものが存在しないと判断される可能性があります。
横へ払うと削除できる機能を提供する場合でも、詳細画面や追加メニュー内に通常の削除ボタンを用意します。特殊な操作は効率を高める近道として利用し、通常のボタン操作でも同じ目的を達成できるようにします。初めて特殊操作を利用できる場面では、短い案内を一度だけ表示する方法も有効です。
7. 画面遷移とナビゲーション
PWAは、検索結果、共有URL、通知、ホーム画面など、さまざまな入口から直接開かれます。そのため、利用者がどの画面から開始しても、現在位置と次の移動先を理解できるナビゲーションが必要です。
7.1 ブラウザの戻る操作を壊さない
PWA内に独自の戻るボタンを設ける場合でも、ブラウザや端末の戻る操作と矛盾しないようにします。一覧から詳細へ移動した後に戻ると、一覧ではなくトップ画面へ移動する、またはPWA自体が閉じる動作になると、利用者の予想と異なります。
検索条件、絞り込み、並び順、スクロール位置なども履歴と合わせて維持すると、詳細確認後に同じ一覧を続けて閲覧できます。戻るたびに検索条件が初期化されると、利用者は同じ設定を何度も行わなければなりません。技術的な履歴管理だけでなく、利用者が直前の状態へ自然に戻れるかを基準に設計します。
7.2 現在表示している場所を明確にする
下部ナビゲーション、階層表示、ページ見出し、選択状態などを使い、利用者が現在どの画面を見ているかを示します。画面ごとに名称の付け方や見出し位置が変わると、同じサービス内を移動していることを理解しにくくなります。
「保存済み」「お気に入り」「履歴」など、似た目的の画面が複数ある場合は、それぞれの違いを短く説明します。何が保存されるのか、いつまで残るのか、利用者自身が削除できるのかを明確にすると、画面名だけでは伝わりにくい役割を理解できます。
7.3 遷移後の表示位置を適切に決める
新しい画面へ移動したにもかかわらず、前の画面と同じスクロール位置が残っていると、ページの途中から始まったように見える場合があります。通常の新規移動では画面上部から表示し、戻る操作では元の位置を復元する動作が一般的な予想に合います。
一方、入力確認画面から修正のために戻る場合は、修正対象の入力項目へ直接移動すると操作時間を短縮できます。すべての遷移で上部へ戻すのではなく、移動の目的に応じて、上部、元の位置、特定項目のいずれへ表示するかを設計します。
7.4 外部ページへの移動を分かりやすくする
ホーム画面から独立表示で起動しているPWAから外部サイトを開くと、通常のブラウザへ切り替わる場合があります。利用者は突然別の画面へ移動したように感じるため、決済、本人確認、外部サービスなど重要な場面では、移動先が別のサイトであることを説明します。
すべての外部リンクに確認画面を表示すると、操作回数が増え、情報閲覧を妨げます。そのため、移動によって作業状態が失われる、個人情報を入力する、別事業者のサービスへ移動するなど、影響の大きい場面に限定します。通常の記事参照などは、外部リンクを示す記号や補足文だけでも十分です。
7.5 詳細画面から直接開いても理解できる構成にする
検索結果、通知、共有されたURLから、利用者が詳細画面へ直接訪れることがあります。この場合、一覧画面やトップ画面を経由していないため、情報の背景や現在位置を把握できない可能性があります。
各画面には独立した見出し、必要な説明、関連一覧へ戻る導線を設け、単体で開いても内容を理解できるようにします。通知から開いた場合は、通知の対象内容を画面上部で確認できるようにし、関係のないトップ画面へ送らないことが重要です。
8. 通知設計と再訪促進
通知は、予約時刻、配送状況、作業期限などを利用者へ直接伝えられる便利な機能です。一方で、利用者の集中や私生活へ割り込む機能でもあるため、許可の求め方、内容、頻度、停止方法まで慎重に設計する必要があります。
8.1 通知の利点を説明してから許可を求める
初回訪問直後にブラウザの通知許可を表示しても、利用者はどのような通知が、どの程度届くのかを判断できません。その結果、必要性を理解しないまま拒否され、後から予約通知を利用したいと思っても許可方法が分からない状況が生まれます。
予約完了後、配送状況を確認した後、更新条件を保存した後など、通知が役立つ場面で事前説明を表示します。「通知を許可してください」ではなく、「予約時刻の前にお知らせします」「保存した条件に一致した場合だけ通知します」など、内容と利点を具体的に伝えます。
8.2 通知の種類を個別に選択できるようにする
すべての通知を一括で有効または無効にするだけでは、不要な販促通知を避けたい利用者が、必要な予約通知まで解除する可能性があります。重要なお知らせ、予定、配送、更新、販促など、性質の異なる通知を分けて設定できるようにします。
初期状態では、利用者が明確に必要とした通知だけを提案し、販促目的の通知を自動的に有効にしない配慮が必要です。設定画面では、通知の種類だけでなく、どのような条件で、どの程度の頻度で届くかも説明します。利用者が自分で制御できる状態を作ることが信頼につながります。
8.3 通知文だけで内容を判断できるようにする
「お知らせがあります」「更新されました」という通知だけでは、利用者は今すぐ開く必要があるのか判断できません。何が起きたのか、期限があるのか、操作が必要なのかを短い文章で伝え、通知を開く価値を理解できるようにします。
一方で、通知は端末のロック画面に表示され、周囲の人から見られる可能性があります。氏名、住所、金額、病名、予定の詳細など、個人情報や機密情報をそのまま表示するのは避けます。詳細を伏せた状態でも必要性が伝わる文章を作り、内容はPWAを開いた後に確認できるようにします。
8.4 通知から対象画面へ直接移動させる
通知を押した後にトップ画面だけが開くと、利用者は通知された内容を自分で探さなければなりません。予約通知なら予約詳細、配送通知なら配送状況、記事更新なら対象記事へ直接移動させることで、通知と操作をつなげます。
対象情報が削除済み、期限切れ、権限不足などで表示できない可能性も考慮します。その場合は単純なエラー画面を出すのではなく、表示できない理由を説明し、関連一覧、履歴、問い合わせなど次に利用できる画面を案内します。
実装例:通知選択時の画面遷移
self.addEventListener("notificationclick", (event) => {
event.notification.close();
const destination =
event.notification.data?.url || "/notifications";
event.waitUntil(
clients.matchAll({
type: "window",
includeUncontrolled: true
}).then(async (clientList) => {
for (const client of clientList) {
if ("focus" in client) {
await client.navigate(destination);
return client.focus();
}
}
return clients.openWindow(destination);
})
);
});
8.5 通知を停止する方法を見つけやすくする
通知を有効にする案内だけが目立ち、停止方法が見つからない設計は、利用者の不信感につながります。PWA内の設定画面から、現在許可されている通知の種類と停止方法を確認できるようにします。
ブラウザや端末側の設定変更が必要な場合は、利用環境に応じた手順を案内します。ただし、端末の画面や設定名は更新によって変わることがあるため、古い画像や説明を放置しないよう定期的に確認します。停止した利用者へ何度も再許可を求めないことも重要です。
9. 入力画面とフォーム設計
会員登録、予約、注文、検索、問い合わせ、作業記録など、PWAでは入力操作が主要機能になることがあります。スマートフォンでの文字入力は負担が大きいため、項目数、キーボード、エラー表示、一時保存まで総合的に設計する必要があります。
9.1 入力項目を必要最小限にする
入力項目が増えるほど、完了までの時間が長くなり、途中で離脱する可能性が高くなります。サービス提供に本当に必要な情報と、後から取得できる情報を分け、最初の入力画面では必須項目を最小限にします。
任意項目を大量に並べても、利用者はどこまで入力すべきか判断できません。必要になった時点で追加情報を求める段階的な入力方法を使うと、最初の負担を抑えられます。利用目的が分かりにくい項目には、「配送状況の連絡に使用します」など、取得理由を短く説明します。
9.2 内容に合ったキーボードを表示する
電話番号、メールアドレス、数字、日付、URLなどに適した入力形式を指定すると、スマートフォンで必要な文字を入力しやすいキーボードが表示されます。利用者が記号や数字の画面へ何度も切り替える手間が減り、入力間違いも防ぎやすくなります。
氏名、住所、電話番号、メールアドレスなどは、自動入力に必要な属性を指定することで、端末に保存された情報を利用できます。ただし、機密性の高い情報や共有端末で利用される画面では、自動入力や端末保存が適切かを検討する必要があります。
実装例:入力形式と自動入力の指定
<form>
<label for="email">メールアドレス</label>
<input
id="email"
name="email"
type="email"
inputmode="email"
autocomplete="email"
required
>
<label for="tel">電話番号</label>
<input
id="tel"
name="tel"
type="tel"
inputmode="tel"
autocomplete="tel"
>
<button type="submit">入力内容を確認する</button>
</form>
9.3 エラーを対象項目の近くへ表示する
送信後に画面上部へ「入力内容に誤りがあります」とだけ表示しても、利用者はどの項目を直す必要があるか分かりません。対象となる入力欄の近くへ、問題の内容と修正方法を具体的に表示します。
「正しく入力してください」ではなく、「郵便番号は数字7桁で入力してください」など、期待する形式を明確にします。色だけでエラーを示さず、文章、記号、枠線を組み合わせます。送信時には最初のエラー項目へ移動させ、入力済みの内容は削除しないようにします。
9.4 送信中の二重操作を防止する
通信が遅い環境では、送信ボタンを押してもすぐに画面が変わらず、利用者が何度も押すことがあります。二重注文、重複予約、複数投稿などにつながる可能性があるため、送信開始後は同じ処理を繰り返せないようにします。
ボタンを無効にするだけでは、処理が始まったのか分かりにくいため、「送信しています」「予約を確認しています」などの状態を表示します。一定時間を超えた場合は、処理が続いているのか失敗したのかを確認し、再試行、入力内容の保存、問い合わせなどの選択肢を提示します。
9.5 入力途中の内容を一時保存する
長い入力画面では、別のアプリへ切り替える、電話を受ける、端末が休止する、誤って前の画面へ戻るなど、入力が中断される状況があります。再び画面を開いたときに内容がすべて消えていると、大きな負担になります。
端末内へ入力内容を一時保存し、戻ったときに復元できるようにします。ただし、共有端末で利用される可能性がある場合は、住所、本人確認情報、支払い情報などを残さない配慮が必要です。保存期間を設定し、利用者自身が下書きを削除できる画面も用意します。
10. アクセシビリティへの配慮
PWAはホーム画面へ追加され、日常的に利用される可能性があります。そのため、視覚、聴覚、身体操作、認知、利用環境などの違いにかかわらず、主要な情報と機能へアクセスできる設計が求められます。
10.1 意味に合ったHTML構造を使用する
見た目だけを整えるために、すべての要素を一般的な箱として作ると、読み上げ機能やキーボード操作で役割を理解しにくくなります。見出し、本文、ナビゲーション、ボタン、リンク、入力欄など、意味に合ったHTML要素を使用します。
押せる要素にはボタンまたはリンクを使い、通常の文章要素へ押下処理だけを追加する方法は避けます。標準要素は、キーボード操作、読み上げ、無効状態、選択状態などの仕組みを持っているため、独自にすべてを再現するより安定した操作を提供できます。
10.2 色だけで状態を表現しない
成功を緑、エラーを赤、選択中を青だけで表現すると、色の違いを判断しにくい利用者へ状態が伝わりません。文章、記号、アイコン、枠線、背景形状など、色以外の情報も組み合わせます。
例えば入力エラーでは、赤い枠線だけでなく、対象項目の近くへエラー文を表示します。選択中の項目では、背景色だけでなく、チェック記号や太字を加えます。画面を白黒で見た場合でも、主要な状態を区別できるか確認すると問題を発見しやすくなります。
10.3 文字と背景の読みやすさを確保する
薄い灰色の文字、細すぎる書体、画像の上へ直接置いた文章は、明るい屋外、暗い室内、低品質な画面などで読みにくくなります。本文、補助文、ボタン、入力欄、警告など、それぞれ十分な明暗差を確保します。
読みやすさは文字サイズだけで決まりません。一行の長さ、行間、段落間の余白、文字の太さも重要です。日本語の長文を画面いっぱいの幅で表示すると視線移動が大きくなるため、パソコン表示では本文幅を制限します。スマートフォンでは左右の余白を確保し、文字が画面端へ密着しないようにします。
10.4 動きを減らす設定を尊重する
大きな拡大縮小、背景移動、点滅、奥行きの強い画面遷移は、利用者によって不快感や体調不良の原因になる場合があります。端末側で動きを減らす設定が有効になっている場合は、不要な演出を停止または簡略化します。
動きを完全に削除すると、要素が追加されたことや画面が切り替わったことを理解しにくい場合があります。その場合は、短い透明度変化や即時切り替えに変更します。重要なのは演出を維持することではなく、利用者へ状態を安全かつ明確に伝えることです。
実装例:動きを減らす設定への対応
.card {
transition:
transform 180ms ease,
opacity 180ms ease;
}
.card.is-open {
transform: translateY(0);
opacity: 1;
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
10.5 キーボードと読み上げ機能で確認する
画面を見ながら指やマウスだけで検証すると、キーボード利用者や読み上げ機能の問題を見落とします。キーボードだけで主要な画面へ移動し、入力、送信、戻る、設定変更まで完了できるか確認します。
移動中の要素が視覚的に分かるか、順番が画面の流れと一致しているかも重要です。読み上げ機能では、見出し構造、ボタン名、画像説明、入力欄の名称、エラー文を確認します。「開く」「詳細」など同じ名称のボタンが複数ある場合は、「予約詳細を開く」のように対象を区別します。
11. PWAと一般的なWebサイト・ネイティブアプリの違い
PWA、一般的なWebサイト、ネイティブアプリは、提供方法、更新方法、端末機能との連携範囲が異なります。どれか一つが常に優れているわけではなく、サービスの目的、必要機能、利用頻度、運用体制によって適した形式が変わります。
11.1 利用開始までの流れが異なる
一般的なWebサイトは、URLを開くだけで利用でき、事前のインストールを必要としません。PWAも初回は同じように利用できますが、対応環境ではホーム画面へ追加し、独立した画面として繰り返し起動できます。
ネイティブアプリは、多くの場合、配信場所で検索し、詳細を確認し、端末へ取得する手順が必要です。利用開始までの操作は増えますが、端末機能との深い連携や、配信基盤を通じた管理を行いやすい特徴があります。PWAはWebからすぐ利用できる利点と、継続利用の入口を両立しやすい形式です。
| 比較項目 | PWA | 一般的なWebサイト | ネイティブアプリ |
|---|---|---|---|
| 利用開始 | URLから利用し、対応環境では追加できる | URLからすぐ利用できる | 配信場所から取得する |
| ホーム画面 | 対応環境で追加可能 | 近道として追加できる場合がある | インストール時に追加される |
| 更新方法 | Web側の更新を反映しやすい | Web側の更新を反映しやすい | 更新版の配信が必要な場合がある |
| オフライン利用 | 設計と実装により対応できる | 通常は限定的 | 端末内機能を持たせやすい |
| 端末機能との連携 | 環境によって範囲が異なる | 比較的限定される | 幅広く連携しやすい |
| 検索からの流入 | 得やすい | 得やすい | 紹介ページなどが必要 |
| 開発と運用 | Web技術を共通利用しやすい | Web技術で運用しやすい | 環境別対応が必要な場合がある |
11.2 更新方法と更新時期が異なる
一般的なWebサイトとPWAは、サーバー側の内容を変更することで、新しい画面や情報を提供しやすい特徴があります。しかし、PWAでは端末へ保存された古いファイルが残る場合があり、更新方法を誤ると新旧の処理が混在する可能性があります。
ネイティブアプリでは、更新版を配信しても、利用者が更新するまで古い版が使われることがあります。PWAも自動的にすべてを切り替えればよいわけではなく、入力途中や作業途中の画面を突然更新すると内容を失う危険があります。更新を適用する時期と案内方法を設計する必要があります。
11.3 オフライン対応の範囲が異なる
一般的なWebサイトは、通信が切れると新しいページやデータを取得できず、ブラウザ標準のエラーが表示されることが多くなります。PWAでは、あらかじめ保存した画面や情報を表示し、入力内容や未送信操作を端末内へ保持できます。
ネイティブアプリは端末内に多くの処理を持たせやすい一方、最新情報や会員情報を取得する機能では通信が必要になります。どの形式であっても完全に通信不要になるわけではありません。オフライン時に何ができ、何ができないかを利用者へ明確に伝えることが重要です。
11.4 端末機能との連携範囲が異なる
PWAでも、通知、位置情報、カメラ、共有、端末への保存などを利用できる場合があります。しかし、機能の対応状況は端末やブラウザによって異なり、すべての利用環境で同じ動作を保証できるとは限りません。
ネイティブアプリは、端末機能や周辺機器と深く連携しやすい一方、環境別の開発、審査、保守が必要になる場合があります。サービスの主要目的が特定の端末機能へ強く依存する場合は、PWAだけで十分かを事前に検証する必要があります。
11.5 適しているサービスの種類が異なる
PWAは、情報閲覧、予約、注文、会員向け機能、作業記録、ニュース、教育、社内業務など、Webからすぐ利用してもらいながら再訪も促したいサービスに適しています。URLを共有しやすく、検索からの流入を維持できる点も大きな利点です。
高度な画像編集、大容量処理、常時動作、複雑な機器連携などが主要機能になる場合は、ネイティブアプリが適していることがあります。形式を先に決めるのではなく、必要な機能、対象利用者、利用環境、運用費用を整理し、目的を達成できる手段を選びます。
12. ブランド表現と視覚設計
PWAは、ブラウザ、ホーム画面、起動画面、通知、端末のアプリ一覧など、さまざまな場所へ表示されます。どこから見ても同じサービスであると認識できるように、名称、アイコン、色、文章表現を統一する必要があります。
12.1 小さく表示されても識別できるアイコンにする
ホーム画面のアイコンは、端末によって丸形、角丸、四角形などに切り抜かれます。細かい文字や複雑な図形を入れると、小さく表示されたときに内容を判別できず、他のアイコンに埋もれてしまいます。
主要な図形を中央へ置き、周囲には十分な余白を確保します。背景と図形の明暗差を大きくし、明るい壁紙や暗い壁紙の上でも見つけやすくします。正式なロゴをそのまま縮小するのではなく、ホーム画面用に単純化した図形を用意することも有効です。
12.2 起動画面と最初の画面を自然につなげる
ホーム画面からPWAを起動すると、実際の内容が準備されるまで背景色やアイコンが表示される場合があります。この起動画面と最初の画面の色や構成が大きく異なると、急に別の画面へ切り替わったように見えます。
Webアプリマニフェストの背景色と、最初に表示する画面の背景色を合わせます。起動直後に必要な見出しや骨組みを早く表示し、長い動画や複雑な演出によって操作開始を遅らせないようにします。起動演出よりも、利用者が目的の機能へ早く進めることを優先します。
12.3 色の意味を画面全体で統一する
主要操作、補助操作、警告、成功、選択中などに使用する色を決め、画面ごとに意味が変わらないようにします。同じ色が、ある画面では送信、別の画面では削除を示すと、利用者は操作結果を予測しにくくなります。
ブランド色をすべての要素へ使用すると、重要な操作と装飾の区別がつきにくくなります。ブランド色は主要操作や現在位置など重要な場所へ集中して使用し、背景、区切り線、補助情報には落ち着いた色を使います。色だけに頼らず、形状や文章でも意味を伝えます。
12.4 日本語を長時間読んでも疲れにくくする
日本語は、漢字、ひらがな、カタカナ、数字、英字が混在するため、細すぎる書体や狭い行間では読みにくくなります。本文、見出し、補助文、ボタンなどの役割に応じて、文字の大きさ、太さ、行間を調整します。
装飾的な書体はロゴや短い見出しに限定し、長文には読みやすい書体を使用します。外部から書体データを読み込む場合は、種類や太さを増やしすぎると表示速度へ影響します。必要な文字の種類と太さだけに絞り、読み込み失敗時にも読める代替書体を指定します。
12.5 文章表現と操作名称を統一する
同じ処理に対して「保存」「登録」「確定」「完了」など複数の言葉を使うと、利用者は操作結果の違いを判断できません。画面全体で用語を整理し、同じ処理には同じ言葉を使用します。
技術用語や英語表現をそのまま表示するのではなく、利用者が理解しやすい日本語へ置き換えます。専門的な名称を示す必要がある場合は、先に日本語で意味を説明し、その後に補足として名称を添えます。短さだけを優先せず、押した後に何が起きるか分かる文章にします。
13. 信頼性と安全性を伝える画面
PWAでは、ログイン情報、位置情報、通知、カメラ、支払い、個人情報などを扱う場面があります。安全な通信や保存方法を実装するだけでなく、利用者が何を許可し、何が保存され、どの処理が完了したかを画面上で理解できるようにする必要があります。
13.1 権限を求める理由を事前に説明する
位置情報やカメラの許可画面が突然表示されると、利用者は何に使われるのか分からず、拒否する可能性があります。許可を求める直前に、利用目的と得られる利点を簡潔に説明します。
位置情報なら「現在地周辺の店舗を表示するため」、カメラなら「書類を撮影して入力を省略するため」など、具体的に伝えます。許可しなくても手動入力や地域選択で利用できる場合は、その代替方法も示します。拒否した利用者へ同じ許可画面を繰り返し表示しない配慮も必要です。
13.2 端末保存と送信完了を区別する
利用者が入力した内容を端末へ一時保存した状態と、サーバーへ送信して正式に受理された状態は異なります。どちらにも「保存しました」と表示すると、利用者は申請や予約が完了したと誤解する可能性があります。
「この端末に一時保存しました」「送信待ちです」「送信が完了しました」「確認処理中です」など、実際の状態に合った表現を使用します。通信が不安定でも、利用者が現在の処理状況を確認できるようにし、未送信内容がある場合は画面上の分かりやすい場所へ表示します。
13.3 重要操作には確認または取り消し手段を用意する
削除、注文確定、予約取消、公開、支払いなど、結果が大きい操作には慎重な設計が必要です。ただし、すべての小さな操作に確認画面を表示すると、利用者は内容を読まずに進む習慣がつき、重要な確認まで見落とす可能性があります。
取り消し可能な操作は、実行後に短時間だけ元へ戻せる方法が適している場合があります。取り消せない処理では、対象、日時、金額、公開範囲などを具体的に表示し、ボタン名も「確定」ではなく「予約を取り消す」のように結果を明示します。
13.4 更新が必要な理由と影響を説明する
PWAの新しい版が利用可能になった場合、突然画面を再読み込みすると、入力途中の内容や閲覧位置が失われる可能性があります。新しい版があることを知らせ、作業完了後に更新できる選択肢を提供します。
安全上の理由で早急な更新が必要な場合は、その理由と、更新後に何が起こるかを説明します。可能であれば入力内容を一時保存し、更新後に復元します。「更新してください」とだけ表示するのではなく、利用者が判断できる情報を提供することが重要です。
13.5 個人情報を画面や通知へ出しすぎない
ホーム画面から直接起動できるPWAは、端末を家族や同僚が一時的に操作する状況も考慮する必要があります。起動直後の画面や通知に、氏名、住所、残高、予約内容などを大きく表示すると、意図せず他人に見られる可能性があります。
重要情報は認証後に表示する、一定時間操作がない場合は再確認を求める、通知内容を簡略化するなどの対策を行います。利用者自身が通知内容の詳しさや、最初の画面に表示する情報を選べる設定も有効です。
14. 実装と検証の進め方
PWA向けの設計を実際のサービスへ反映するには、設計者と開発者が早い段階から連携する必要があります。通常画面を完成させた後にオフライン対応やインストール機能を追加すると、状態画面や保存方法が全体構造と合わなくなる場合があります。
14.1 対応する利用場面を最初に決める
オンライン、低速通信、オフライン、初回訪問、再訪、通知からの起動、ホーム画面からの起動など、主要な利用場面を最初に整理します。すべての画面と機能を完全にオフライン対応させようとすると、必要性の低い実装に時間を使う可能性があります。
利用頻度と影響度を基準に優先順位を決めます。予約確認はオフラインでも必要だが、新規予約はオンライン限定にする、保存記事は閲覧できるが新しい検索はできないなど、機能ごとに現実的な範囲を設定します。
14.2 通常時以外の状態画面も設計する
通常表示だけでなく、読み込み中、内容なし、エラー、オフライン、送信待ち、権限拒否、更新可能などの状態を設計します。これらを後回しにすると、実装時に短い警告文やブラウザ標準画面だけで済まされることがあります。
各状態では、何が起きたか、入力内容や保存情報が残っているか、次に何ができるかを示します。単なるエラー番号ではなく、再試行、戻る、保存済み情報を見る、設定を確認するなど、利用者が選べる行動を用意します。
14.3 サービスワーカーの更新を安全に管理する
サービスワーカーは、保存資源や通信処理を制御する重要な仕組みです。更新方法を誤ると、古い画面と新しい処理が組み合わされ、ボタンが動かない、表示内容が一致しないなどの問題が起こる場合があります。
保存領域の名称へ版を付け、不要になった古い資源を削除します。ただし、新しいサービスワーカーを強制的に有効化し、作業中の画面を突然切り替えることは避けます。更新可能であることを利用者へ伝え、安全なタイミングで切り替えます。
実装例:古い保存領域の削除
const CURRENT_CACHE = "pwa-design-guide-v3";
const ALLOWED_CACHES = [CURRENT_CACHE];
self.addEventListener("activate", (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.map((cacheName) => {
if (!ALLOWED_CACHES.includes(cacheName)) {
return caches.delete(cacheName);
}
return Promise.resolve();
})
);
})
);
});
14.4 実機と複数の通信条件で確認する
開発用パソコンの高速通信だけで確認すると、実際の利用環境で発生する遅延、切断、表示崩れを見つけられません。低速通信、通信切断、再接続、端末回転、文字拡大、背景からの復帰などを組み合わせて確認します。
ブラウザ内から開いた場合と、ホーム画面から独立表示で開いた場合も分けて確認します。通知、インストール、全画面表示、端末の戻る操作などは、模擬環境だけでは正確に判断しにくいため、対象となる実端末で検証します。
| 確認場面 | 主な確認内容 | 問題がある場合の対応 |
|---|---|---|
| 初回訪問 | 初期表示、説明、主要操作 | 初期資源と情報量を見直す |
| 再訪 | 保存内容、更新日時、起動速度 | 古い情報の表示方法を改善する |
| 低速通信 | 読み込み表示、操作反応 | 優先表示と処理中表示を追加する |
| オフライン | 保存情報、案内画面 | 利用可能な機能を明示する |
| 再接続 | 未送信内容、同期結果 | 成功と失敗を項目別に表示する |
| ホーム画面起動 | 表示領域、戻る操作 | 独立表示時の移動方法を整える |
| 文字拡大 | はみ出し、ボタンの重なり | 固定高さと省略表示を見直す |
| 端末回転 | 固定要素、横幅、余白 | 横向き用の配置を調整する |
14.5 自動検査と人による確認を組み合わせる
表示速度、HTML構造、アクセシビリティなどは、自動検査によって多くの問題を発見できます。画像の大きさ、明暗差、見出し構造、読み込み資源など、技術的な不足を効率的に確認できます。
しかし、自動検査の数値が良くても、案内文が理解しにくい、操作の順番が不自然、インストール案内が邪魔といった問題は残ります。実際の利用者に近い人へ操作してもらい、どこで迷ったか、何を期待したか、どの表示を見落としたかを観察します。数値と利用行動の両方を使って改善します。
15. 公開後の改善と運用
PWAは公開した時点で完成するものではありません。端末やブラウザの更新、利用者の行動変化、新機能の追加によって、以前は問題なかった設計が使いにくくなる場合があります。公開後も継続的な確認と改善が必要です。
15.1 利用者の行動を目的別に確認する
閲覧数や訪問者数だけでは、PWAが使いやすいかを判断できません。インストール案内の表示数、案内後の操作、主要画面への到達率、入力途中の離脱、オフライン画面の発生、再接続後の同期結果など、改善目的に合った行動を確認します。
計測項目を増やしすぎると、数値を集めること自体が目的になり、判断が難しくなります。サービスの目的に直結する指標を選び、改善施策ごとに何を見るかを決めます。個人情報や入力内容を必要以上に記録しない配慮も重要です。
15.2 インストール率だけを成果にしない
インストール率が高くても、追加後に一度も起動されなければ継続的な価値は生まれていません。ホーム画面からの起動率、翌日以降の再訪率、主要機能の利用率、通知解除率なども合わせて確認します。
インストール案内を強く表示すると、一時的に追加数が増える可能性があります。しかし、拒否、離脱、案内の閉鎖も増える場合があります。利用価値を理解した後に案内した場合と比較し、長期的な利用につながっているかを評価します。
15.3 オフライン利用の失敗を分析する
オフライン画面が表示された回数だけでなく、その後に利用者がどの操作を選んだかを確認します。再試行したのか、保存済み情報を見たのか、そのまま離脱したのかによって、案内画面が役立っているかを判断できます。
未送信データの同期失敗が発生した場合は、通信状態、処理の種類、PWAの版など、再現に必要な情報を記録します。ただし、入力内容そのものや個人情報を記録しすぎないようにします。失敗が多い操作は、自動再試行だけでなく、保存方法や送信単位の見直しも必要です。
15.4 小さな変更を段階的に検証する
案内文、ボタン名、表示位置、色、表示時期などを同時に変更すると、どの変更が結果へ影響したか判断しにくくなります。改善内容を小さく分け、変更前後の行動を比較します。
数値だけでなく、問い合わせ内容、利用者の意見、操作観察も確認します。操作完了率が上がっていても、利用者が意味を誤解したまま完了している可能性があります。量的なデータと質的な意見を組み合わせ、表面的な数値だけで判断しないことが重要です。
15.5 端末とブラウザの変化を定期的に確認する
PWAで利用できる機能、インストール手順、権限設定、通知表示などは、端末やブラウザの更新によって変化する場合があります。以前作成した案内画像や説明文が、現在の画面と一致しなくなる可能性があります。
主要な端末とブラウザを定期的に確認し、ホーム画面への追加、通知、権限、独立表示、オフライン動作を検証します。特定環境からの問い合わせが増えた場合は、利用者側の操作ミスと判断せず、実機で再現確認を行います。運用手順に定期確認を組み込むことで、長期的な品質を維持できます。
おわりに
PWA向けデザインで最も重要なのは、アプリのような外観を再現することではありません。通信状態、起動方法、端末、ブラウザが変化しても、利用者が現在の状態を理解し、目的の操作を続けられるようにすることが本質です。インストール、通知、オフライン、同期などの機能も、実装できるから追加するのではなく、利用者に明確な利点がある場面で提供する必要があります。
また、PWAの品質は通常のオンライン状態だけでは判断できません。低速通信、通信切断、再接続、端末回転、文字拡大、ホーム画面からの起動、通知からの直接移動など、実際に起こり得る条件を組み合わせて確認することで、利用環境の変化に強いサービスになります。通常画面だけでなく、読み込み中、エラー、内容なし、送信待ちなどの状態も、正式な画面として設計することが重要です。
最初からすべての機能を完全に実装する必要はありません。利用者にとって重要な場面から優先的に対応し、公開後の行動データ、問い合わせ、操作観察をもとに改善を続けることで、使いやすく信頼されるPWAへ成長させられます。PWA向けデザインガイドを制作時の確認項目として活用し、表示速度、操作性、アクセシビリティ、安全性を一つずつ高めていくことが、長期的な継続利用につながります。
EN
JP
KR