## What — クォータ制のコスト構造
### 課金は存在しない(クォータ制)
従量課金ではなく**1日10,000ユニットのポイント制**。使い切ると課金されるのではなく、ただ403エラーで止まる。だからAPIキーが流出しても金銭被害はゼロ(最悪、当日の枠が焼かれるだけ)。リセットは太平洋時間の深夜0時=日本時間16時(夏)/ 17時(冬)。
### 操作ごとのコスト(ここが設計の肝)
| 操作 | ユニット | 備考 |
| --- | --- | --- |
| キーワード検索 (search) | **100** | 突出して高い。1回で最大50件 |
| 動画統計 (videos) | 1 | IDをカンマ連結して**50本まとめて1回**で取る |
| チャンネル統計 (channels) | 1 | 同上。登録者数はここ |
| 投稿一覧 (playlistItems) | 1 | チャンネル監視はこれ。**searchでやると100倍のコスト** |
「どの窓口から取るか」でコストが桁で変わる。チャンネル監視をsearchでやるかuploads(playlistItems)でやるかで同じ結果が**100 vs 2ユニット**。
### 検索結果に再生数は入っていない(二段取得)
searchが返すのはタイトル・チャンネル名・投稿日まで。再生数が欲しければ、searchで得たvideoIdをvideosに投げ直す**二段取得**が必須。ここを知らないと「API使ってるのに数字がない」と混乱する。
### 「伸びている」は自分で定義する
APIはランキングをくれない。指標は2つ組み合わせる。
- **伸び率** = 再生数 ÷ 登録者数(2.0x以上が目安。チャンネル規模に対するバズ度)
- **勢い** = 再生数 ÷ 投稿からの経過日数(古い動画の伸び率が過大に出るのを補正)
## How — キー管理と実装
キー管理は3レイヤー。
```
Google Cloud(発行・API制限・無効化・使用量の正本)
↓
macOS Keychain(暗号化保管。gitの外なのでコミット事故が構造的に起きない)
↓
スクリプト(キー本体は書かず、実行時に解決する)
```
スクリプト側の解決はこの1行。`${変数:-フォールバック}` はbashの定番イディオム:
```bash
KEY="${YOUTUBE_API_KEY:-$(security find-generic-password -s youtube-api-key -w)}"
```
- Keychainへの保存は `security add-generic-password -a "$USER" -s youtube-api-key -w 'キー' -U`
- 漏洩を疑ったらConsoleでキー再生成 → Keychainを上書きすれば旧キーは即死(ローテーション)
- キーには「YouTube Data API v3のみ」の**API制限**を掛ける。有料API(Maps系)と請求先連携が揃うと流出時に実害が出るため、防壁を多層にする
実装はClaude CodeのSkill `youtube-research`(dotfiles内 `~/.claude/skills/youtube-research/`)として済んでいる。「YouTubeで◯◯調べて」で検索クエリ設計→取得→伸び率計算→チャット報告まで動く。
> [!warning] つまずきどころ
> - 1語クエリはジャンルが偏る(「恋愛」→漫画系ばかり。「恋愛 心理」でハウツー系に変わる)。**2語に絞る**
> - 登録者数は3桁精度の概数で返る
> - 字幕取得だけはAPIキー不可(OAuth必須)。文字起こし系をやるなら別設計
## 関連
- [[AIと働く]]
- [[APIとJobの違い]]