見出し画像

生成AIでトレンドを見逃さない!YouTubeバズ分析アプリを作ってみた

⭐️ はじめに


YouTube上での最新トレンドを追うのは、時間も労力もかかる作業です。それでも、マーケティングやコンテンツ制作の場面では、トレンドを見逃さないことが成功の鍵になります。

この問題を解決するために、Slackと連携した「バズ投稿分析アプリ」を開発しました!このアプリは、生成AIとYouTube APIを駆使して、最新のトレンド情報を分析、Slackに送信することで、広告戦略やコンテンツ制作に役立てます。

💡このツールでできること

  • 視聴回数が多い動画や話題になっているコンテンツを自動で抽出!

  • 視聴者のコメント分析で、動画が人気を集めた理由を即座に把握!

  • マーケティングやコンテンツ制作に役立つトレンド情報をスピーディに提供!

💡作成した動機

「最新トレンドを見逃さず、最高のコンテンツを作りたい!」と思う人は多いはずです。しかし、YouTubeでの情報提取や分析は時間も労力もかかります。そこで、Slackにメッセージを投げるだけで「最新トレンド」を分析してくれるツールを作成しました。

💡 使い方のイメージ

  1. Slackにキーワードを投稿(例:「直近60日でバズってる生成AI動画を調べて」)

  2. ボットが作動をトリガーし、YouTubeのAPIから情報を収集

  3. 分析された結果がSlackに送信!

  4. 視聴回数、コメント数、バズの要因仮説がわかる!

これにより、視聴者の営みのポイントや、どのようなコンテンツが見られているのかを簡単に把握できます!

全体傾向に対する分析結果
各動画に対する詳細分析結果
元動画のリンク付きで出力

⭐️ ユースケース例

💡 1.  マーケティング担当者

ペルソナと目的

食品メーカーのマーケティング担当者が、新商品のSNSキャンペーンで認知度とエンゲージメントを高めたい。

シチュエーションと解決方法

「バズるレシピ動画」を作りたいが、視聴者の好みに合うトーンやテーマが分からない。
→ クエリ例:「直近30日間でバズっている料理関連の動画を調べて」
結果:

  • バズの特徴: 簡単、映える、10分以内で作れる料理。

  • 視聴者層: 主婦層(20〜40代)が中心。

意思決定

結果をもとに「映える簡単レシピ」をテーマにした動画を企画し、主婦層を狙った昼間投稿&ビジュアルを重視したキャンペーンを実施。

💡 2. コンテンツクリエイター

ペルソナと目的

登録者数5万人の個人YouTuberが、視聴者を増やし、10万人達成を目指したい。

シチュエーションと解決方法

他の人気ゲーム実況者との差別化を図りたい。
→ クエリ例:「直近60日でバズっているゲーム実況動画を調べて」
結果:

  • バズの特徴: ホラーゲームの初見プレイ、大爆笑バグ特集。

  • 視聴者層: 10〜20代前半、男女比6:4。

意思決定

「バグ特集」と「ホラーゲーム初見」をテーマにした動画を制作。視聴者の反応を強調したサムネイルとタイトルを設定してクリック率を向上。

💡 3.  データアナリスト

ペルソナと目的

IT業界向けコンサルタントのデータアナリストが、生成AI市場のトレンドをクライアントに提案するためのレポートを作成したい。

シチュエーションと解決方法

生成AIの最新動向を把握し、クライアントのマーケティング戦略に活かしたい。
→ クエリ例:「生成AI関連の動画トレンドを直近90日間で調べて」
結果:

  • バズの特徴: 視覚的なインパクト、ユーモアを活用した動画が人気。

  • 視聴者層: テクノロジー、デザインに興味のある層。

意思決定

「視覚的インパクトと親しみやすさ」を重視するトレンドをレポートに反映し、生成AIを活用したマーケティング施策を提案。

このように、さまざまなユースケースで活用可能です!

⭐️ 処理フローの解説

より理解を深めていただくためにシステムフローについて解説させていただきます!

💡 1. リクエスト開始

ユーザーがSlackで@bot 直近60日の生成AI動画を分析してのようにボットをメンション 


FastAPIがSlackイベントを受け取り、ワークフローマネージャーに転送

💡 2. LangGraphワークフロー処理

2-1. クエリ変換フェーズ

ユーザーが入力した曖昧なメッセージを、YouTube APIが理解できる具体的な検索クエリに変換するプロセスです。このフェーズでは、自然言語の指示から適切なキーワードを抽出し、検索対象を絞り込むための期間や条件を解析します。
以下を意識して作成しました!

  • 効率的なトレンド検出: ユーザーの曖昧なニーズを具体化することで、正確なトレンド情報を取得可能にします。

  • 自動化による時間短縮: 手動での検索条件設定を不要にし、より高速に利用可能にします。

プログラム

def query_transformation_node(state: State) -> State:
    prompt = ChatPromptTemplate.from_template("""
    以下のユーザーメッセージをそのままYouTube APIに入力する形式で検索に適したクエリに変換してください:
    {message}
    例えば、「直近60日のマーケティングの動画について調査したい」という場合は、query=マーケティング、period=60
    「直近90日の英語学習について知りたい」という場合は、query=英語学習、period=90など                                
    """)
    chain = prompt | get_llm().with_structured_output(QueryTransformationOutput, method="function_calling" )
    result: QueryTransformationOutput = chain.invoke({"message": state.query})
    state.query = result.query
    state.period = result.period
    return state

2-2. 動画データ収集フェーズ

