| @Mac/iPhone

ossan.fm playing in Castro, a CarPlay podcast client

(※タイトルは ChatGPT に考えてもらいました)

Apple CarPlay はとてもよくできたサービスだと思うけど、ネットであまり使っている情報を見かけない。自分の観測範囲が狭いだけかもしれないが、デジタルガジェット好きな人が大抵東京近辺に住んでて車を運転する習慣がないからではないかと思っている。なので今日は CarPlay の便利さについて書いてみたい。

自分は 3 年前のハワイ旅行でレンタカーで使った CarPlay に衝撃を受けて車を買い換えることにした。

いまも車の純正カーナビは使っておらず、車を運転するときは CarPlay で Apple マップか Google マップを使っている。ナビゲーションはもちろんのこと、届いたメッセージを読み上げてくれたり、音声入力で返信したり、 Hey Siri できたり、電話をかけたり受けたりできる。もちろん音楽や Podcast も聴ける。運転中に iPhone でしたいようなことが大抵できるようになってる。車に純正で付いてるカーナビだと精々 Bluetooth で iPhone につながってハンズフリー通話したり音楽を再生したりくらいしかできないが、 CarPlay を使うと車が iPhone の外付けデバイス的な感じになる。

CarPlay のなかでも Apple マップがめちゃくちゃよくできてて、例えば休みの日に 11 時からショッピングセンターで予定があったとして(カレンダーに予定と場所の情報が入れてある)、 10 時半に車に乗って iPhone を車につなぐと iPhone にプッシュ通知が来て「ショッピングセンターへのナビゲーションを開始しますか?」と表示される。ようわかっとるやんけと思いながら通知をタップするとナビゲーションが始まる。

運転をしていると交差点が近づいてきたときに Apple Watch が震えて右折しなければならないことを教えてくれる。カーナビで音声ナビゲーションさせることもできるし、音声は出さずに Apple Watch 経由でナビゲーションしてもらうこともできる。 Podcast を聞き入っていたのにナビの音声に邪魔されるということがない。

目的地に着いて駐車場に車を止めると駐車位置が Apple マップ上に反映される。ショッピングセンターの広大な駐車場で自分の車の駐車位置がわからなくなり延々さまようということがなくなる。

うっかりガソリンを入れ忘れていて燃料警告灯が付いてしまった。すると iPhone にプッシュ通知が届いて「ガソリンスタンドを探しますか?」と表示される。通知をタップすると地図上で最寄りのガソリンスタンドが表示される。

このように Apple マップは車とつながることでハチャメチャにユーザーの状況に適した提案をしてくる。めちゃくちゃかゆいところに手が届く感じ。ガソリン切れそうになったときに通知が来たときは便利すぎて正直引いた。

フツーの車が近未来デバイスみたいになったみたいな感じになるので、 CarPlay に対応しているカーナビを搭載している車を持ってる人は今すぐ純正カーナビ使うのやめて CarPlay で Apple マップ使い始めた方がよいし、これから車を買おうとしている人はナビが CarPlay 対応しているかどうかはチェックした方がよい。車がデジタルガジェットの一部になる感覚を味わって欲しい。

| @WWW

博多駅前

サウナイキタイのサ活と Google マップのクチコミには結構乖離があることに気が付いた。自分が行ってめっちゃ気に入って、サウナイキタイでも好意的なサ活が多い佐賀の KOMOREBI の評価が Google マップでは低い。サウナにも水風呂にも入らないのに物価の安い九州(温泉に 500 円で入れる)で風呂に 1100 円払えと言われたら高すぎると感じる人もいるのだろう。しかも混んでるし。

Google マップのクチコミはとても便利だけど、一つの施設で二つ以上の役務を果たしてる場所や客を選ぶタイプの店は評価が下がると思う。本当は自分の好みにピッタリの施設が低評価となっている可能性がある。なので評価が低いからと切り捨ててしまうのではなく、自分と似た属性の人からのクチコミを探し出して読むと実際のところの雰囲気がわかるかもしれないが、それは難易度が高すぎる。

