Gadeninアプリを入れる

設計判断読了 5 分

アプリの新規ユーザーが急増、正体は bot。Google Play のリリース前レポートが勝手に登録していた

管理画面に、日本時間早朝に登録する新規ユーザーがすごい増えた。農家の早起きの人がたくさんインストールしてくれたんかと喜んでたら、 Google の IP から来た Android で、1秒差で2人登録した日もあり残念。正体は Play Console のテスト端末だった。

Gadenin のダウンロード数だけでなく、細かな統計情報を確認するために、管理者用のツールをみて日々のシステム運用を行っている。 ここ最近は少しずつだが ASO の効果もでてきて新規ユーザーの方が増えてきていて非常に嬉しい。

そして、ここ最近その DL 数のスピードが急増してきているなと思って少し怪しいなという動きだったので仕方なく調査する流れに。 結果、 10月6日の2時37分、4時18分、4時18分、4時23分 10月7日の3時58分、4時03分、4時37分。 どこの国からのインストールかツール上でわかるようにしているが、すべて日本からのダウンロードであった。そんなはずがないんだよな、こんな時間帯で一番活動的になるのは。

ただ当初は、日本のどこかに、夜明け前に家庭菜園アプリを入れる人たちがいる。そう思っていた。農家の朝は早い。

人間は、そんなに揃わない

朝が早い人はいる。畑に出る前に記録をつけたい人もいるだろう。 ただ、並び方がおかしかった。

10月6日は、4時18分に2人いる。 数えてみると、10月3日から7日までに、同じような登録が17件あった。

タイムスタンプまで見て初めて bot だろうと思った。自分がトレーシングしやすいようログを仕込んでいなかったこともあり Claude code に調査タスクを仕込んだ。

アプリの API は、Cloudflare のバックエンドで構築している。新規登録はサインインの POST /api/auth/google から始まるので、その時刻の通信を Cloudflare の API で引いた。

登録日時 端末 (User-Agent) 接続元
10/7 3:58〜4:37 の3件 okhttp/4.12.0 (Android) アメリカ、Google の IP
10/6 12:13〜12:40 の3件 okhttp/4.12.0 アメリカ、Google の IP
10/6 2:37〜4:23 の4件 okhttp/4.12.0 アメリカ、Google の IP
10/3 19:16〜21:41 の4件 okhttp/4.12.0 アメリカ、Google の IP
ほかの日のふつうの登録 Gadenin/66 CFNetwork (iPhone) 日本の一般の回線

明け方だけではなかった。昼の12時台にも、夜の19時台にも来ていた。

接続元は、66.249.x や 74.125.x で始まる、Google の持ち物の IP だった。66.249.x は Googlebot と同じ帯域だ。 端末は Android。Gadenin の Android 版は、まだクローズドテストの途中だ。テスターは、ほぼ自分しかいない。

極めつけは、10月6日の2件だった。4時18分09秒と、4時18分10秒。1秒差で別のアカウントができている。僕は WEB 系のエンジニアなので、アプリ界隈でもこんなDoS攻撃みたいなことを Google がしてきているんだといいうことは知らなかった。

管理画面の見え方と Cloudflare のログを並べた図。管理画面では10月6日と7日の明け方の登録が、全部 Google 経由で国は日本と出ている。同じ時刻の POST /api/auth/google のログでは、接続元は66.249.x などアメリカの Google の IP で、User-Agent は全部 okhttp/4.12.0。手がかりは、全部 Google の IP、全部 Android、1秒差で2人の3つ。結論は Play Console のテスト端末で、国が日本なのは IP ではなく設定画面の既定値だから

正体は Play Console のテスト端末

Play Console には「リリース前レポート」という仕組みがある。アプリをアップロードするたびに、Google が自前の実機で自動的に操作して、落ちないかを確かめるようだ。

