家計簿アプリを作る #71:PWA対応(ホーム画面への追加)

家計簿アプリ作成シリーズの第71回です。家計簿アプリをスマートフォンのホーム画面に追加して、ネイティブアプリのように起動できるようにします。PWA(Progressive Web App)の基本的な対応です。

manifest.jsonの作成

static/manifest.json に、アプリ名・アイコン・テーマカラー・表示モードを定義しました。

{
  "name": "家計簿アプリ",
  "short_name": "家計簿",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#1c64f2",
  "icons": [
    { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
  ]
}

display: "standalone" を指定することで、ホーム画面から起動した際にブラウザのアドレスバーなどのUIが表示されず、アプリらしい見た目になります。

ハマりポイント:引用符の重複でmanifestが読み込まれない

app.html<link rel="manifest"> を追加した際、引用符の書き方を誤ってしまいました。

<!-- ❌ 引用符が二重になって壊れている -->
<link rel=""manifest" href=""/manifest.json" />
<!-- ✅ 正しい形 -->
<link rel="manifest" href="/manifest.json" />

rel=""manifest" のように余計な " が入り込むと、ブラウザはこの属性を正しく解釈できず、manifestが読み込まれません。単純な入力ミスでしたが、見た目上気づきにくいタイプの間違いでした。

iOS Safari向けの個別対応が必要

manifest.json はAndroid Chromeなど多くのブラウザで機能しますが、iOS Safariでは対応が限定的で、いくつかの見た目の要素はApple独自のメタタグで別途指定する必要がありました。

<!-- ホーム画面追加時のアイコン -->
<link rel="apple-touch-icon" href="/icon-192.png" />

<!-- ホーム画面から起動時にブラウザUIを消す -->
<meta name="apple-mobile-web-app-capable" content="yes" />

<!-- ステータスバーの見た目 -->
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />

<!-- ホーム画面に表示されるアプリ名 -->
<meta name="apple-mobile-web-app-title" content="家計簿" />

apple-mobile-web-app-capable を指定しないと、iOSではホーム画面から開いてもSafariのUIが表示されたままになってしまいます。

デスクトップChromeでの動作確認

localhost はセキュアなコンテキストとして扱われるため、開発環境のままでもインストール確認ができました。Chrome DevToolsの「Application」タブ→「Manifest」パネルで、manifestが正しくパースされているか、エラーが無いかを確認できます。

screenshots フィールドが無いという警告が出ましたが、これはより見栄えの良いインストールUIのための任意項目で、インストール自体はできるため無視して問題ありませんでした。

アドレスバーのインストールアイコンからインストールすると、独立したウィンドウ(ブラウザのUI無し)でアプリが起動することを確認できました。

実機での確認はデプロイ後のHTTPS環境で

iOS Safariは開発中のhttp://localhostやローカルネットワークのURLに対してPWA機能を正しく扱わないことが多いため、実機での最終確認はCloudflare Pagesへのデプロイ後、本番のHTTPS URLで行いました。「共有」ボタン→「ホーム画面に追加」で、アプリらしく起動することを確認できました。

まとめ

ポイント 内容
manifest.json アプリ名・アイコン・display: standaloneなどを定義する
HTMLの構文ミス <link>タグの引用符の重複は見た目上気づきにくいので注意
iOS Safariの個別対応 apple-mobile-web-app-capableなどのメタタグが別途必要
デスクトップでの確認 localhostはセキュアなコンテキスト扱いなので開発環境でも検証できる
実機での確認 iOSは本番のHTTPS環境で確認するのが確実
← トップページに戻る