D031 トレンド情報収集ポータル

元MD: d031-trend-info-portal.md / 変換: 2026-06-29 19:20

📌 目的・ゴール

白井さんが毎朝最新のAI/デザイントレンドを把握できる「情報キャッチアップ専用タブ」をポータルに追加する。

収集テーマ:

  1. 1
    AIでWebデザイン/LP/バナーをAIっぽく見せない技・最新テクニック
  2. 2
    Claude Code最新情報(新機能・Tips・活用事例)
  3. 3
    AI全般の最新情報(話題のツール・手法・事例)

収集元:

  • 1
    YouTube(動画)
  • 2
    X / Twitter(ポスト)
  • 3
    Threads(投稿)

完成イメージ:

  • 1
    タスク管理アプリ(yukichi-taskmanager.pages.dev)に「📡 トレンド」タブ追加
  • 2
    テーマ別・プラットフォーム別にフィルタリング可能
  • 3
    毎朝自動更新(launchd)
  • 4
    元リンクを開かずポータル内だけで全内容を読める(AIが要約した記事全文をポータル内に表示)

🔔 確認事項
  1. 1
    ~~Google Cloudのカード登録:すでに登録済みですか?~~ → ✅ 登録済み確認(2026-06-29)
  2. 2
    表示件数:テーマ×プラットフォームごとに何件まで表示したいですか?(デフォルト案:各5件、計45件)
  3. 3
    更新頻度:毎朝1回(8:00 AM)でよいですか?

💰 費用・API比較(重要)

各プラットフォームの情報収集方法と費用

プラットフォーム取得方法費用精度備考
YouTubeYouTube Data API v3(公式)無料★★★10,000 units/日。検索1回=100units → 100回/日まで無料
X (Twitter)Google Custom Search site:x.com無料★★100クエリ/日まで無料。超過時 $5/1,000クエリ
ThreadsGoogle Custom Search site:threads.net無料★★同上

※ Google Custom Search APIの無料枠は100クエリ/日。本システムの予想使用量は 6クエリ/日(テーマ3×2プラットフォーム)なので常に無料枠内

なぜX/ThreadsにGoogle Custom Searchを使うのか? - X公式APIは無料枠で「読み取り」がほぼ不可(投稿専用)。有料Basic=$100/月 - Threads公式APIは自分のアカウントのみ対応。他者の投稿を検索するAPIが未公開 - Google Custom Searchで site:x.com AIデザイン のように検索すると、Googleのインデックスを通じて公開投稿を取得できる(間接的だが合法的かつ無料)

要約方式(¥0・完全自動)

要約はAnthropicのAPIを使わず、Claude Code CLIを非対話モードで呼び出す方式。 claude -p "〇〇して" という形でシェルから自動実行でき、Maxプランの枠内なので追加費用¥0。

【毎朝 8:00 自動・launchd 1本で完結】

  ① Pythonスクリプト
     YouTube文字起こし・X・Threads の本文テキストを取得
     → Supabaseに「生テキスト」として保存

  ② Claude Code CLI(自動起動)
     claude -p "Supabaseの未要約データを読んで要約してSupabaseに書き戻して"
     → 要約完了 → ポータルに反映

  ※どちらも追加費用¥0(Maxプラン内)

【白井さんは朝ポータルを開くだけ】
  → 要約済みの情報が並んでいる状態

合計費用:月額¥0(Maxプラン契約済みのため)

必要なAPIキー取得(新規)

API取得場所費用所要時間
YouTube Data API v3Google Cloud Console無料15分
Google Custom Search APIGoogle Cloud Console(同じプロジェクトでOK)無料5分
カスタム検索エンジンIDProgrammable Search Engine無料10分

合計費用見込み:月額 ¥0(Maxプラン内で完結)


🏗️ 全体の作業フロー
Step
1
Google Cloudのカード登録確認(未登録の場合のみ)
登録済みならこのステップはスキップ
白井さん
Step
2
Google Cloud APIキー取得(Playwright自動操作)
プロジェクト作成→API有効化→CSE作成→キーをKeychainに保存まで自動
クララ
🛋️席外し
Step
3
データベース設計・Supabaseテーブル作成
trend_posts テーブル(生テキスト+要約+スコアカラム)をSupabaseに作成
クララ
Step
4
情報収集+自動要約スクリプト作成
Python収集→Supabase保存→Claude Code CLI要約→書き戻し(一気通貫)
クララ
Step
5
launchd ジョブ設定
毎朝8:00に全自動実行するplist作成・登録
クララ
Step
6
ポータルUIにタブ追加・デプロイ
「📡 トレンド」タブ実装→Cloudflare Pagesへデプロイ
クララ
Step
7
動作確認
ポータルで要約済み情報が表示されるか確認
白井さん
Step
8
完了レポート作成・Supabase登録
make_report.pyでHTML変換→保存→タスク完了登録
クララ