クエリ変換フェーズで生成された検索条件を基に、YouTube APIを活用して関連動画データを取得するフェーズです。視聴回数やコメント数、動画詳細情報を効率よく収集し、最大限のインサイトを引き出すための基盤を作ります。具体的なプロセスとしては、

  • 検索APIで指定期間内の人気動画を検索

    • 視聴回数順でソートしていますが、オススメ順などにも変更可能です。

  • Statistics APIで各動画の詳細データ(視聴回数、コメント数)を取得。

  • Comments APIで動画のコメントを抽出し、視聴者の反応を把握。

    • 処理が重たくなるため、1動画あたり30件取得する仕様にしています。

プログラム

def video_analysis_node(state: State) -> Dict:
    youtube_service = YouTubeService()
    state.videos = youtube_service.search_trending_videos(query=state.query, period=state.period)
    return state

2-3. トレンド分析フェーズ
収集した動画データやコメントを基に、トレンドの傾向やバズの要因を深掘り分析するフェーズです。このフェーズでは、データから具体的なインサイトを引き出し、マーケティングやビジネス戦略の意思決定をサポートします。具体的なプロセスとしては、

  • 全体傾向分析: 視聴回数やコメント数の相関を確認し、バズの特徴を特定。

  • 個別動画分析: タイトルや内容、コメントから人気の理由を明確化。

  • 視聴者層推定: 動画視聴者の年齢層や興味関心を推測。

  • コメント感情分析: ポジティブ・ネガティブ・中立に分類し、視聴者の反応を深掘り。

  • キーワード頻度分析: 動画やコメント内で頻出する単語を抽出し、トレンドの要素を可視化。

プログラム

def trend_analysis_node(state: State) -> Dict:
    prompt = ChatPromptTemplate.from_template("""
    以下のYouTube動画データを基に、対象クエリ関連でバズっている傾向を分析し、需要がある動画を企画するための情報を具体的に言語化してください。  
    また、**個別動画の特徴と検索結果全体の傾向**を両方分析してください。

    **Slackで見やすい形式**で出力してください。以下の点を守ってください:
    - Markdown形式を使用し、Slackで適切にフォーマットされるようにしてください。
    - 箇条書き(`-` や数字付きリスト)を適切に使用し、インデントを守ってください。
    - URLはSlackのリンクフォーマット (`<URL|表示名>`) を使用してください。
    - 見出しやリスト項目の間に改行を入れて、読みやすくしてください。

    ---

    ### 【動画データ】
    以下は分析対象のYouTube動画データです。
    - 動画ID: `{{video_id}}`  
    - 動画URL: `<https://www.youtube.com/watch?v={{video_id}}|{{title}}>`  
    - 視聴回数: {{view_count}}  
    - コメント数: {{comment_count}}  
    - コメント内容: {{comments}}  
    
    {video_data}

    ---

    ### 【要件】

    #### **1. 検索結果全体に対する分析**

    1. **全体傾向の分析**  
    - 対象クエリ関連の動画で、視聴回数やコメント数の多い動画に共通する特徴を抽出してください。
    - 全体としてバズっている傾向を整理してください(例: 感動系、ユーモア系、インタラクティブ要素など)。

    2. **人気の要因の比較**  
    - 各動画の人気要因を比較し、共通点や差異を整理してください。

    ---

    #### **2. 動画単位での分析**

    各動画について以下を明確にしてください:
    1. **動画の特徴**  
    - **動画URL**: `<https://www.youtube.com/watch?v={{video_id}}|{{title}}>`  
    - **視聴回数**: {{view_count}}  
    - **コメントの数**: {{comment_count}}  
    - **概要**: {{動画の内容、テーマ、トーンなどを簡潔に記述}}  
    - **人気の理由**: {{視聴者が共感・興味を持つポイントなどを記述}}  

    2. **視聴者層の推定**  
    - データやコメント内容から、視聴者の年齢層、性別、興味関心を推定してください。

    3. **コメント分析**  
    - **感情分析**:  
        - ポジティブコメント: {{割合と特徴的な例}}  
        - ネガティブコメント: {{割合と特徴的な例}}  
        - ニュートラルコメント: {{割合と特徴的な例}}  
    - **頻出キーワード**: {{コメントに含まれるキーワード一覧}}  

    ---

    Slackに投稿する際、この書式に従ってください。

    """)
    chain = prompt | get_llm().with_structured_output(TrendAnalysisOutput, method="function_calling" )
    result: TrendAnalysisOutput = chain.invoke({"video_data": state.videos})
    state.trend_analysis = result.trend_analysis
    return state

参考: LangSmith上の実行履歴

💡 3. レスポンス返却

  1. 分析結果をMarkdown形式に整形

  2. FastAPI経由でSlackに送信

  3. スレッド内に分析レポートを投稿

⭐️ おわりに、そして感謝を込めて

ここまでご覧いただき、誠にありがとうございます。
本記事では、Slackと生成AIを活用した「バズ投稿分析アプリ」の仕組みと、その実用性について詳しく解説しました。このツールを通じて、視聴者の興味やトレンドを効率的に把握し、データに基づいて意思決定を支援する方法をご紹介しました。

私たちは、単なるツール提供にとどまらず、クライアントのビジネス課題に合わせたカスタマイズや運用支援まで実施しております。もし「自社に合わせた分析ソリューションが欲しい」とお考えであれば、まずはお気軽にお問い合わせください!

メールアドレス

⭐️ 付録: 利用技術スタック (開発者向け)

💡 1. クラウド構成

💡 2. 利用技術概要

  • クラウド: GCP (Cloud Run, Artifact Registry)

  • バックエンド: Python (FastAPI, LangGraph, Slack API)

  • ML: OpenAI GPT-4, LangSmith

  • 運用: Docker, Terraform


いいなと思ったら応援しよう!