本文へスキップ

STORY · YORIRUN

位置情報を送らないつもりだった。地図SDKが既定で送っていた

NEW石井和秀 · ClearDrop · 8 min readSHARE

YORIRUNの配信手続きでプライバシー申告と実装を突き合わせたところ、地図SDKのテレメトリが既定で有効でした。何を見落とし、どう切り、申告をどう直したかを書きます。

地形模型のピンから、光の粒が雲の形へ流れ出していく。「地図SDKの意外な通信」の文字
この記事の目次

YORIRUNを配信する手続きに入り、プライバシー申告と実装を1項目ずつ突き合わせました。そこで、自分では書いていない経路から、正確な位置情報が分析目的で出ていたことが分かりました。地図SDKのテレメトリが既定で有効だったためです。何を見落とし、どう切り、申告をどう直したかを書きます。 気づいたのは部品側の申告を読んだときでした。自分のコードには、送る処理を一行も書いていません。切り方と、申告を実態のほうへ合わせた判断を書きます。

申告を書く段になって、方針と実装が噛み合っていないと気づいた

YORIRUNは、走りたい距離や時間から周回コースを探すアプリです。コースを作るときには出発地点と条件をサーバーへ送ります。そこは設計として決めたことなので、送る先も、何に使うかも説明できます。

一方で私は「分析のログに位置情報は入れていない」とも考えていました。アプリの中に分析SDKを入れていないからです。ところが配信の手続きでプライバシー申告のファイルを見直したところ、この前提のほうが成り立っていませんでした。

地図の描画に使っている Mapbox Maps SDK は、テレメトリが既定で有効でした。SDKが起動時に指標送信の既定値を有効として登録し、SDK自身が同梱しているプライバシー申告にも、正確な位置情報を分析の目的で収集すると書かれていました。2026年9月17日時点で私が確認した版での話です。

つまり、コース生成で私が送っている出発地点とはまったく別の経路で、こちらのログやデータベースとは無関係に位置情報が出ていました。アプリ側にそれを切る記述は1行もありませんでした。

隠されていたわけではありません。SDKの申告にも、地図上のⓘメニューにも書いてあります。読みに行かなかったのは私です。

「入れていない」と「出ていない」は別のことだった

私が確認していたのは「自分が書いた行」でした。分析SDKを追加していない、ログに座標を積んでいない、データベースに座標の列を作っていない。どれも事実です。

しかし利用者から見れば、端末から外へ何が出ていくかがすべてです。自分が書いていない依存先の既定値も、アプリの挙動に含まれます。依存しているものの既定値は、自分で決めたことと同じ重さで説明する責任がある、というのが今回いちばん効いた気づきでした。

同じ問題は、位置情報に限りません。課金、クラッシュ収集、画像読み込みなど、入れた覚えのある部品のほうが多いはずです。私の場合は地図でしたが、探す場所は「自分が書いた行」の外側でした。

それ以来、依存先を足したときに見る場所を決めました。名前で当たりをつけるのではなく、部品が自分で何を申告しているかを読むところから始めます。

  • 部品が同梱しているプライバシー申告を開き、収集すると書かれた種類と目的を読む
  • 既定で有効になっている送信があるか、部品のコードとドキュメントの両方で確かめる
  • 切る手段があるか、切ったあと利用者が自分で戻せるかを調べる
  • 版を上げたときは同じ確認をやり直す

読む側の立場でも同じことが言えます。何が外へ出ているかは、アプリの説明文ではなくプライバシーポリシーとストアの申告に書かれています。どこを見ればよいかはアプリのプライバシーポリシーはどこを見る?探す五つの項目に整理しました。

切り方を間違えると、利用者の選択まで奪ってしまう

対処は、起動時に既定を無効へ倒すことにしました。地図が1つも作られる前、データの入れ物を用意するより先に置いています。順番を後ろにすると、最初の地図が作られる瞬間に間に合いません。

ここで気をつけたのは、利用者の選択を奪わないことです。地図のⓘメニューには Mapbox 自身の切り替えがあり、利用者が自分でONに戻すこともできます。もし起動のたびにこちらから切り戻していたら、アプリが利用者の決定を毎回打ち消すことになります。

そのため、既定値を登録する書き方ではなく、値を直接書き込む書き方を選びました。既定値どうしで上書きし合う形だと、SDKとこちらのどちらが先に走るかで結果が変わります。起動のたびに違う挙動になるものを、プライバシーの約束の土台にはできません。

  • 地図が作られる前に切る
  • 利用者が自分でONに戻したら、それは尊重する
  • 既定値の登録合戦にせず、実際の値として書き込む
  • 新規インストールと、ONに戻したあとの両方を実機で確かめる

テストのほうが、私の思い違いを先に捕まえた

最初に書いたテストは通りませんでした。「利用者が自分で決めたかどうか」を調べるつもりで、保存された値をそのまま読む書き方をしていたためです。

この読み方は、SDKが登録した既定値まで一緒に拾います。結果として、SDKが登録した有効という値を「利用者が自分でONにした」と読んでしまい、切るべき場面で切らなくなります。利用者が実際に書き込んだ値だけを見る形へ直しました。

