先に結論だけ言います。
Google APIを使った自動取得が「ある日とつぜん」動かなくなったら、OAuthの設定が「テストモード」のままになっている可能性が高いです。 Search ConsoleやGA4のような外部データを扱うアプリの場合、テストモードで発行されるトークンは7日で勝手に失効します。直し方は、同意画面を「本番環境」に公開して、トークンを一度だけ取り直すだけ。作業そのものは5分で終わります。
私はこれに気づくのに数日かかって、その間ずっと解析データが欠けていました。同じ落とし穴にハマる人が一人でも減るように、当日やったことをそのまま書き残します。
ある朝、解析ダッシュボードが1週間分データを止めていた
私はこのブログ(nomublog.com)の数字を、自分で組んだ小さなツールで毎朝自動取得しています。Search ConsoleとGoogleアナリティクス(GA4)を中心に、複数のデータを1つにまとめて、毎朝7時にパソコンが勝手に取りに行く仕組みです。
ところがある日ダッシュボードを開くと、グラフが途中でぷつりと途切れていました。最新の日付が1週間ほど前で止まっている。その間に記事を2本公開していたので、本来なら一番見たいタイミングの数字がごっそり抜けていたわけです。
「サーバーが落ちたのかな」と最初は思いました。でも自動取得のログを見たら、原因はもっと地味で、もっと厄介なものでした。
エラーの正体は「invalid_grant: Token has been expired or revoked」
ログに残っていたのは、これでした。
google.auth.exceptions.RefreshError:
('invalid_grant: Token has been expired or revoked.',
{'error': 'invalid_grant',
'error_description': 'Token has been expired or revoked.'})
日本語にすると「トークンが失効、または取り消されました」という意味です。
ここで多くの人(過去の私を含む)が勘違いします。「取り消された」と書いてあるので、自分が何か設定を消したのか、Google側で凍結されたのか、と疑ってしまうんです。でも実際は、何も悪いことをしていなくても、勝手にこうなります。
しかもこのエラーには特徴があって、最後に成功した日からちょうど7日後あたりで起き始めるんです。私の場合も、最後にデータが取れた日から数えて、ぴったり1週間後から失敗が連続していました。この「7日」というのが、原因を突き止める一番のヒントでした。
原因:Google OAuthの「テストモード」はトークンが7日で失効する
GoogleのAPI(Search ConsoleやGA4など)を自分のプログラムから使うときは、「OAuth」という仕組みで利用許可をもらいます。このとき作る「OAuth同意画面」には、公開ステータスという設定があります。
- テスト中(テストモード):開発中の人が自分で試すための状態
- 本番環境(公開):実際に運用する状態
ここが落とし穴です。
公開ステータスが「テスト中」のままだと、発行されるリフレッシュトークン(自動で再ログインするための鍵)は7日間で失効します。
これはGoogleの正式な仕様で、バグでも障害でもありません。テストモードはあくまで「お試し中」の扱いなので、鍵が長持ちしないようになっているんです。
ひとつ補足すると、この7日失効が起きるのは正確には「外部ユーザー向けの設定で、かつSearch ConsoleやGA4のような機微なデータにアクセスするアプリ」の場合です。メールアドレスや名前を読む程度の軽いアプリなら、テストモードでも7日では切れないこともあります。ただしブログ解析のように外部のデータを取りに行くツールは、まず確実にこの7日失効に当たります。
最初にツールを作って動かした直後は、テストモードのままでも普通に動きます。だから「完成した、よし」と満足してしまう。そして7日後に、忘れた頃に止まる。これが本当にやっかいなところで、作った当日には絶対に気づけません。
私のツールも、まさにこのパターンでした。作って数日は快調、その後の朝の自動取得から、毎日きっちり失敗し続けていたわけです。
恒久対策:OAuth同意画面を「本番環境」に公開する
直し方はシンプルです。テストモードをやめて、本番環境に切り替えます。これで7日失効はなくなります。
手順は次のとおりです。
- Google Cloud コンソールを開く(自分のプロジェクトのもの)
- 左メニューの「Google Auth Platform」→「対象(オーディエンス)」を開く
- 「公開ステータス」の欄を見る。ここが「テスト中」になっているはず
- すぐ下の「アプリを公開」ボタンを押す
- 「本番環境に push しますか?」という確認が出るので「確認」を押す
これだけです。ステータスが「本番環境」に変われば成功で、もう7日ごとに鍵が切れることはなくなります。
ボタンの位置や文言はGoogleの仕様変更でたまに変わりますが、「公開ステータス=テスト中」を探して「公開」に切り替える、という流れは同じです。
仕上げ:トークンを一度だけ取り直す
ここで一つ注意があります。本番に切り替えても、すでに失効した古い鍵は自動では復活しません。
なので、本番化したあとに一度だけ、手動でログインし直して新しい鍵を取り直す必要があります。
- 失効した古いトークンのファイル(多くは
token.jsonなど、リフレッシュトークンを保存しているファイル)を退避する(念のためバックアップしてから削除) - 初回セットアップのときに一度走らせた認証用のスクリプトを、ターミナルでもう一度実行する
- ブラウザでGoogleのログイン許可画面が開くので、自分のアカウントを選んで必要な権限を許可する
- 新しいトークンが、元と同じ場所に保存される
この再ログインは最初の一回だけです。本番モードで取り直した鍵は、もう7日では切れないので、以降は放っておいても自動取得が回り続けます。私の場合、ここまでやって取得を回し直したら、止まっていた1週間分のデータが一気に埋まりました。
「このアプリは確認されていません」警告は、そのまま進めて大丈夫
本番に切り替えて再ログインすると、許可画面で「このアプリはGoogleで確認されていません」という警告が出ることがあります。ここで不安になって手が止まる人が多いです。
結論から言うと、自分専用のツールを、自分のアカウントで使うだけなら、そのまま進めて問題ありません。
この警告は「Googleの審査をまだ受けていないアプリですよ」という意味です。不特定多数に配布するアプリなら審査が必要ですが、自分のデータを自分で取りに行くだけの個人用ツールなら、審査を出さなくても自分自身は使えます。警告画面の「詳細」→「(アプリ名)に移動」と進めば先に行けます。
不安な場合の見分け方はシンプルで、そのアプリを作ったのが自分自身かどうかです。自分で作って自分のアカウントで動かしているなら、それは見知らぬ他人のアプリではありません。
よくある質問
Q. テストモードのまま、7日失効を回避して使い続ける方法はありますか?
基本的にありません。7日ごとに手動で再ログインしてトークンを取り直せば動き続けますが、毎週その手作業が必要になります。放っておいても自動で回したいなら、本番公開が唯一の現実的な答えです。
Q. 本番公開にすると、Googleの審査や費用がかかりますか?
かかりません。公開ステータスを切り替えるだけで、料金は無料です。Googleの正式な審査(verification)は、不特定多数に配布して「未確認」警告を消したいときだけ必要になるもので、自分専用のツールなら出さなくても自分は使えます。
Q. 7日以外に、トークンが失効する原因はありますか?
あります。本番公開していても、リフレッシュトークンを半年(約6か月)使わずに放置すると失効します。毎日自動取得しているなら、この半年ルールには引っかかりません。ほかに、Googleアカウントのパスワード変更や、アプリのアクセス権を自分で取り消したときも失効します。
個人開発で自動取得を組むなら、最初から本番公開にしておく
今回の教訓を一行にすると、こうです。Google APIで自動取得を作るなら、動いた時点で満足せず、最初からOAuthを「本番公開」にしておく。 これに尽きます。
テストモードのままだと、作った当日は気づけないまま7日後に静かに止まります。しかも「Token has been expired or revoked」という、いかにも自分が何かやらかしたように見えるエラーで止まるので、原因にたどり着くまで時間を溶かしがちです。
私はこの手の「自分のブログ運営まわりの仕組みを自作して、後から痛い目を見る」のを何度かやっています。以前はブログ移行で301リダイレクトを甘く見て検索流入を一度失ったこともありました。小さな自動化ほど、作った直後より数日〜数週間後に牙をむくのだと、毎回思い知らされます。
ちなみに今回止まっていたのは、Search ConsoleやGA4を束ねた自分用のブログ解析ツールです。こういう「自分の数字を自分の手元で束ねる」自動化を、個人開発でちまちま作っては、今回のような穴に落ちて記録を残しています。同じ沼にいる方は、プロフィールやX(@nomu_jj1)ものぞいてみてください。似た運用メモを時々書いています。
同じ発想で、なろう小説の複数作品のアクセスをまとめて見られるツールも作って公開しています。こちらは作家向けですが、「自作の解析ツール」つながりで興味があればどうぞ。
- なろう作家向け「複数作品まとめてアクセス解析」ダッシュボードを自作した話
- ツール本体(note・¥980):なろう作家用アクセス解析ダッシュボード
自動取得が「ある朝とつぜん止まった」人の、原因切り分けの足しになればうれしいです。