この記事で分かること
YouTube Analytics APIを叩いて403が返ってきたとき、真っ先に権限(スコープ)を疑って時間を溶かした話です。結論としては原因は権限ではなく、Google Cloudのそのプロジェクトで YouTube Analytics API が有効化されていなかっただけでした。同じ403で止まっている人が、エラーメッセージのどこを読めばいいかが分かります。
起きたこと:APIを叩いたら403
YouTube Analytics APIにリクエストを投げたところ、レスポンスが403で返ってきました。認証は通っているつもりだったので、最初は何が起きているのか分かりませんでした。
HTTPステータスの403は「禁止」なので、反射的に「アクセス権がない」と読んでしまいます。私もそう読みました。そしてそれが間違いでした。
最初の判断:スコープが足りないと思い込んだ
403を見た時点で、私は「OAuthのスコープが足りていない」と判断しました。YouTube Analytics系はスコープの指定を間違えやすいという先入観があったので、そこを疑うのが自然に感じたのです。
ただ、この判断には根拠がありませんでした。ステータスコードだけを見て、レスポンスの中身であるエラーメッセージをきちんと読んでいなかったからです。
実際の原因:APIが有効化されていなかった
エラーメッセージには、こう書かれていました。
has not been used in project N
「このプロジェクトでまだ使われていない」と書いてあります。権限が足りないとは一言も書いていません。つまりこれは、権限の話ではなく、Google Cloud のそのプロジェクトで YouTube Analytics API が有効化されていない、という意味でした。
スコープをいじっても、認証情報を作り直しても、この403は消えません。プロジェクト側でAPI自体がオフのままだからです。
対処:コンソールで1クリック
Google Cloud コンソールで該当プロジェクトの YouTube Analytics API を有効化しました。作業としては1クリックです。その後に同じリクエストを投げたら、あっさり通りました。
直す作業そのものは一瞬でした。時間がかかったのは、原因を「権限」だと思い込んでいた間の調査です。エラーメッセージを最初に読んでいれば、この回り道はありませんでした。
学び:403を見たらメッセージ本文を読む
今回の教訓は単純です。403 = 権限不足、と決めつけないことです。403という数字は同じでも、その裏にある理由は複数あります。今回のように、そもそもAPIが有効化されていない場合も403で返ってきます。
- ステータスコードだけで原因を推測しない
- レスポンスのエラーメッセージ本文を必ず読む
has not been used in projectという文言が出ていたら、それは権限ではなく有効化の問題- スコープや認証情報をいじり始める前に、メッセージが何を言っているかを確認する
まだ分かっていないこと
YouTube Analytics APIが返す403のうち、どのパターンが権限起因で、どのパターンが有効化起因なのか、その全体像までは私は把握していません。今回確認できたのは、「has not been used in project」というメッセージが出るケースは有効化の問題だった、という一件だけです。それ以外のメッセージが出た場合に同じ対処が効くかどうかは、私の手元では検証できていません。
また、なぜプロジェクトで有効化されていない状態のまま認証だけ通ってしまうのか、その仕組み上の理由についても、私はきちんと説明できるだけの情報を持っていません。
まとめ
- YouTube Analytics APIを叩いたら403が返ってきた
- 反射的にスコープ(権限)の問題だと判断したが、それは誤りだった
- エラーメッセージには「has not been used in project N」と書かれていた
- 実際の原因は、Google Cloud のそのプロジェクトで YouTube Analytics API が有効化されていなかったこと
- Cloud コンソールで1クリック有効化したら、リクエストは通った
- 403を見たら権限不足と決めつけず、まずエラーメッセージ本文を読むこと
- 今回確認できたのはこの1パターンのみで、他の403の原因までは検証できていない