今日のプラットフォームサービスには不幸なマッチングを回避する仕組みが必要なのだと思う。あなたはサウナ好きだからこの施設は満足できますよとか、ここは常連向けですよ的な情報が簡単にわかるようになるとか。

ただ一方でそれは Instagram で自分のようなおっさんに微エロのリール動画ばかり表示されるようなレコメンデーションとアルゴリズムによる支配がいろんなサービスに広まるということであり、それはそれで残念ではある。

もう一つの選択肢としては、釣り SNS や登山 SNS が出来たように、レビューサイトも専門分化させていくアプローチが考えられる。自分のようなアルゴリズムやレコメンデーションにあらがいたいウェブ縄文人にはそういう進化の方が向いているかもしれない。

というようなことを思ってたら一つ前の記事に言及しつつ伊藤直也さんが似たようなことを書いていた。

2ch みたいにごちゃごちゃカテゴリーがサイドバーに並んでいるのには普通の人には難しすぎるので、釣り掲示板がツリバカメラになり、登山掲示板がヤマレコや YAMAP になったんだろう。考えてみるとサウナイキタイもサウナに特化した SNS ・情報サイトだ。

サウナイキタイに話を戻すと、サウナイキタイはローカルルール満載の町銭湯に対する評価が甘いという特徴もある。サウナイキタイでベタ褒めされてる施設(「番台のおばあちゃんが優しい」、「常連の方達とほのぼの交流」などなど)が Google マップではボロクソに書かれてたりする(「番台は意地悪ばあさんそのもの」、「彫り物を入れたヤクザや半グレの常連でサウナが占有されていて入れない」などなど)。ネガティブなことは書かないというコミュニティポリシーの影響なんだろうか(以前、サ活でドラクエ集団がいたと書いたら公式アカウントから警告された)。サウナイキタイだけ見て福岡の銭湯サウナに行ったら刺青を彫った怖い人から凄まれながら入浴しなければならないという体験をしそうだ。

レコメンデーションにしても専門分化にしても塩梅が難しい。レコメンデーションはやり過ぎるとただの偏見にしかならない( 40 代男性はおっさん → おっさんはエロが好き → 微エロ動画見せとくか)し、専門分化して蛸壺化しすぎると一般的な感覚と離れたレビューが集まるようになってしまう(怖い人だらけの銭湯サウナが高評価)。昔のインターネットではこんなことに悩むことはなかった。

昔のインターネットは良かったとばかり言ってもどうにもならないが、インターネットを飯の種とする者の一人として人が増えたいまのインターネット特有の問題をどうにかしたい。

| @Mac/iPhone

Dynamic Island

先週金曜の夜に酒を飲んでたら「円安が加速!!!、!」みたいなニュースが流れてきて、ひょっとするとまた Apple がレート改定して iPhone が 30 万円くらいになるかもしれないなと思えてきてしまい、怖くてガタガタ震えてしまって iPhone 14 Pro を買ってしまった。発送まで 3 週間 〜 4 週間と書いてあるし、一晩寝て冷静になってやっぱり高すぎるなと思ったらキャンセルすればいいやと酒の勢いで買ってみたところ、翌朝起きたら発送準備に入ってしまっており心の準備期間を与えられることなく月曜に届いてしまった。

iPhone 14 Pro unboxed

以前使っていた iPhone 11 と画面サイズに差はないが、 iPhone 11 は端がまるっとしていてその分だけサイズが大きく感じる。 iPhone 14 Pro は端が iPhone 4 とか iPhone 5 みたいに切り立っているので手に持ったときのサイズが小さくなったように感じる。画面端のベゼルも薄くなった。

カメラ性能

カメラの性能はかなり期待していたが、やはりミラーレス( Nikon Z6 )で撮る写真の方がきれいだ。特に暗くなってくると iPhone 11 の頃からあった合成写真感が強くなってしまう。

夕闇の長垂海岸

別の日に撮ったものだが同じような明るさのときに Z6 で撮ったのが以下。