📐 技術設計

Supabaseテーブル設計(trend_posts

CREATE TABLE trend_posts (
  id          BIGSERIAL PRIMARY KEY,
  platform    TEXT NOT NULL,        -- 'youtube' / 'x' / 'threads'
  topic       TEXT NOT NULL,        -- 'ai_design' / 'claude_code' / 'ai_general'
  title       TEXT NOT NULL,        -- 動画タイトル or 投稿冒頭テキスト
  url         TEXT NOT NULL UNIQUE, -- 元記事URL
  thumbnail   TEXT,                 -- サムネイルURL(YouTube)
  author      TEXT,                 -- 投稿者名
  published_at TIMESTAMPTZ,         -- 投稿日時
  collected_at TIMESTAMPTZ DEFAULT NOW()
);

-- インデックス
CREATE INDEX idx_trend_posts_topic ON trend_posts(topic);
CREATE INDEX idx_trend_posts_platform ON trend_posts(platform);
CREATE INDEX idx_trend_posts_collected_at ON trend_posts(collected_at DESC);

品質フィルタリング(多層スクリーニング)

キーワード一致だけでなく、発信者の信頼性 × コンテンツの伸び の2軸でスクリーニングする。

多層フィルター構造

Layer 1: キーワード一致(基本フィルター)
   ↓ テーマキーワードにマッチする投稿を粗く取得

Layer 2: 発信者フィルター(信頼性)
   ↓ フォロワー/チャンネル登録者数が一定以上 or ホワイトリスト登録者
   ↓ ここで低品質アカウントを大量に除外

Layer 3: 伸びスコアフィルター(急上昇判定)
   ↓ 日あたり再生数・エンゲージメント率でスコアリング

Layer 4: Claude APIによる関連性スコア(オプション)
   ↓ タイトルを読んで「白井さんの知りたいテーマに合っているか」0〜10点評価
   ↓ 7点以上のみ保存

Layer 2 詳細:発信者フィルターの実装方法

YouTube:チャンネル登録者数フィルター(APIで自動取得)

① search.list で動画を取得 → channelId も同時に取得
② channels.list(id=channelId) で subscriberCount を取得
③ 閾値チェック:
   - subscriberCount >= 5,000 → 保存対象
   - subscriberCount < 5,000 → 除外
④ subscriberCount をスコアに乗算:
   登録者10万以上 → スコア×2.0
   登録者1万以上  → スコア×1.5
   登録者5千以上  → スコア×1.0
YouTube APIで登録者数が取れるのは、このフィルターが最も精度高く実現できる。

X・Threads:ホワイトリスト方式(APIで登録者数が取れないため)

Google Custom Search APIでは投稿者のフォロワー数が取得不可。代わりに:

方法A:信頼アカウント ホワイトリスト
   → 品質の高いAI系インフルエンサーのアカウントリストを設定ファイルに保存
   → 「このアカウントからの投稿のみ」に絞り込む
   → 例: site:x.com/levelsio, site:x.com/AnthropicAI 等

方法B:ドメイン別 Google CSE 設定
   → Programmable Search Engineで「信頼サイトリスト」を事前登録
   → 登録サイトのみから検索(ホワイトリスト管理をGoogleに委譲)

方法Bを採用(運用が楽・クララがCSEの設定ファイルを管理するだけ)

参考:日本語AI系 信頼アカウントリスト(初期設定)

カテゴリX/Threadsアカウント例
Claude Code / Anthropic@AnthropicAI, @ClaudeAI
AI全般(国内)フォロワー1万以上の生成AI系アカウント
AIデザインフォロワー5千以上のデザイン×AI系アカウント
⚠️ ホワイトリストの初期リストは白井さんが「参考にしたいアカウント」を指定してもらう or クララが調査してレコメンド → 承認後に設定ファイルに追記する運用。

Supabaseテーブルに追加するカラム(品質指標)

channel_subscribers BIGINT,  -- チャンネル登録者数(YouTubeのみ)
quality_score        NUMERIC, -- 総合品質スコア(0〜10)
is_whitelisted       BOOLEAN DEFAULT FALSE, -- ホワイトリスト発信者か

「伸びている」コンテンツの判定方法

単に新着や再生数だけでなく、急上昇しているコンテンツを優先して取得する。

YouTube:日あたり再生数スコア

伸びスコア = 総再生数 ÷ 公開からの経過日数

取得フロー:

① search.list
   → キーワード + publishedAfter=30日前 + order=viewCount
   → 直近30日以内の動画に絞って再生数順で最大20件取得

② videos.list(統計取得)
   → ①の動画IDをまとめて渡す
   → viewCount・likeCount・publishedAt を取得

③ Python側でスコア計算
   views_per_day = viewCount ÷ 経過日数
   engagement   = likeCount ÷ viewCount
   総合スコア   = views_per_day × (1 + engagement × 10)
   → スコア上位10件のみ保存

スコア判定例:

動画再生数投稿日日あたり再生判定
A50万3日前16.7万/日✅ 急上昇
B200万180日前1.1万/日普通
C10万7日前1.4万/日✅ 伸び中

X・Threads:「最新投稿」のみ(エンゲージメント取得不可)

Google Custom Search APIではいいね数・RT数が取得できないため、伸び判定ができない。代わりに:

  • 1
    直近7日以内の投稿のみ取得(dateRestrict=d7 パラメータ使用)
  • 2
    タイトルに「万いいね」「バズ」「話題」などが含まれる投稿を優先表示
ℹ️ X・Threadsの本格的な急上昇判定には席外しバッチ(Playwright)でトレンドページをスクレイプする方法もあるが、Phase 2以降の拡張として検討。

収集スクリプト(Python)

collect_trends.py
  ├─ YouTube Data API v3
  │   ├─ search.list(キーワード + 直近30日 + 再生数順)
  │   ├─ videos.list(統計取得)
  │   ├─ 伸びスコア計算(views_per_day × engagement補正)
  │   └─ 上位10件 → Supabase保存
  ├─ Google Custom Search API
  │   ├─ site:x.com + キーワード + dateRestrict=d7 → X投稿取得
  │   └─ site:threads.net + キーワード + dateRestrict=d7 → Threads投稿取得
  └─ Supabase INSERT(重複はURL UNIQUE制約でスキップ)

検索キーワード一覧:

テーマ検索キーワード(日本語・英語)
AIデザインAIっぽくない デザイン / AI generated design tips / AI LP制作 コツ
Claude CodeClaude Code / Claude Code 使い方 / Claude Code tips
AI全般AI最新情報 / 生成AI 活用 / AI tools 2025

Supabaseテーブルに追加するカラム(伸び指標):

views_count    BIGINT,   -- 再生数(YouTube)
views_per_day  NUMERIC,  -- 日あたり再生数(YouTubeのみ)
trending_score NUMERIC,  -- 伸びスコア(YouTubeのみ)

ポータルUIタブ設計

「📡 トレンド」タブ
├─ フィルターバー
│   ├─ テーマ: [すべて] [AIデザイン] [Claude Code] [AI全般]
│   └─ 媒体: [すべて] [YouTube] [X] [Threads] [🔥急上昇]
└─ 一覧(セクション区切り:急上昇 / テーマ別)
    ├─ プラットフォームアイコン
    ├─ サムネイル(YouTube)
    ├─ タイトル
    ├─ 1〜2行のフック(白井さんに刺さる一言)
    ├─ タグ(テーマ・キーワード・急上昇)
    └─ クリックで展開
        ├─ ✦ なぜあなたに刺さるか(常時表示)
        ├─ [📋 要点] / [📄 詳細記事] タブ切り替え
        │   ├─ 要点タブ(デフォルト)
        │   │   ├─ 📄 内容まとめ
        │   │   ├─ 🎯 要点(番号付き)
        │   │   ├─ ✨ 導入すると(色分け4セルグリッド)
        │   │   └─ → 試すアクション
        │   └─ 詳細記事タブ
        │       └─ 元リンクを開かずにポータル内で読める長文記事(背景・詳細解説・白井さんへの示唆)
        ├─ [💡 ネタストックに追加] ← 押すとSupabase neta_stockに即登録
        ├─ [やらない] ← カードをグレーアウト
        └─ メモ欄(自由記入 → Supabase自動保存)

「💡 ネタストックに追加」ボタンの動作:

  • 1
    押すと neta_stock テーブルにINSERT
  • 2
    登録内容:title(タイトル)/ source_url(元URL)/ platform(YouTube等)/ source("trend"固定)/ memo(メモ欄の内容)/ priority("中"デフォルト)/ status("💡ストック中")
  • 3
    ボタンが「✓ ネタストックに追加済み」に変わり再押し不可・カード枠が緑に変わる
  • 4
    タスク管理アプリの「💡 ネタストック」ページにそのまま表示される

launchd設定

ジョブ名: com.shirai.trend-collector
実行時刻: 毎朝 8:00 AM
スクリプト: ~/scripts/collect_trends.py
環境変数: YOUTUBE_API_KEY, GOOGLE_CSE_KEY, GOOGLE_CSE_ID

📋 フェーズ別タスク

Phase 0:準備

白井さんが必要なのは:なし(すべてクララが実施)

Google Cloud お支払い情報:登録済み確認済み(2026-06-29)

以下はクララが席外し(Playwright)で実施:

  • [席外し] Google Cloudプロジェクト作成
  • [席外し] YouTube Data API v3 有効化
  • [席外し] Google Custom Search API 有効化
  • [席外し] Programmable Search Engine(カスタム検索エンジン)作成・検索エンジンID取得
  • [席外し] APIキーをファイルに保存 → MacのKeychainに登録(security add-generic-password

Phase 1:バックエンド構築(クララ)

  • Supabase trend_posts テーブル作成
  • 収集スクリプト collect_trends.py 作成・テスト
  • 自動要約スクリプト作成(Claude Code CLI呼び出し)
  • launchd plist 作成・登録(収集→要約 一気通貫)

Phase 2:フロントエンド実装(クララ)

  • タスク管理アプリに「📡 トレンド」タブ追加
  • フィルター機能実装(テーマ・プラットフォーム・急上昇)
  • カード表示UI実装(サムネイル・要約・スタッツ)
  • Cloudflare Pagesへデプロイ

Phase 3:確認・稼働(両方)

  • 白井さんによる動作確認(ポータルで表示チェック)
  • launchd 本番稼働開始
  • 定期実行一覧.md 更新

Phase 4:完了レポート(クララ)

  • 完了報告レポート作成(make_report.py でHTML変換)
  • 保存先:D031_トレンド情報収集ポータル/レポート/YYYY-MM-DD_d031-trend-portal-complete.html
  • Supabaseタスクに完了登録

実行ログ
2026-06-29 00:00プラン作成(D031)
2026-06-29 00:01「伸びているコンテンツ」判定ロジック追記(YouTube日あたり再生数スコア・X/Threads直近7日フィルター)
2026-06-29 00:02品質フィルタリング多層構造を追記(YouTube登録者数フィルター・X/Threadsホワイトリスト方式・Claude APIスコアリング)
2026-06-29 00:03要約方式を¥0構成に変更(Anthropic API廃止→Claude Code Maxプラン内で要約)・作業フロー更新
2026-06-29 00:04要約を完全自動化(Claude Code CLI非対話モード→launchdから自動起動)・白井さん指示不要に変更
2026-06-29 00:05Phase 0をPlaywright席外しに移管(APIキー取得全自動化)・白井さん担当はカード登録確認のみに縮小・Phase 4完了レポート作成ステップ追加
2026-06-29 00:06Google Cloudカード登録済み確認→白井さん担当ゼロ確定
2026-06-29 00:07「気になる」ボタン=ネタストック即登録(A案)に確定。プラン・モック更新
2026-06-29 00:08UIモック更新:ダークテーマ→ポータル準拠のライトiOSテーマに全面修正(#F2F2F7背景・白カード・#007AFF)
2026-06-29 00:09UIに詳細記事タブ追加(📋 要点 / 📄 詳細記事 切り替え)。元リンク不要でポータル内だけで全内容閲覧可能に
2026-06-29 00:10導入効果グリッドにカラー追加(青/オレンジ/インディゴ/緑の色分け)
2026-06-29 00:11Supabase neta_stock テーブルにカラム追加完了:source_url / platform / source / memo(すべて任意・デフォルト空文字)