Googleのタイムラインが改悪されたので自分用ライフログ収集システム作った(iPhone ショートカット)
iPhoneのショートカット機能・オートメーション機能を使うことで、Googleマップタイムライン機能相当のライフログ機能+α を実現できることがわかったのでその方法についての記録をする。
- Googleにまた裏切られた
- iPhoneのショートカット機能でできること
- サーバーに情報を送ってみる
- 位置情報警告との戦い
- 常に実行できるのか?
- ライフログとってみた結果
- 位置情報以外に取得してみたもの
- レシピ全体(6/13現在)
- ショートカット作成上のバグなど
Googleにまた裏切られた
ご存知の通りGoogleマップのタイムライン(移動・滞在履歴記録の閲覧機能)が改悪されて、原則PCでは閲覧できなくなった。モバイル端末のアプリ内で保存・閲覧し、バックアップは一応クラウドにできる。
生きた証として・記憶の補助として、XのポストとGoogleに捧げた位置情報(その代償として賜るタイムライン機能)は将来的に残り続けてほしいものと考えているが、このように今後も改悪の可能性があるということで、非常に残念なことだが対応が必要である。
iPhoneのショートカット機能でできること
Apple公式で提供されているAPIを組み合わせてノーコードプログラミングができるというもので、普段から次のような”レシピ”を作って活用している。
「QRコードの内容を読み取って表示」「クリップボードの履歴を保存・読み出し」「テザリング電波発砲」「デュアルSIMの切り替え」「画像の縮小」など
連携可能なサードパーティアプリがあればさらに追加機能を組み合わせることができる。
サーバーに情報を送ってみる
「現在地を取得」で端末の位置情報を取得する。”位置情報型変数”という形式で取得できる。結構扱いづらい。「テキストを取得」というアクションでその住所を文字列化して扱ったり、「緯度」「経度」をそれぞれ文字列として抽出して利用する。
他の情報も含めて、変数に格納していく。
「URLの内容を取得」によって、サーバURLへのGETアクションを実行する。送りたい情報は簡易的にURLパラメタとして付与して送信する。URLベースを用意しておき置換する。
より正しい方法は、「SSH経由でスクリプトを実行」という機能を使うことかもしれない。
位置情報警告との戦い
位置情報を外部送信するショートカットを実行してみると、アプリとしての位置情報利用権限とは別にOSが位置情報利用に関する警告をしつこくしてくる。ショートカットを更新するたびに「常に許可」を何度か押下する必要がある。iOSのセキュリティが強すぎると情報送信ができなくなるし、その仕様はブラックボックスなので不安になる。この警告が起動していないタイミングに出てしまうとショートカットの実行が中止されてしまう。
何度も許可を繰り返していると静かになり、バックグラウンドでの実行も可能になっていく。
常に実行できるのか?
1分単位で実行してログをとることとした。具体的には毎正時にこのショートカットを実行し、実行後に1分待機+60回ループを行うことで、ほぼ毎分実行できることとしている。
はたしていつまでもバックグラウンドでこれを実行できるのか?最長実行時間の制限があるのでは?などの不安があった。
結論をいうと、「スリープしている時にはショートカットの実行が止まる」が、
音楽を再生していたり癖で電源ボタンを押したりしていると起動している扱いになるので、スマホを持って移動していたりする時間は問題なく動作するから、概ねライフログの機能は果たしてくれる。
ライフログとってみた結果
1分おきで概ね経路が把握できる、Googleより高精度のログを取得することができた。すばらしい!!!!!
サーバー側の機能
送信さえできていればあとはサーバー側の実装はなんとでもなる。今はとりあえず受信したものを適当にテキストファイルに保存しているが、溜まってしまうので別の形式にしたい。
とりいそぎPHPで表示サイトを作成、Leafletで地図化&テーブルで表示、どの日時範囲を表示するかのコントロールを設置した。
位置情報以外に取得してみたもの
技術的な興味を中心に、可能な限り端末からの情報を収集していく。
現在取得している情報
- 位置情報(緯度・経度・住所)
位置情報は設定時に精度を決めることができるが、最も正確なものにしてもセキュリティ的に変わらなかったのでそうしている。ただし実行時間が10秒程度かかるので、スピードを求める場合は精度を下げると良い。
グローバルIPアドレスの収集が趣味なので、これで収集活動を自動化したい。
- 接続中のネットワーク(Wi-Fiかモバイルのどれか)
モバイルはデュアルSIMなので2つ無理やり送信している。ここには表示していないが”今どちらのSIMがアクティブなのか”も取得できる。
- モバイルネットワークの詳細(キャリア名、電波何本か、無線技術(LTEか5Gか等))
どこが電波弱いか?とかもわかってくるのでとても良い。
上の画像のように、コンビニを通過したときに0001docomoをつかまされていることがわかる。
- 現在の端末側日時(秒まで)
検討中
- ミリ秒 取得できるならば
もしできれば”通信状況の安定性”も計測できると考えている。ちなみにショートカット実行時に通信が疎通しなかった場合はエラーが出るがループは継続する。
- より詳細な通信状況
iPhoneでいうと「フィールドテストモード」で取得できるような詳細な情報(CAの構成など)くらいまでは収集してみたいが、今の所方法がわからない。
- 端末の向き・ジャイロ(活用できそうならば)
活用できる気がしない
- 標高・気圧(活用できそうならば)
これも活用できる気がしない。気圧って各端末で測る必要あるのか
- 歩数(ヘルスケアアプリ周り)
歩数の履歴が一応あった方が良さそう。1日の合計にしか興味ないか?
- スクリーン輝度
もし取得できるなら、スマホの使い方が理解できそう?
よりGoogleのサービスを模倣するならば
- その時撮影した写真を位置情報と紐づけてクラウドサーバーにバックアップする
タイムライン機能に並ぶ便利サービスとして、故「Google フォト」がある。これはスマートフォン端末で撮影した写真を日時だけでなく位置情報に紐づけて蓄積して後から閲覧できるものだが、少し前に容量無制限の仕組みがなくなって使わなくなった。
実現の難しさもあるかもしれないが、基本的にサーバーのストレージの問題があるので、もしAmazon Photosが無制限サービスを辞めた時にはやるべきかもしれない
- その時の状況メモ(テキスト)を記録・バックアップする
LINEメッセージやGmailの送受信ログが取れると尚良い?
レシピ全体(6/13現在)
この画像だけでは再現できない(複数の変数が同じ名前だったりする)
ショートカット作成上のバグなど
この規模のショートカットを編集していると、非常に不安定になる。無理せずにどんどん拡大していくと、なんとか動くものが出来上がり、結構ちゃんと動く。
繰り返し回数を増やしたり、繰り返しの範囲を大きく広めようとするとバックグラウンドで検証みたいなのが走り出し、動作が重くなる。
Macでも編集できる。Macで編集するとiPhoneと同期してくれたり便利。競合したりもするが、どのショートカットを優先するか?のダイアログから解決できる。
結構困るバグは、IF文の終わりや繰り返しの設置や移動が失敗し、「繰り返しの終了」パーツだけが残ってしまうことが多い。
大きなアップデートがあればまた