Gadenin は、Google のボタンを1回押せば登録が終わる。それくらい最初の登録をスムーズにすることにめちゃくちゃ神経を尖らせて設計したからだ。 テスト端末は、端末に入っている Google のアカウントでボタンを押す。そのまま新規ユーザーになる。1台につき1人増える。中には Plant を1つ作っていったものもいた。 植物につけている名前がいかにもエンジニアで、なんと "My First Cherry Tomato"。ひどい。 ちなみに日本人がミニトマトと呼称しているものが英語圏だと Cherry Tomatoだ。

国の列が「日本」だったのはまだ謎が解明できていなかったが、最終的に調査したっ結果、僕の管理画面に表示している国は、アプリの言語設定のものであり、IPアドレスではなかったからというのがわかり、一件落着。アメリカのデータセンター経由のものはちゃんとわかるようすぐにツールを改修し、Bot を除外してリアルな人間のインストールだけがわかるようにデフォルトを変更した。

  • BE の新規登録で、User-Agent から端末 (iPhone か Android か)、Cloudflare が付ける接続元の国と AS 番号を users に保存する (migration 0092)
  • AS 番号が Google のもの (AS15169 と AS396982) なら signup_bot = 1 にする
  • 保存するのは新規登録のときだけ。あとでサインインし直しても上書きしない
  • 管理画面の一覧に「端末」の列を足す。Apple と Android のロゴを16px で出し、bot には赤い札を付けて行を薄くする
  • 見出しは「27、うち bot 14」のように分けて出し、一覧は既定で bot を隠す

判定は「接続元が Google の網かどうか」だけにした。日本の回線から来た Android は bot にならない。自分の実機も、これから来るテスターも、人間として数えられる。

上の段は、テスト端末が新規ユーザーになるまでの流れ。Play Console にアプリを上げる、リリース前レポートで Google の実機が自動で操作する、端末のアカウントで Google のボタンを1回押す、1台で1人の新規ユーザーになり国は既定の日本。下の段は対策の流れ。新規登録のときだけ User-Agent と接続元の国と AS 番号を保存する、Google の網 (AS15169 と AS396982) なら signup_bot を1にする、管理画面で端末のロゴと赤い bot の札を出し一覧では既定で隠す、見出しで「27、うち bot 14」のように分けて数える

仕組みより前に登録した人は、端末が分からない。そもそもログをしこんでいなかったから。ログで確かめられた17件には、手で bot の印を付けた。残りの33人は、全員 iPhone にした。幸いその時期に Android から登録した人間はいないから、強制的に iPhone にしてしまっても問題ないからだ。

仕組みを出した直後に、もう1件来た

BE を出したあと、管理画面の見出しは「うち bot 18」になっていた。 手で付けた17件より1件多い。出した直後に Google の網からまた登録があり、今度は自動で bot と判定されていた。

ロボットのおかげで、仕組みが動くことはすぐに分かった。これで晴れてぼくは人間だけのインストール数だけを眺めることができるようになったのだ!

嬉しい、bot を外すと、人の登録も増えているぞ

印を付けたので、bot を除いた登録の数を週ごとに出せるようになった。10月11日の時点ではこうなる。

週 人 bot
8/24〜 6 0
8/31〜 1 0
9/7〜 2 0
9/14〜 1 0
9/21〜 5 0
9/28〜 14 4
10/5〜10/10 10 26

9月の半ばまでは、週に1〜2人だった。9月の終わりからは、週に10人を超えている。 小さい数字だ。ただ、bot と混ざったままなら、この伸びには気づけなかった。

10月10日には、bot がまた12件来た。同じ日に、人も4人登録している。

クローズドテストが終わるまで、bot は増え続ける。早く Android のクローズドテストを終わらせたいところなんだけど、いかんせん Android を使ってる周辺の家族や友人がいないので、インターネットでどなたかに依頼する以外に方法はない。

早く何かしら仕込まなければ。。

関連記事

Gadenin 栽培記録アプリ・無料アプリを入れる