夕闇の長垂海岸

全然違う。まだまだ光学メーカーが作ったカメラとレンズの組み合わせの方がスマートフォンのカメラよりも画質が良さそうだ。

高精度2周波GPS

カメラ的な用途だと iPhone 14 で十分だったのかも知れない( iPhone 11 を買ったときはどうせ写真は Z6 で撮るので Pro でなくても良いと判断した)が、期待していたのが GPS 精度の向上だった。

GPS の比較

iPhone 14 Pro は高精度2周波GPSというのを搭載している。 iPhone 11 の「 GPS/GNSS 」と比べるととんでもなく進化しているように見える。

なんで GPS 精度を気にするのかというと、ランニングのときのログが不正確なのに不満を持っていたからだ。自分は普段、 Apple Watch のワークアウトを使ってランニングのログをとっている。 Apple Watch でログをとっているのなら iPhone は関係ないのではと思われるかも知れない。それが関係ある。 Apple Watch はバッテリー節約のため、ペアリングされた iPhone が近くにあるときには Apple Watch 側の GPS ではなく母艦の iPhone 側の GPS を使うそうだ。

https://support.apple.com/ja-jp/HT207934

iPhone を携帯している場合、Apple Watch は iPhone の GPS を使い、バッテリーを節約します。GPS の精度が上がるように、iPhone を手に持つか、または、アームバンドまたはウエストバンドに取り付けて体に装着してください。

Apple Watch のワークアウトの種類 - Apple サポート (日本)

Apple Watch Series 6 + iPhone 11 の組み合わせでランニングをしていて、住宅街の中にある鋭角なコーナーがあるコースを走ると軌跡が不正確になるのが気になっていた。ペースを落としているわけではないのに鋭角コーナーがあるエリアに入るとペースが遅く表示される。試しにいつも Apple Watch で 5km と表示されるコースを国土地理院の地図に GPX Binder というアプリで線を引いて距離を計測してみると 5.2km と表示され、実際は 5.2km 走っているのに Apple Watch 上は 5km という扱いになっているようだった。

iPhone 11 で走ったときと iPhone 14 Pro に変えてから走ったときの GPS の軌跡の比較が以下。

左側が iPhone 11 で右側が iPhone 14 Pro 。住宅街の細い路地を走っているが iPhone 14 Pro はほぼほぼ正確に軌跡を捉えている。以下の記事によると、 iPhone 14 Pro は iPhone 13 Pro や iPhone 14と比べても GPS の精度がだいぶ高いようだ。

iPhone 14 Pro にして走ってみるとペースもかなり速く表示され、一年以上ランニングを続けているのに一キロを 6 分を切るペースで走れないなと思っていたところ、 iPhone 14 Pro に変えてから 5km のベストタイムを 2 回連続で更新してしまった。正しく測れば自分はちゃんと成長していたんだということがわかってうれしい。

Apple ワークアウトのキャプチャ

データ移行

データ移行は古い iPhone 11 を iPhone 14 Pro の脇においてワイヤレスで行った。 Safari のクッキーも再現されたが、いくつかのアプリはデータが消えた(物書堂の辞書、サウナライフ、 Kindle のログインセッション)。しかしこれらは再ログインすれば復旧できたので問題ない(サウナライフはお気に入り情報やサウナの記録をローカルストレージに保存しているようでデータが飛んだ)。

ハマったのが Nikon の SnapBridge (カメラから自動的にスマートフォンに写真を転送するソフト、スマートフォン側の GPS を使って写真に GPS データを埋め込むこともできる)のペアリングがうまく行かなかったところ。データ移行によって iPhone 側では Z6 がペアリングされているように見えるが、 Z6 側からは認識できないようだった。ハードウェアが変わったので Bluetooth の識別子が変わっているからだろう。再ペアリングしようとしたらめっちゃハマった。どうも SnapBridge は半年間アップデートがなく、 iOS 16 に完璧に対応できていないようだった。