このときは実機でも確かめました。新規インストールで無効が書かれること、利用者がONに戻したあとは起動しても切り戻さないこと。設定ファイルの中身まで開いて見ています。テストが思い違いを捕まえた例としては、テストは全部通った。それでもアプリの公開後に6つ問題が出たの逆のパターンでした。

申告は、推測ではなく実態のほうへ合わせた

テレメトリを切ったうえで、プライバシー申告も書き直しました。それまで収集するデータの種類は空でしたが、実際には正確な位置情報のほか、利用者の識別子、購入、メールアドレスが外へ出ています。認証と課金の仕組みを使っている以上、これらは出ていきます。

一方で、走った軌跡そのものは端末の外へ出ません。ここは申告に入れませんでした。どこまでを収集と呼ぶかは、機能の説明ではなく、実際にどのテーブルへ何を保存しているかで決めています。判断の根拠はアプリ側のリポジトリに文書として残しました。

同梱している部品も全部数え直しました。申告が本当に通るかは、実際に1本アップロードして警告が返るかどうかでしか分かりません。だから審査へ出す前にやりました。データをどこへ置くかという判断そのものは、会話をサーバーに置かないと決めた。Resuruのデータ設計と機種変更でも同じ考え方で書いています。

同じ手続きの中で、もう一度「見えないまま通る」に遭った

審査へ出したあと、提出の中身をあらためて機械的に数えました。すると、審査に含まれていたのはアプリの版だけで、購入まわりの商品が一緒に入っていませんでした。そのまま承認されていたら、アプリは公開されるのに加入できない状態になっていたはずです。

厄介なのは、押した本人からは何も見えないことです。提出の完了画面は普通に出ますし、版の状態も審査待ちになります。ストア側も注意は出していたのですが、下書きの画面を開かないと読めない場所にありました。

このときは版を審査から一度外し、商品と版をまとめて入れ直して出し直しています。直せたので実害はありませんでしたが、気づけた理由はテレメトリのときとまったく同じでした。完了したという表示を信じず、中身を数えたからです。

そこで、提出の中身を数える手順も記録として残しました。次に同じ作業をするとき、私は必ず忘れているからです。失敗をそのつど手順へ変える考え方は、個人開発で失敗を記録する六項目。却下と障害から残した形式にまとめています。

完了画面は「操作が終わった」ことしか保証しません。意図したものが入っているかは、別に確かめる必要があります。

公開前に気づけたのは、期限を切って突き合わせたから

この見落としを見つけられたのは、能力ではなく手順のおかげです。配信の手続きの中に「申告と実装を1項目ずつ突き合わせる」という工程を置いていたので、そこで引っかかりました。置いていなければ、そのまま出していたはずです。

位置情報を扱うアプリでは、外へ出す範囲と、画面で見せる範囲の両方が約束になります。見せる側の判断は位置情報アプリなのに、正確な現在地を見せないことにした理由にまとめました。走ったルートを人に見せるときの注意は走ったルートをSNSで共有する前に確認したい四つの項目と隠し方にあります。

プライバシーポリシーは、書いた時点の実装に対する説明でしかありません。依存先を足したとき、依存先の版を上げたときには、また噛み合わなくなります。だからこれは一度やって終わる作業ではなく、出すたびに通す工程として残しました。

公開したあとのほうが、この作業は難しくなります。使っている人がいる状態では、直すまでのあいだも実態と説明が食い違ったままになるからです。今回は出す前だったので、申告を直してから並べられました。次に地図の部品の版を上げるときには、同じ突き合わせをもう一度やります。

ひとりで作っていると、実装も説明も同じ人間が書きます。だから食い違いに気づける人が私しかいません。その前提で手順を先に決めておくことが、私にとっては唯一の歯止めになっています。

YORIRUN公開中YORIRUN距離や時間から周回コースを探して、走った道を記録するiPhoneアプリ。

JOURNAL

KEEP READING
  1. 朝の公園のベンチで、ランニングシューズの紐を結ぶ手元。「はじめてのランニング」の文字PRODUCTYORIRUNランニング初心者が最初に決める三つ。距離ではなく時間からランニング初心者が距離や速さを追いすぎず、時間・頻度・休む基準の三つを決めて始める方法。続かないときに疑う場所と、最初の一週間の形もまとめます。2026.09.16 · 10 min read
  2. 公園の広い歩道の交差点。歩行者信号と川が見え、走る人を後ろから。「走る道、どう選ぶ?」の文字PRODUCTYORIRUNランニングコースの決め方。地図で見る六つと現地で直す三つ走りやすいコースを決めるために地図で見る六つの項目と、往復・周回・片道の使い分け。走ってから直す手順と、地図では分からないこともまとめます。2026.09.16 · 10 min read
  3. 夜明けの川沿いの街を、小さく写る走る人が進んでいく。「知らない街を、走ろう。」の文字PRODUCTYORIRUN知らない街で走るコースを探す方法。起点の選び方と四つの候補出張や旅行先で走るとき、迷わず戻れる起点の選び方と、公園・川沿い・大通り・宿からの往復という四つの候補。走る前に地図で見る項目もまとめます。2026.09.16 · 10 min read
Journalへ戻る