2018年7月14日土曜日

Google Map APIの有料化のサイトへの影響について


◆ GoogleMapAPIの機能が有料化するようで・・・

以前から少しだけtwitterの方でつぶやいていたので、気になっていた方もいると思いますが、GoogleMapAPIが有料化に移行するので何とかしないといけないという件についてです。

GoogleMapAPIというのは通常Googleのサイトで見ることが出来る地図の画面とかブログへの埋め込み地図のことではなくて、自分でいろいろとカスタマイズを施したGoogleMapを使う機能です。
当方のサイトの地図は、郵便局の場所とか情報とかを表示するためにこの機能を使っていろいろとカスタマイズした地図を表示してきました。


たとえば局めぐり詳細ページのルート表示の地図とか
https://r3.quicca.com/~postal/visited_daily.php?dt=2018-07-02

郵便局のマップとかですね。
https://r3.quicca.com/~postal/areamap_main.php

 
これらの機能は通常のGoogleMapの埋め込みだけでは作れないので、自分であれやこれや試行錯誤して構築しないといけませんが、いままでは個人が使う程度のものだと課金対象になりませんでした。
少なくとも1日10000回くらい表示されるような大繁盛しているようなサイトではないと課金プロジェクトに移行する必要はないので、個人レベルのサイトは無料でやらしてもらっていたわけです。


ところが、今年のゴールデンウィーク、5月3日に突如として送られてきたメールによると、GooglMapAPIの料金プランを一新するので負荷の高いサイトでは料金が発生するという衝撃の内容。
200ドルの無料枠を越えなければ課金はないとのことですが、いままでぬくぬくとやらしてもらっていたうちのような弱小サイトですら月々の負荷が限度を超えているので課金が発生してしまうということがわかりました。
ただえさえウェブサーバーの使用料金を月々600円くらい払ってやってるのにこれ以上経費がかかってしまうと趣味でやる限界を越えてしまいます。


◆ 7月16日から適用される新料金プラン、その恐ろしい真相

では具体的にどのような料金表になっているのかですが・・・

料金表 | Google マップ プラットフォーム
https://cloud.google.com/maps-platform/pricing/sheet/

英語と日本語の混ざった非常にわかりにくい料金表です。
ここで注目するところは一か月の無料使用量と書かれた列のところです。


たとえばDynamic Mapsについて見てみますと、最大28,000読み込みというのは一ヶ月当たりの読み込み回数が28000回越えると課金対象という意味です。それを越えると右隣の列に書かれているだけの料金が請求されることになりますが、DynamicMapだとこれが7ドル。まぁ1000円もかからないならたいしたものではないかと思っていたこともありました。

ところがこの料金表、よく見てないとそういう間違いがおきるんです。
無料枠を超えたら100,000回まで月7ドル・・・・ そんなわけありません。


この見出しの部分だけ見てると100,000回まで7ドルだと思うでしょう。

ところが注目するのはそこじゃなくて上の青い見出しです。
これ、読み込み1000回あたりの料金なんですよ。
この青い見出しってエクセルで言うところのセル結合されてて右の3列についてのこと言ってるんです。このことを知ったときはさすがに震えました。
0-100.000というのは10万回までの読み込み分の範囲はこの料金ですよ、という意味。

仮に10万回の読み込みあったとしたら無料枠を超過した72000回について1000回で割った分だけが請求額ってことですよ。

72,000 ÷ 1,000 × 7 =  504ドル

504ドル 56,642円


Google恐ろしい子・・・!


書面をよく見てないやつをつぶしにかかってる。
うっかり殺されるところだった。


そもそも月28000回の読み込みを越えているサイトというのはどういう状態なのか、少し考えてみましょう。

 28000 ÷ 30 ≒ 933

仮に28000回ぎりぎりだとしたら上の計算の結果のように、1日に1000回近くの読み込みがあるんですね。
これって制限越えた時点から毎日7ドル払うことがあるかもしれないってことですよ。
しかもこれ、DynamicMapsという一部の機能について言ってるだけで、ほかに複数の機能を使用した作り込みのハンパないコンテンツを作成しているサイトなんかはそこでも超過料金が加算されていくことになりますから、個人のサイト管理者なら軽く死ねますね。

ちなみに日本語版の料金表というのもありますが、DynamicMapsの日本語訳と思われる動的マップの無料枠は28,000ではなく28,500ということになっています。
この500の差異はいったい何なんだという疑問がありますが、そんな些細なことは気にしないでおきましょう。実はGoogle側もいろいろと混乱してるんです。
なぜなら当初の予定では6月11日から課金をスタートすると言っておきながら、あとてシレッと7月16日に延期していましたから

 

ちなみにGoogleMapAPIは課金するにあたって統計情報のデータを見れるようにしてくれたらしいです。
(もしかしたら以前からあったのかもしれませんが興味なかったので見てません)




こういう感じのサイト画面です。
GoogleMapAPIのAPIキーを取得している人しか見れないと思います。


さて、それでは5月時点で当サイトがどういう状態になっていたのか。
当時のスクリーンショットをtwitterに投稿してあったので掘り出してきました。