App Store のレビューを見ると「英語モードにしたらペアリングできた」というものがあった。 iOS 13 からアプリごとに言語設定を変えられるので SnapBridge の言語を英語に変更してペアリングを試みたがうまく行かない。 iPhone 全体の言語設定を英語にしてペアリングを試みたところうまく行った。 Nikon のカメラをお使いで、 iPhone を新しくしてペアリングができなってる方はお試しください。

買う価値あったか

256GB モデルを買ったので値段は 164,800 円もした。 Paidy の後払いプラン 36 回分割払いで何とか買ったがこれから毎月 4,577 円も払っていかないといけない。正直かなり高い。買う価値があったのかどうかはわからないが、嫁さんに黙ってこっそり買ったことがばれて嫁さんの分も注文させられ毎月のローンが 9,154 円になったことは確か。金ほしい。

金のなさ

| @技術/プログラミング

ブログのアクセス数を集計してランキング(人気記事一覧)を表示している。

シェルスクリプトでログを集計して頑張っているが、ボットからのアクセスを除外など結構やることが複雑化してきた。また最近は主にロシア方面からのスパマーによるアクセスが多く、全然いま読まれる要素がない記事がランキング上位に入ったりしてた。スパマーは以下の 2 記事が好きなようだ。

Google Analytics でアクセス数を見るとこれらの記事は上位に入ってこないので、 Google はちゃんとスパマーからのアクセスを除外しているのだろう。

というわけで Google Analytics の API からアクセス数を取得してみることにした。

しかし調べてみた感じ、あまり情報がない。 Google の公式ドキュメントは Java とPython と Go と PHP と JavaScript のサンプルしかない。

Google が公開している Ruby のライブラリはあるが、ドキュメントがえらく貧弱で勘で使うしかない。

使い方を紹介しているブログもあるにはあるが、この Ruby 製のライブラリはアルファ版とベータ版しかなくてころころ仕様が変わるようだ。先人の情報通りに動かしてみたら全然動かなかった。

API の仕様や上述のライブラリのコードを読みつつ以下のようなコードを書いたところいい感じに使えるようになった。 Ruby で Google Analytics の API にアクセスしたいと思っている人には参考になるんじゃないかと思う。

↑のコードでは metrics は screenPageViewstotalUsers を取得している。 dimension は pagePathpageTitle だ。ほかのが必要であれば変えてあげればよい。これを Rake タスクから呼び出して必要な情報を得るようにしている。

API 呼び出しについては Google が提供している Query Explorer で確認するとよい。

また Analytics API は利用開始前に設定が必要。 Quickstart ページで API を有効化し、 GCP に IAM を作成して credential をダウンロードして Google Analytics 側でこの IAM への API アクセスを許可する必要がある。コード書く前にこの辺でくじけそうになるだろうけど頑張ってほしい。

| @雑談

Xiaomi Smart Band 7

Amazon アウトレットで安くなってたのでミーバンド買ってみた。

早速昨日使ってみて、時間を計らずにサウナに入るのがこんなに快適だとは思わなかった。心拍数だけ意識して、決まった心拍数になったら次のステップに進むというフローで動いた。結果めっちゃととのった。

これまでサウナであまりととのわないなと感じることもあったが、心拍数の上がり方がいまいちな状態でサウナを出て水風呂に入っていたのだろうと思われる。心拍数が 120bpm 以上になるまでサウナで粘って、その後水風呂で 60bpm 未満まで下げ、休憩スペースで椅子に座ってると徐々に心拍数が 80bpm くらまで上がってくる。ととのいはどうもこのタイミングで訪れるようだ。その後徐々に心拍数が安静時心拍数(自分の場合は 55bpm くらい)に下がってくる。安静時心拍数に戻ったら休憩を終了して次のセットに進む感じ。

サウナでととのわないなとお悩みの方はミーバンド買ってみる価値あると思う。心拍数を計測してサウナに入ると人生が変わる。

