🚀 Cursor + Python🔥YouTube動画要約！！




## 🎯 はじめに

「気になる技術動画、見る時間がないな…」「セミナーの内容、パッとテキストで読みたいな！」
そんな風に思うこと、ありますよね？

特にCursorを使いこなす皆さんにとって、動画での情報収集はとっても大事。
今回は、私たちが使っている **「YouTube動画要約機能」** の裏側をこっそりご紹介しますね！✨

---

## ✨ この機能って何ができるの？

簡単に言うと、**YouTube動画の話している内容を文字にして、さらにAIが「ここ大事！」ってポイントを教えてくれる機能**です！

*   🗣️ **文字でサッと読める**: 動画を再生しなくても、テキストで内容をチェック！
*   📝 **要点をパッと把握**: 長い動画も、大事なところだけ抜き出して時短に貢献⏱️
*   💡 **インプットがスピードアップ**: 効率よく新しい知識をゲットできます！
:::note warn
💰 **コストを気にせず使える**: CursorならAPI使用料を気にせず、定額で何度でも要約し放題！ (←ここ大事！😉)
   **✍️ cursorのチャットでいつでも動画翻訳ができる**
:::
👉 あなたの「知りたい！」を、もっとスムーズに叶えます🚀

---

## ⚙️ 使い方と仕組み：PythonスクリプトとAI連携の裏側

この便利な機能は、実は **Pythonスクリプト** と **私（CursorのAI）** の連携プレー🤝で成り立っています。ここでは、その使い方と裏側の仕組みを一緒に見ていきましょう！

### 1. まずは準備：Cursorに「魔法の呪文」を教えよう！ ⚙️

最初に、`youtubeyouyaku` というコマンド（魔法の呪文🧙‍♀️）をCursorが理解できるように設定します。

1.  Cursorの左側メニューから **⚙️ Settings (設定)** をクリック。
2.  **Rules (ルール)** セクションを選びます。
3.  **User Rules** に、こんなルールを書き込みます✍️ (パスはあなたのPC環境に合わせてくださいね！)：

```
    "youtubeyouyaku"のあとにURLが貼られたらcd C:\you-projrct; Python youtube_summarizer.py 
のあとにURLをつけて実行してその結果を要約してチャット欄に出力してね。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012869/a2fedf92-d65f-4f90-8991-3c48bc41d9e3.png)


これで準備OK！Cursorは `youtubeyouyaku [URL]` を見たら、「よし、`youtube_summarizer.py` スクリプトを動かして、結果を要約するぞ！」と理解してくれます👍

### 2. 使ってみよう：コマンド一発で要約スタート！ 🚀

準備ができたら、あとは簡単！Cursorのチャットに、要約したいYouTube動画のURLと一緒にコマンドを入力するだけです。

```
youtubeyouyaku https://youtu.be/xxxxxxxxxxx
```
(例としてNet Ninjaさんの動画を使ってみますね)
```
youtubeyouyaku https://youtu.be/OHT0wGUz5GI?list=PL4cUxeGkcC9goeb7U1FXFdNszWetCmhfB
```

これを実行すると、裏側では次のようなことが起こっています👇

### 3. 裏側の動き：スクリプトが文字起こし → AIが要約！ 🐍➡️🧠

あなたがコマンドを実行すると、まずStep1で設定した **`youtube_summarizer.py`** というPythonスクリプトが動き出します。

**このスクリプトの役割は、指定されたYouTube動画から「文字起こしデータ」を取ってくること！**

これがそのスクリプト (`youtube_summarizer.py`) の中身です：

```python
# youtube_summarizer.py

from youtube_transcript_api import YouTubeTranscriptApi
import argparse
import os
# import google.generativeai as genai # 不要になったためコメントアウトまたは削除

# --- APIキー設定は不要 ---
# API_KEY = os.getenv("GOOGLE_API_KEY")
# if not API_KEY:
#     print("警告: 環境変数 GOOGLE_API_KEY が設定されていません。要約機能は利用できません。")
# else:
#     genai.configure(api_key=API_KEY)

def get_transcript(youtube_url):
    """YouTube動画のURLから文字起こしを取得する"""
    try:
        # URLからVideo IDを抽出 (より堅牢な方法も検討可能)
        if "v=" in youtube_url:
            video_id = youtube_url.split("v=")[1].split("&")[0]
        elif "youtu.be/" in youtube_url:
            video_id = youtube_url.split("youtu.be/")[1].split("?")[0]
        else:
            print("エラー: 有効なYouTube URL形式ではありません。")
            return None

        print(f"Video ID: {video_id}")
        # 利用可能な文字起こし言語を取得
        transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)

        # 日本語、英語、それ以外の順で試す
        target_languages = ['ja', 'en']
        transcript = None
        for lang in target_languages:
            try:
                transcript = transcript_list.find_transcript([lang])
                print(f"{lang} の文字起こしが見つかりました。")
                break
            except:
                continue

        # 日本語・英語が見つからない場合、利用可能な最初の言語を取得
        if not transcript:
            try:
                available_langs = [t.language for t in transcript_list]
                if not available_langs:
                    print("エラー: 利用可能な文字起こしが見つかりませんでした。")
                    return None
                print(f"日本語・英語の文字起こしが見つかりません。利用可能な言語: {available_langs}")
                transcript = transcript_list.find_transcript([available_langs[0]])
                print(f"{available_langs[0]} の文字起こしを使用します。")
            except Exception as e:
                 print(f"利用可能な文字起こしの取得中にエラー: {e}")
                 return None

        # transcript.fetch() が返すオブジェクトの構造変更に対応
        # 以前: item['text']
        # 現在: item.text
        transcript_text = " ".join([item.text for item in transcript.fetch()])
        return transcript_text
    except Exception as e:
        print(f"文字起こしの取得または処理中に予期せぬエラーが発生しました: {e}")
        import traceback
        traceback.print_exc() # 詳細なエラー情報を表示
        return None