なんとMapsJavascriptAPIの月あたりの読み込み回数が87,459回。
ちなみにこの MapsJavascriptAPI というのが料金表でいうところの DynamicMaps のことです。
こんな感じで見るページによって呼称が変わっていたりして非常に頭が痛い。

しかし、これが5/17の時点で月に87,459回というのは月々28,000回という無料枠をぶっちぎっていることは確かです。
料金がおいくらになるのかということを計算しました。

(87,459 - 28,000) ÷ 1,000 × 7 ≒  416
416ドル ≒ 46,752円


46,752円・・・!

qあwせdrftgyふじこlp...



なぜか急にですが、今までGoogleに対して46752円も払わずにこの機能を使ってきたことに申し訳なさを感じてしまいました。そして、こんなの払えるわけないということもわかりました。

ちなみに6月になるまで前述の10万回までは7ドルだと思いこんでいたので、どうでもいいやと思い、のうのうとしておりました。

しかし、実際に6月に課金が開始されていたとしたら私の所には驚くべき請求額のクレジット引き落とし通知が届いていたことでしょう。

そう、本当に恐ろしいのはこの課金は制限を超えた時点で超過金がクレジットの自動決済にされることです。そもそもAPIを使い続けるためにはクレジットの登録が義務化されましたので、超過があれば即引き落とし・・・本当に恐ろしい。

仮にうちのサイトが何らかの媒体で紹介されたりしたら (そんなことあるはずないが)  いろんな人が訪れて、その都度読み込みが起きてしまうので 1日で10万回など越えようものなら、それに対して超過金の請求が来るわけです。
ただサイトに読み込みかけまくるだけでサイトの作成者は金銭的な被害を被ることになりますよ

ほんとに恐ろしい・・・。

クレジットを登録するわけだから、アカウントをいっぱい作って無料枠を増やせばいいというセコい手も通用しませんし、これはなかなか手ごわいことだと思います。

(サイトに大量に訪問者が来たときの対策として転送料制限の設定が可能なのであとで触れます)

GoogleMapAPIの課金の件については 『轍』 というGPSデータ活用サイトにある記述が参考になりますが、わたしはこの4行読んで目が覚める思いをいたしました。

  • 無料で利用できる範囲は毎月200ドル分まで。
  • 200ドルで利用できる範囲はウェブブラウザ上の動的マップの場合、毎月28500ページビューまで。
  • 無料利用分を超えると1000ページビューにつき7ドルの課金が発生。
  • APIキーを使用しないと2018年6月11日以降、マップが表示されなくなる。
 https://wadachi.cyclekikou.net/leave_googlemap.php

ちなみに 『轍』 さんはGoogleMapAPIのプラットフォームを捨てて、オープンソース系のLeaflet APIへ移行しています。
Leafletは、何というか地図として粗さが目立って到底使い物にならないような気がしますが、ただGPSの軌跡を見て行程を把握するだけならこれでもいいのかもしれません。


◆ 帯域を圧迫しているGoogleMapの機能は何なのか?

問題の統計データをじっくり見てみるとMapsJavaScropt API以外にもいくつか読み込みがありますが、たとえばDirections APIというのはルート検索のやつで、郵便局マップのところで操作すると簡単に訪問局ルートの行程を作れるという機能に使われていますね。
このDirectionsは40,000回まで無料なので1,239回程度では心配する必要はありません。

Geocoding APIは、地図の任意の位置から住所を検索するときに使うやつです(その逆の方法で使うこともあります)
当サイトでは郵便局マップの住所取得機能とかで使っていますね。
これも40,000回まで無料なのでどうでもいいです。

ということで当サイトで唯一の問題箇所はGoogleMap自体の読み込みが多いことです。

ここでまず思い当たるのは各郵便局について1ページ分のコンテンツが存在している当サイトでは、その郵便局の数の分だけ読み込む地図が存在するわけです。
今の時点で25,139局分のページがあるので、それらにいちいちアクセスされただけで簡単に無料枠を突破してしまうかもしれません。
また、Googleの検索にも載っているので、なんかの間違いで富士山頂郵便局に強盗でも入ったりしたら、当サイトの富士山頂郵便局のページにアクセスが殺到してしまう可能性だってあります。
とくに簡易郵便局に強盗や逮捕者がでたもんなら局名で検索したときに結果の上位に出てしまう可能があるので、興味本位にやってきた野次馬的市民によってマップの読み込みが爆発的に跳ね上がるかもしれません。



◆ やったことはたった一つだけ

この各局のページというのは検索エンジンからやってくる場合が非常に高く、当サイトの玄関みたいになっていますから、ホンモノの玄関からやってくる人なんていうのはごく限られた人しかいません。
以上のことを踏まえて、対策が必要なのは各郵便局の紹介ページの部分であると考えました。

問題のページの部分。
この地図の部分が読み込まれるたびにカウントされるので、87,459回のうち80,000回くらいはこの各局紹介のページで費やされているはず。

ということで取った対策はただ一つ。

地図をYahoo!にしました。