なおミーバンドはサウナで使っても問題なかったが、運動モード(心拍数をリアルタイムで計測するため)にすると Apple Watch よりもバッテリー減りが速いかも? 1 時間 20 分くらい運動モード自由形で使っていてバッテリーが 90% から 45% くらいまで減った。スマートウォッチとして日常でも使う場合は注意が必要かも。あと Apple Watch では見られないような発熱を観測した。とはいえサウナでしか使わないと割り切るなら問題なさそう。 6000 円で異次元のととのいが手に入ります。

| @WWW

sauna-ikita-and-sauna-life

ドラマ『サ道』を見てからサウナ好きになった。金曜の夜の遅い時間にテレ東系列で放送される25分ドラマは味があっていい。コーネリアスの音楽(サウナ好きすぎ)もマッチしてた。サウナ情報を検索するため、自然な流れでサ道にも登場するサウナイキタイを使うようになった。

サウナイキタイは便利ではあるが、レビューではなくサ活(サウナに行った記録)の投稿に特化してて、点数などでのレビューではないので初心者にはとっつきづらい(サウナを探しづらい)かも知れない。サウナの検索動線がサイトトップにしかないのもちょっとわかりづらいかも? サ活を読んでるとどこからサウナを探せるのかわからなくなり迷子になる。

少々気になる点がありはするものの、サウナ情報欄の項目がサウナ好きが喜びそうな項目になっていて、それをユーザーが自由に更新できる Wiki ライクな設計になっているので、数多く抱えるユーザーによって施設情報が頻繁に更新されて情報鮮度が高いのが良い。トントゥなるユーザーを褒める仕組みもよい。よく設計されている。

しかし何といってもサウナイキタイはサイトのデザインがすっきりしててオシャンティなところが良い。販売されているグッズもオシャレだ。サービスコンセプトデザインもよい。デザイン系 Podcast resize.fm でたびたび言及されるくらいよくデザインされている。

春頃、サウナイキタイがアプリを作るということと、有料会員制度(サウナイキタイメンバーズ)を始めるということが発表された。

開始当初はサイト上に専用のヴァーチャルなロッカー番号を取得できるだけで明確なメリットがなかったが、その後サウナを地図上から検索できる機能が特典として追加された。

これはめっちゃ便利そうだ。このためにメンバーズに加入するか悩むが、自宅近辺はそんなにたくさんサウナがあるわけではなく、いつも行くところは決まっているので元が取れないかも知れないと尻込みしている。

サウナイキタイのアプリ開発はどうなっているのだろうと何気なく App Store で「サウナイキタイ」と検索してみたら、「サウナライフ」というアプリが見つかった。

サウナイキタイとよく似た作りのアプリで、サ活の投稿に加えサウナのレビューもできるし、コミュニティを作ってユーザー同士で交流する機能もある。またサウナイキタイではポリシーとして実装されていない1サウナのランキング機能もある。さらにはサウナイキタイではメンバー限定の地図からサウナを探せる機能も使えるし、「1000円以下」など料金や決済手段といったサウナイキタイでは使えない特徴でサウナを絞り込む機能もある。めちゃめちゃ多機能なアプリだ。

マップ画面 ホーム画面 福岡の人気のサウナ
地図から探す機能が無料で使える。なぜかホーム画面が左端や真ん中ではなく左から二番目にある。人気のサウナ一覧機能もある。

サウナイキタイがあえて実装していない機能を提供しており、弱みをついているなぁという感じがする。料金で検索できる機能は膝を打った。サウナ好きな人には経済的にゆとりがある人が多いのか、人気のサウナ(サウナイキタイの「イキタイ」が多い)はかなり入浴料が高いことがある。良さそうなサウナを見つけても料金が1600円とかであれば利用するのを諦めてしまう。なので「1000円以下」で検索できる機能は貧乏サウナ愛好家の自分には嬉しい機能だ。

ではサウナライフがサウナイキタイに圧勝かというとそんなことはない。

第一にユーザー数が少ない。アプリプラットフォームはどんなに一つ一つのアイテムの情報量が多くても、そこに集まるユーザーが沢山いて活気がないとダメだ。統一された見やすいフォーマットで情報が整っていなかったとしても、粒度がバラバラであったとしても、常に最新の情報が投稿されていることの方が大切だ。 2 年前の情報はどんなに体裁が整っていても昨日投稿された情報に劣ることが多い。実際、自分の家の近くのサウナで情報の陳腐化が見られた。

