PWAの壁にぶつかった — バックグラウンドでGPS記録ができず、走行記録アプリとして使えなかった【開発記 #3】
ツーリング記録アプリを作る個人開発の連載、第3話です。第2話では、費用ゼロで始められるPWAファーストを選んだ話を書きました。今回は、その先で待っていた——正直、いちばんつらかった——PWAの壁の話です。
表示は作れた。でも「肝心の機能」が動かなかった
PWAで開発を進め、画面や表示まわりはテストできました。地図を出す、UIを操作する、といった部分は形になっていきます。「お、いけるかも」と思っていました。
ところが、このアプリの一番大事な機能——走行記録を取り続けること——が、どうしても安定して動かなかったのです。
壁:バックグラウンドでGPSが記録できない
問題はこうでした。
- バックグラウンドでGPSの記録ができない。常にアプリを前面に出しておかないとダメ
- 画面が消えると、記録が止まる
ツーリング記録アプリなのに、走っている間ずっとスマホの画面を点けて、アプリを前面に出し続けないと記録が取れない。これでは使い物になりません。
実際のツーリングを思い浮かべてください。スマホはポケットやマウントに入れて、画面は消えている。その状態で何時間も走る。その間ずっとルートを記録し続けてくれないと、走行記録アプリとして意味がないわけです。画面を点けっぱなしにするなんて、バッテリー的にも現実的ではありません。
「表示は試験できたのに、1番の走行記録を記録し続けることができなかった」——これが、PWAでぶつかった最大の壁でした。
なぜPWAではこうなるのか
これはPWA、というよりモバイルブラウザの仕様上の制約です。バッテリーやプライバシー保護の観点から、ブラウザはアプリが前面にない・画面が消えた状態での位置情報の継続取得を強く制限します。とくにiOSではこの制約が厳しく、「走り続けたルートを連続で記録する」用途とは相性が悪いのです。
第2話で「費用ゼロで始められるPWAは正解だった」と書きました。それは間違いではありません。スタートを切るには最高でした。でも、このアプリのコア機能に関しては、PWAには越えられない一線があった。理想(ネイティブ)を一旦手放して安く始めた判断の、その代償がここで来た、という感じです。
正直、ここが一番きつかった
UIが動いていただけに、「あとは記録機能だけ」と思っていたところでこれです。アプリの存在理由そのものが成立しないかもしれない、という壁。テストしながら「これ、PWAじゃ無理なのでは……」と気づいていく過程は、正直いちばん心が折れかけたところでした。
ただ、ここで分かったことには大きな価値がありました。「安く早く始める」と「コア機能が本当に動く」は別問題だということ。PWAファーストは第一歩としては正しくても、アプリの種類によっては、どこかでネイティブの力が必要になる。それを身をもって理解できました。
次回:壁をどう乗り越えたか
結論から言うと、ここでPWAだけの道は諦め、ネイティブ側の仕組みに頼ることになります。バックグラウンドでも位置情報を記録し続けられるようにするための移行——次回・第4話で、その判断と実際の進め方を書きます。
「安く始めた個人開発が、コア機能の壁にぶつかって方針転換する」。まさにリアルな開発の山場でした。続けて記録していきます。
※ 本記事は当方の実体験に基づく個人開発の記録です。ブラウザの挙動や制約は時期・端末・OSにより異なります。