この記事は WORDIAN Advent Calendar 2022 の 25 日目の記事です。
はじめに
筆者は Foursquare Labs Inc. が提供する Swarm というサービスを日頃から利用しています。
Swarm は、ユーザーが現在位置周辺にある様々な施設や場所を選択して、その場にいたことの記録を残すためのサービスです。このとき、同時にメモや画像を残すこともできます。残した記録のことを「チェックイン」と呼び、記録を残すことを指して「チェックインする」と(大学の友達との間で)表現しています。
Twitter で "I'm at ○○○" という文言と一緒にリンクを共有しているアカウントを見たことはありませんか。そのような人々は Swarm と Twitter アカウントを連携させることでチェックインの共有をしているのです。
以下はそのようなツイートおよびチェックインの例です。
(対面開催された学園祭を見に行ったときの様子)
I'm at 筑波大学 石の広場 in つくば市, 茨城県 w/ @c2hhbwfkyxlv @cyanolupus https://t.co/GMYi0xPi45 pic.twitter.com/nAmREcaO4d
— public_yusuke (@public_yusuke) 2022年11月5日
(鉄道開業150年記念 JR東日本パスが使える新幹線での最北駅まで来たので、ついでに山内丸山遺跡に行ったときの様子)
I'm at Sannai-Maruyama Ruins in 青森市, 青森県 https://t.co/DxsNsgwuXA pic.twitter.com/IG56vgQQmU
— public_yusuke (@public_yusuke) 2022年10月25日
チェックインできる施設や場所について
チェックインを行う際に選べる場所は沢山あります。例えば、日本料理屋、コンビニエンスストア、大学の教室、駅、キャンプ場、居酒屋、イベント会場、ゲームセンター、公園、ダム、城、県境、サービスエリア、道の駅、橋、交差点など……。いろいろありますね。
さて、筆者はドライブと Swarm でチェックインしてコインを稼ぐことが好きです。これらの趣味が組み合わさると、上で後半に挙げたような場所でチェックインする頻度が非常に高くなります。特に、交差点でチェックインできることを知った日からは頻度が異常に高くなりました*1。
公式アプリを用いた交差点でのチェックインを行う際の課題
しかし、交差点でチェックインするときに少し困ることがありました。一つ目は、Swarm で現在位置周辺の場所を列挙させても最初から交差点が出てくる場合は少ないので、キーボードで「交差点」と入力して検索する必要があることです。二つ目は、運よく目的の交差点が最初から画面に表示されていて検索の必要が無かった場合でも、以下の 3 つの操作を最低限行う必要があることです。
- 施設や場所の選択画面に遷移するためのボタンを押す
- チェックイン対象の交差点を選択するボタンを押す
- チェックインを作成するためのボタンを押す
これらの操作は画面をよく見てボタンを判別する必要があるため、手間がかかります。スマートフォン等は停車中であれば操作しても問題ありませんが*2、煩雑な操作をしていてつい夢中になってしまい、信号が青であることに気づかないようなことが起こるのは良いことではありません。
そこで、私は安全な交差点のチェックインを行うための Android アプリケーションを開発することにしました。
Interscheckin
Interscheckin は、交差点でのチェックインを補助するために作成された Swarm 利用者のための Android アプリケーションです。
このアプリケーションでは、前述の課題を解決することを目標としています。
一つ目の課題であった「『交差点』と入力して検索する必要がある点」は、Interscheckin に「運転モード」というチェックボックスを用意することで解決できました。運転モードが有効化されていると、公式アプリで「交差点」まで入力して検索したときと同等の検索結果をいつでも表示させることができます。
二つ目の課題であった「チェックインをするために最低でも 3 回の操作をする必要がある」は、各場所を表す部分を長押しするだけでチェックインできるような操作を取り入れることで解決できました。
ダウンロード
build_apk.yml
で定義されている Workflow を実行すると Artifact としてビルド済み APK がアップロードされるようになっています。例えば、記事執筆時点で最新の APK は https://github.com/private-yusuke/interscheckin/actions/runs/3750231180 にある "outputs" をクリックすることでダウンロードできるようになっています*3。
Interscheckin で利用しているライブラリなど
だいたい以下のようなものを利用して作成されています。
- UI
- Foursquare が提供する API エンドポイントにアクセスするためのライブラリ
- Retrofit2(HTTP クライアント)
- Moshi(JSON デシリアイザ)
- テスト
- Dependency Injection
- Dagger2
- Hilt
また、この Android アプリケーションは開発の練習のための実験場として使っているという側面もあり、例えば CI で Instrumented test を走らせる試みをしています(無論、実際の開発現場では instrumented test を含めて自動的にテストするのは普通のことですが、その仕組みを自分の手で作ったことが無かったので試せて良かったと思っている)*4。GitHub Actions の macos-12
ランナーを利用してテストを実行しているのですが、4 回に 1 回ぐらいの確率で落ちるという超絶 flaky 状態なので、有識者の方がいらっしゃいましたら是非この Issue でコメントを残して頂けるとありがたいです。
おわりに
Interscheckin を開発することにより、簡単にチェックインができるようになりました。気になった方はぜひ利用してみてください!
また、このような私利私欲アプリケーションを作ってみると日常的に行う動作を補助できて大変楽しいので、みなさんも是非モバイルアプリの開発をしてみてください。
おまけ
ちなみに、他の私利私欲アプリの話をすると、(昔に作ったので中身はキレイではないですが)緊急警報放送をパースするための Android アプリケーション EWSParserApp もあります。NHK 総合で毎月 1 日正午に放送される「試験信号放送 〜緊急警報放送〜」に思いを馳せている方は、このアプリを起動してスマホのマイクで音を拾うと、流れている信号の内容を知ることができて面白いので試してみると良いかもしれません。
*1:短時間にチェックインしすぎるとコインが貰えなくなる現象を頻繁に体験するようになった
*2:道路交通法第七十一条 五の五を参照
*3:落ちてくる zip ファイルを解凍すると、中に app-release-unsigned.apk が入っている