これはネット上での存在感が無に等しいことが影響していると思われる。「サウナライフ」でググっても公式のウェブサイトがヒットしないし、 Twitter に公式アカウントもない。何かしらのページがないとユーザーが情報を拡散することができず、バイラルでユーザー獲得できない。新規ユーザー獲得がアプリストア一本槍となってしまっているのを改める必要があるだろう。

第二にデザインと情報設計がよくない。

サウナ詳細 1 サウナ詳細 2
メダルスコア 31 や金銀銅のメダルの割合が何を意味しているのかがわからないし、ラベルの色使いが多すぎるのはごちゃごちゃした印象を与え、サウナの情報を把握するのを阻害している。

サウナ詳細ページには様々な情報が表示されているが、ごちゃごちゃしていて要点をつかみにくい。メダルスコアや金銀銅のメダルのそれぞれが何を意味しているのかもわからない。色使いが多いのもごちゃごちゃ感を増強している。一階層で見える情報が多すぎる。

みんなのサ活 サウナ評価
ユーザー投稿欄がサ活と評価で別れているのがわかりづらい。正直、「みんなのサ活」欄にもレビュー的な内容が投稿されている。ユーザーはどちらも見なければサウナの情報を調べられないのは不便だ。

「みんなのサ活」と「サウナ評価」で情報が重複しているのも良くない。情報設計をミスっている。フロー的な情報が二種類あってユーザーはどちらも確認しないとサウナのことを調べられない。

最後に、システムの設計がサウナイキタイのパクリ+アルファというのが気になる。「サ活」、「サ飯」などの言葉が自然に使われているが、サウナイキタイの文化という感じがする( Twitter で検索するとサウナイキタイリリース前から使われていたようではある)。

全体的にサウナライフはあったら良さそうなものをじゃんじゃん追加してきたアプリという印象を受ける。実際、 App Store のレビューで要望された機能を「作りました〜」という感じで作っているようだ。よく言えばフットワークが軽いがまとまりがない。

ソフトウェア開発はいかにコードを少なくするか、ソフトウェアの規模を小さくするかが大事だ。情報量が増えたりソースコードの行数が増えたらメンテナンス対象が増えるし、ソフトウェアの複雑性が高まるとユーザーにとっても使う上での難易度が上がる。ほとんどの場合良い結果をもたらさない2。最もシンプルなソフトウェアで果たすべき役務を果たすのが最も効率的だ。

聞くところによるとサウナライフは一人で開発されているようだ。クライアントサイドだけでなくバックエンドもあるし、機能の豊富さではサウナイキタイを超えているので一人で開発・運用しているのは正直すごい。サウナライフが弱点を修正したらサウナイキタイにとっては脅威となるに違いない。

サウナイキタイのアプリ開発表明には、少なからずサウナライフが影響しているのではないかと想像する。確かにサウナライフには良くない部分が多いし、 UX や情報量の点でもサウナイキタイの方が勝っているが、アプリで、かつ地図上からサウナを検索できる機能は便利だし、サウナの検索は出先でスマートフォンから行うことが多いはずで、スマートフォンから使うならアプリの方が効率的で快適だ。

果たしてアプリ版のサウナイキタイはサウナライフを圧倒するようなものに仕上がるのだろうか。はたまたサウナライフが UI を改善してサウナイキタイに対抗していくのだろうか。サウナアプリの雌雄を決する戦いが始まろうとしている


  1. 開発チームへのインタビュー 妄想サウナ!「サウナイキタイ」チームの考えるカスタマイズ可能なプライベートサウナってどんなもの?【サウナをつくる】|灯台もと暮らし[もとくら]|これからの暮らしを考える情報ウェブメディア 

  2. 仕事でランディングページの情報量を思い切って削減したことで CVR が 3 倍程度に改善したことがあった。複雑な画面や多すぎる情報量はユーザーの思考の負荷を高め意思決定を阻害する。 