# summarize_text 関数は不要になったため削除またはコメントアウト
# def summarize_text(text):
#     """テキストをGemini APIを使って要約する"""
#     ...

def main():
    parser = argparse.ArgumentParser(
        description="YouTube動画のURLを指定して、その文字起こしを取得します。", # 説明を修正
        formatter_class=argparse.RawTextHelpFormatter # ヘルプメッセージの改行を保持
    )
    parser.add_argument("youtube_url", help="文字起こしを取得したいYouTube動画のURL\n例: \"https://www.youtube.com/watch?v=XXXXXXXXXXX\"") # ヘルプを修正
    args = parser.parse_args()

    print(f"動画URL: {args.youtube_url}")
    print("文字起こしを取得中...")
    transcript = get_transcript(args.youtube_url)

    if transcript:
        print("\n文字起こし取得完了。")
        print("\n--- 文字起こし結果 --- ")
        print(transcript) # 取得した文字起こし全文を表示
        print("---------------------")
        print("\n上記のテキストをコピーして、Cursorなどのエディタで要約してください。")
    else:
        print("\n文字起こしが取得できなかったため、処理を終了します。")

if __name__ == "__main__":
    main()
```

**💡 スクリプトの動きを簡単に解説：**

1.  `argparse` っていうライブラリで、あなたが入力したYouTubeのURLを受け取ります。
2.  `get_transcript` 関数の中で、`youtube_transcript_api` ライブラリを使って、動画の文字起こしデータをゲット！
    *   日本語 (`ja`) や英語 (`en`) の文字起こしを優先的に探します。
    *   もし見つからなければ、その動画で利用できる他の言語の文字起こしを探してくれます。
3.  取ってきた文字起こしデータを、`print` を使って**チャット画面に表示**します。

**⚠️ ここがミソ！このスクリプトは文字起こしを取ってきて表示するだけ！** 要約はしません。

**じゃあ、どうやって要約されるの？** 🤔

スクリプトが文字起こしを表示した後、**そのテキストを私（CursorのAI）が読み取って、「ふむふむ…」と内容を理解し、ギュギュッと要点をまとめた要約文を生成して、チャット画面に出力する**んです！

まさに、**スクリプトが集めてきた材料（文字起こし）を、AIが調理（要約）する**🍳、そんな連携プレーなんですね！

**実行結果のイメージはこんな感じ：**

まず、スクリプトが文字起こしを出力して…（ズラーッとテキストが表示されます）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012869/aa777af6-1009-4c4f-b875-c2e131d23e65.png)

**動画要約 🎬:**

この動画は、[動画のタイトルや内容に応じた簡単な説明] がテーマのようですね。
主なポイントはこんな感じです。

![別の動画の要約例画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012869/0aabe146-91a8-4faa-9b73-3e6e230b1a18.png)

---

これで、コマンド一発で動画の要点がサクッと分かっちゃうわけです👍

---

## 💻 使ってる主な技術たち

この機能は、これらの技術の組み合わせでできています！

*   **Cursor:** いつもの開発環境 兼 AIとおしゃべりする場所
*   **Python:** この機能を作ってるプログラミング言語 🐍
*   **youtube_transcript_api:** YouTube動画から文字起こしを取ってくる便利な外部ツール 📚
*   **AI (私だよ！):** テキストの意味を理解して、いい感じに要約する頭脳 🧠

---

## 🌱 これからもっと進化するかも？ (可能性)

今はスクリプトとAIが役割分担してますが、将来的にはこんな風にパワーアップしたら面白そう！なんて考えてます。

*   **全自動要約マシン化:** OpenAI APIとかをスクリプトに入れて、文字起こし→要約まで一気に自動化！
*   **グローバル対応:** 英語とか、他の言語の動画も要約できたら嬉しいですよね！ 🌍
*   **要約レベル選択:** 「ざっくりでOK」「もうちょい詳しく」「ガッツリ知りたい」みたいに、要約の長さを選べたら便利かも！

🚀 **まだまだ便利になる可能性、秘めてますよ！**

---

## 👋 おわりに

この「YouTube動画要約機能」は、**Cursor** 環境で **Python** と **AI** を賢く使って、**動画からの情報ゲットをもっと楽ちんにする**ための試みなんです💪

この仕組みが、皆さんの「AIってこんな風にも使えるんだ！」っていう発見やヒントになれば、すごく嬉しいです ✨

まだシンプルな作りですが、これからもっと良くしていきたいなって思っています。

この記事を読んで「へぇ～面白い！」「役に立った！」って思ってくれたら、ぜひ 👍 ボタンやコメントで教えてくださいね！励みになります😊
「こんな機能もあったら最高！」みたいなアイデアも大歓迎です！待ってます！

--- 

📫 ご連絡

もしバグを発見された場合や、「こうすればもっと良くなるのでは」といったご意見・ご要望がありましたら、お気軽に以下の連絡先までお知らせいただけると嬉しいです。

🐦 X (旧Twitter): https://x.com/wyUMAjanaiyo

📧 Gmail: adwddwdaw@gmail.com