もっと細かく言うと、初めて当サイトにやってきた人のデフォルト表示のマップをYahoo!にしました。

何も変わってないじゃないかと言われそうですが、初めてやってきた人、いわゆるいちげんさんに対しての表示地図が変わったのです。

初めて来た人にはこんな感じに見えています。



右下の「地図をえらぶ」をクリックすれば3種類の表示から好きなものにすることができるようになっています。もともとデフォルト表示の地図をGoogleMapにしていましたが、これをYahoo!にしたというだけです。
ユーザーごとに設定が残るので、前回にGoogleMapで表示していた人は切り替えしない限りはそのままになります。ですからいつもから当サイトを見ていた人はその変化に全く気付くことはありません。

Yahoo!には申し訳ないですが、しばらくはYahoo!マップの方でガンバッてもらいます。
Yahoo!マップもけっこうAPI機能が充実してきたので、時間があればこちらも作り込みたいと思っていますが、そのうちこちらも有料化されそうで怖いですね。


◆ 対策によってどうなったか

実はこの対策を行ったあともいろいろと試行錯誤していたのですが、つい最近も統計データとにらめっこしてどう改善されたのかということを調べていました。

そして、今現在の時点での一ヶ月当たりの使用量はといいますと・・・・


おおおおおおおおおおおおおお
勝ったッ・・・勝利っ!

87,459回だったものが10,197回。

読み込み回数を8割削減! 
46752円もかかるはずの経費がタダ!

いや、いままでもタダだったわけですが、これから課金されることになるからその金額ですね。
しかしこんなにうまくいくと思わなかった。

いままで無駄な負荷をかけてばかりでグーグルさんどうもごめんね。
やふーさん、これからもどうぞよろしくね。


◆ 念のために帯域制限をかけておく


ここまで対策してきましたが、何の弾みで爆発的なアクセスがあるかわからないので、APIの読み込みに制限をかけることにします。

ここからの内容はサイト制作者向けのことなので読み飛ばしてもらっていいです。


 統計データのグラフの下にある各APIの読み込み回数表の、タイトルの部分をクリック。



 グラフの上にある3つの項目のうち 「割り当て」 クリック



この棒グラフの下にあるやつが制限値です。

ロード回数が無制限になってますね。大変危険な状態です。
右のペンマークみたいなやつをクリックして編集しましょう。




上限数をどのくらいにするかですが、無料枠が月28,000なら、30日で割ると1日の上限は933回までだと思いますが、まぁうちの場合はそこまで1日のアクセスはないですから1000にしてみました。
チェックは外したり入れたり面倒くさいですが、見ればわかると思います。

このページまで辿り着くことの方が10倍難しいと思いましたから。



◆ 呼び出し元の制限もかけましょう

APIキーというのは実は管理している本人でなくとも利用できちゃったりしますから、そうさせないために呼び出し元ドメインを設定します。
別に設定しなくても使えますが、そんなことしてたらAPIキー乗っ取られて使われてしまいますよ。

 
 認証情報というページに移動して、使用しているAPIキーをクリックします。
APIキーは塗りつぶしておきましたが、調べたらいくらでもわかりますからね。
勝手に乗っ取って使われててもこれまではタダだから気にする必要ありませんでしたが、これからは請求が来ても文句言えません。


アプリケーションの制限でHTTPリファラーを選択。
下の欄に入力フォームがあるので、そこに自分のサイトドメインを登録。
最後にアスタリスクをつけるとそのアドレス以下はなんでもいけるようになります。

ついでに、これを登録するとローカルホスト、つまり自分のマシン内で呼び出したときにエラーがでてしまうので、*localhost/ページのディレクトリ名/* を登録しておきましょう。
*localhost* だけだとヒネリがないので、誰かに勝手に使われてもしりません。



帯域制限については試行中なので、もしかすると制限を超えたエラーがでることもあるかもしれませんが、裏で色々試したりしていますので、そのうち落ち着くと思います。

ということでこれからも当サイトをよろしくお願いします。


PS... 私がお世話になっているポストマップとか、あれだけのサイトをいくつも運営してて課金とか大丈夫なんだろうか。
むしろクレジット登録してるのかさえ怪しいけども、おそらくは経費がキツくて休止するんじゃないかと思ってます。


◆ 参考にさせていただきました。

有料化に関しての問い合わせと回答についてはここにでていますので、熟読しましょう。
価格に関する一般的な質問 GoogleMapsPlatform
https://cloud.google.com/maps-platform/user-guide/pricing-changes/

Google Maps APIが新しくなる!Google Maps Platformの料金体系と必要な設定変更
https://www.marie-web.design/blog/google-maps-platform/

Google Mapsの課金方法が大幅変更 でも月額200ドルまでは無料
http://jindcny.com/blog-entry-619.html

6月11日以降、Google Maps APIによる地図表示が薄暗くなる/エラーになるケースも――「Google Maps Platform」移行で何が変わる?
https://internet.watch.impress.co.jp/docs/special/1124760.html

GoogleMaps APIの完全廃止について
https://wadachi.cyclekikou.net/leave_googlemap.php