| @WWW

以前、以下の記事でこのウェブサイトへのアクセス元 User Agent について書いた。

そのとき Hatena::Russia::Crawler というのが謎だということを書いた。最近のアクセスログを見ても相変わらずこの User Agent からのアクセスが多い。またアクセス頻度も高く、同一の URL に対して何度もアクセスしている。

これはやはりはてなの名を騙った怪しいクローラーなのではないかと思い調べてみた。

まず Hatena::Russia::Crawler という User Agent からのアクセスの IP アドレスを調べてみたところ以下だった。

cat log/access.log | grep 'useragent:Hatena::Russia::Crawler/0.01' | cut -f2 | sort | uniq -c | sort -nr
    434 remote_addr:52.68.0.227
    419 remote_addr:54.249.85.140
    417 remote_addr:54.92.97.59
    379 remote_addr:54.250.227.185

whois してみると AWS で運用されているものであることがわかるが、はてなのものかは断定できない。

もしこの IP からはてなブックマークやはてなアンテナなどの User Agent でのアクセスもあれば Hatena::Russia::Crawler ははてなのクローラーであると断定できるだろう。ということで調べてみたところこんな感じだった。

zcat -f log/access.log* | grep -E 'remote_addr:(52\.68\.0\.227|54\.249\.85\.140|54\.92\.97\.59|54\.250\.227\.185)' | cut -f13,2 | sort | uniq -c | sort -nr
  16687 remote_addr:54.250.227.185      useragent:Hatena::Russia::Crawler/0.01
  16448 remote_addr:54.92.97.59 useragent:Hatena::Russia::Crawler/0.01
  16370 remote_addr:54.249.85.140       useragent:Hatena::Russia::Crawler/0.01
  16272 remote_addr:52.68.0.227 useragent:Hatena::Russia::Crawler/0.01
     73 remote_addr:54.249.85.140       useragent:HatenaBookmark/4.0 (Hatena::Bookmark; Scissors)
     60 remote_addr:54.250.227.185      useragent:HatenaBookmark/4.0 (Hatena::Bookmark; Scissors)
     56 remote_addr:52.68.0.227 useragent:HatenaBookmark/4.0 (Hatena::Bookmark; Scissors)
     50 remote_addr:54.92.97.59 useragent:HatenaBookmark/4.0 (Hatena::Bookmark; Scissors)
     31 remote_addr:54.92.97.59 useragent:Hatena::Fetcher/0.01 (master) Furl/3.13
     31 remote_addr:54.250.227.185      useragent:Hatena::Fetcher/0.01 (master) Furl/3.13
     31 remote_addr:54.249.85.140       useragent:Hatena::Fetcher/0.01 (master) Furl/3.13
     26 remote_addr:52.68.0.227 useragent:Hatena::Fetcher/0.01 (master) Furl/3.13
     19 remote_addr:54.92.97.59 useragent:Hatena::Scissors/0.01
     19 remote_addr:54.250.227.185      useragent:Hatena::Scissors/0.01
     16 remote_addr:52.68.0.227 useragent:Hatena::Scissors/0.01
      9 remote_addr:54.249.85.140       useragent:Hatena::Scissors/0.01

なんと、 IP アドレスで検索してはてなのその他のクローラーもヒットしてしまった。つまり Hatena::Russia::Crawler ははてなのクローラーということだ。

ただしググっても一切情報が出てこない。 Hatena::Russia::Crawler で検索してトップヒットするのは自分のブログだ。

改めて Hatena::Russia::Crawler による直近 30 日間のアクセス状況を調べてみるとこんな感じだ。

zcat -f log/access.log* | grep 'useragent:Hatena::Russia::Crawler/0.01' | cut -f5 | sort | uniq -c | sort -nr
  15697 request_uri:/index.atom
   9913 request_uri:/2022/04/20/integrate-charts-category-with-select-boxs
   9373 request_uri:/2022/05/04/reputation-and-interpretation
   8422 request_uri:/2022/05/11/fly-to-kamikochi-from-fukuoka
   7716 request_uri:/2022/05/16/using-tantivy-over-tantiny
   5906 request_uri:/2022/04/17/quit-using-hey
   5139 request_uri:/2021/12/29/thoughts-on-manga-subscription
   1308 request_uri:/2021/12/13/keep-a-stack-books-whether-reading-them-or-not
    787 request_uri:/2022/06/23/each-entry-title-should-be-marked-up-with-h1
    741 request_uri:/2021/12/13/keep-stack-books-whether-reading-them-or-not
    456 request_uri:/2022/06/24/if-you-feel-apple-musics-recommendation-is-awful
    100 request_uri:/2022/06/14/thoughts-on-hatena-bookmark
     46 request_uri:/2015/12/07/thoughts-on-rural-life
     46 request_uri:/2015/12/02/thoughts-on-t-on-t
     46 request_uri:/2015/12/02/thoughts-on-christmas-song
     45 request_uri:/2019/12/02/stop-drinking-outside-frequently
     16 request_uri:/2020/11/08/where-i-went-in-2019
     11 request_uri:/2015/12/05/omm-writer-music-is-nice-to-listen-to-while-writing
      5 request_uri:/2022/05/04/the-golden-maintenance-week
      2 request_uri:/2022/06/24/
      2 request_uri:/2022/06/24

index.atom はフィードの URL なので除外するとして、特定の記事に対して数千回もアクセスがある。 30 日間で 9000 回ということは一日あたり 300 回だ。 1 時間あたり 12.5 回である。何のためにこんなに高頻度でクローリングしているのだろうか。

とここまで調べたところほかの Bot 系アクセスはどうなのかと改めて User Agent 毎のアクセス数を調べてみたらこんな感じだった。

zcat -f log/access.log* | cut -f13 | sort | uniq -c | sort -nr | head -10
 124894 useragent:Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
  65794 useragent:Hatena::Russia::Crawler/0.01
  58274 useragent:Ruby
  31493 useragent:Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1
  29454 useragent:Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)
  21492 useragent:Tiny Tiny RSS/21.11-7cfc30a (https://tt-rss.org/)
  20351 useragent:Slackbot 1.0 (+https://api.slack.com/robots)
  18765 useragent:Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)
  18395 useragent:Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)
  17942 useragent:Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

bingbot からのアクセスの方が Hatena::Russia::Crawler からのアクセスの 2 倍近くあった。ただし bingbot は検索エンジンのクローラーらしく、サイト全体をまんべんなくクローリングするような挙動で、特定の URL に一ヶ月間で数千回アクセスするような感じではない。

zcat -f log/access.log* | grep 'useragent:Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)' | cut -f5 | sort | uniq -c | sort -nr | head -25
    571 request_uri:/robots.txt
    352 request_uri:/
    205 request_uri:/category/misc
    160 request_uri:/2007/01/13/732
    156 request_uri:/2005/10/28/129
    150 request_uri:/2009/03/23/1010
    148 request_uri:/category/music
    146 request_uri:/archives
    144 request_uri:/category/www
    143 request_uri:/2016/07/
    143 request_uri:/2009/08/31/1074
    139 request_uri:/2010/07/05/1140
    138 request_uri:/category/photo
    138 request_uri:/2009/02/
    137 request_uri:/2006/09/09/658
    136 request_uri:/tags/netatmo
    136 request_uri:/2010/07/17/1145
    136 request_uri:/2006/07/23/611
    135 request_uri:/2014/03/
    134 request_uri:/?page=32
    134 request_uri:/2007/02/09/747
    133 request_uri:/category/shopping
    133 request_uri:/2021/07/26/how-to-get-to-kamikochi-from-fukuoka
    133 request_uri:/2011/11/03/finally-got-hhkpro2
    132 request_uri:/2006/01/

Hatena::Russia::Crawler は同一 URL に数千回もアクセスして何をしているのだろう? 謎は深まるばかりだ。