0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini Colab連携

Last updated at Posted at 2025-10-09

大規模言語モデル講座 基礎編 2025 Autumn 敗因を勝因に
https://qiita.com/kaizen_nagoya/items/34ffd2b0c47a5f3665d9

Google Colab とGeminiを連携したことがない。

ChatGPT

Gemini とColabの連携の利点は何がありますか。

ChatGPT:

「Gemini」と「Google Colab」の連携の利点について整理します。まず、ここでの Gemini は一般的に Google Gemini(大規模言語モデル / AIプラットフォーム) を指すと仮定します。もし異なるサービスを指している場合は教えてください。

  1. 計算リソースの最適化
    Colab は GPU / TPU を使った実行環境をクラウド上で提供します。
    Gemini 側で生成AIモデルや大規模言語モデルを管理し、Colab から API を通じて呼び出せば、ローカル環境に重いモデルを置かずに推論や学習を行える。
    Colab では自前でモデルをダウンロードして動かすよりも、Gemini API 経由の利用は ストレージやメモリ消費を大幅に削減できます。
  2. データ活用の柔軟性
    Colab は Google Drive との連携が簡単で、学習データや入力データをアップロード可能。
    Gemini API を Colab ノートブックから呼ぶことで、大規模モデルを直接ローカルで動かすことなくデータを処理できます。
    例: データ分析 → Gemini に送信 → モデルで要約 / 分類 → 結果を Colab で可視化。
  3. プロトタイピングの効率化
    Colab はコードの共有や実験が簡単で、Gemini の AI 機能を組み合わせると プロトタイプ作成が迅速に。
    たとえば:
    GPT 系モデルを使った文章生成
    データセットに対する自動ラベル付け
    対話型アプリケーションの試作
    などをすぐに試せます。
  4. 環境依存の問題の回避
    Colab はクラウド上で実行されるため、OS やライブラリの依存関係の問題を回避できます。
    Gemini API へのアクセスも同じ Colab 環境から行えるため、ローカルで環境構築するよりも安定して利用可能。
  5. 自動化と拡張性
    Colab の Python スクリプトから Gemini API を呼び出すことで、学習 → 推論 → 結果出力 → 可視化までをノートブック内で自動化できます。
    Google Drive、BigQuery、Sheets などと組み合わせてワークフロー全体を Colab 上で完結させられます。
    まとめ
    項目 利点
    計算リソース 大規模モデルをローカルで動かさずに利用可能
    データ連携 Drive / BigQuery データを即座に処理
    プロトタイピング 短時間でモデルの試作・実験が可能
    環境安定性 OS やライブラリ依存を気にせず利用
    自動化 ワークフロー全体を Colab ノートブック内で完結
    💡 補足
    Gemini API は通常 トークン認証が必要。Colab で安全に環境変数として管理すると便利です。
    Colab の無料枠では GPU の利用時間やメモリに制限があるため、Gemini API のような外部モデルと組み合わせると制約を緩和できます。
    もしよければ、Colab から Gemini API を呼ぶ具体的な Python サンプルも示せます。
    作りますか?

はい。

ChatGPT:

了解です。では、Google Colab から Gemini API を呼び出す簡単な Python サンプルを示します。ここでは テキスト生成 を例にします。

  1. API キーの設定
    Colab ではセキュアに管理するために 環境変数 を使います。
import os

# Colab のセルで一度だけ実行
# !export GEMINI_API_KEY="ここにAPIキーを入力"
# または、Python内で設定
os.environ['GEMINI_API_KEY'] = "ここにあなたのGemini APIキー"
2. Gemini API 呼び出し用ライブラリ: requests
import requests
import json

# APIキー取得
api_key = os.environ['GEMINI_API_KEY']

# APIエンドポイント(例: Gemini Text Generation)
endpoint = "https://api.gemini.google.com/v1/generateText"

# 入力データ
payload = {
    "prompt": "AIとColabの連携の利点について簡潔に説明してください。",
    "maxTokens": 150
}

# HTTPリクエスト
headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json"
}

response = requests.post(endpoint, headers=headers, json=payload)

if response.status_code == 200:
    result = response.json()
    print(result.get("text", "No text returned"))
else:
    print(f"Error {response.status_code}: {response.text}")
  1. 補足ポイント
    maxTokens で生成するテキストの長さを制御できます。
    Colab では生成結果を Pandas や Matplotlib と組み合わせて可視化可能。
    ファイルに書き出して Google Drive に保存することも簡単です。
import pandas as pd

df = pd.DataFrame([{"prompt": payload["prompt"], "response": result.get("text", "")}])
df.to_csv("/content/colab_gemini_output.csv", index=False)

💡 これで Colab 上で Gemini API を呼び出し、結果を保存・分析する基本的なワークフロー が完成します。
希望であれば、複数プロンプトをまとめてバッチで処理する方法や、生成結果を自動で可視化する方法 もサンプルにできます。
作りますか?

はい。

ChatGPT:

では、Colab 上で 複数プロンプトをまとめて Gemini API に送信し、生成結果を自動で可視化するサンプル を作ります。ここでは 棒グラフで各プロンプトの文字数を可視化する例にします。

  1. 必要なライブラリのインポート
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
  1. APIキー設定
# Colabで環境変数として設定済みの場合は取得
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText"
  1. 複数プロンプトの定義
prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。"
]
  1. API呼び出し関数の作成
def generate_text(prompt, max_tokens=150):
    payload = {"prompt": prompt, "maxTokens": max_tokens}
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        return response.json().get("text", "")
    else:
        print(f"Error {response.status_code}: {response.text}")
        return ""
  1. 複数プロンプトを一括処理して DataFrame に保存
results = []
for prompt in prompts:
    text = generate_text(prompt)
    results.append({"prompt": prompt, "response": text, "length": len(text)})

df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_batch.csv", index=False)
df
  1. 結果の可視化(棒グラフ:文字数)
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("生成文字数")
plt.ylabel("プロンプト")
plt.title("プロンプトごとの生成文字数")
plt.tight_layout()
plt.show()

✅ このサンプルでできること:
複数のプロンプトを まとめて Gemini に送信
生成結果を DataFrame に保存
文字数などの統計情報を棒グラフで可視化
希望であれば、さらに 生成結果のキーワード抽出や要約、自動分類 まで Colab 上でワンストップ処理する拡張例も作れます。
作りますか?

はい。

ChatGPT:

では、Colab 上で Gemini の生成結果を自動で要約・キーワード抽出・分類 まで行うサンプルを作ります。ここでは Python 内で簡単に処理する例を示します。

  1. 必要なライブラリ
import os
import requests
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
from sklearn.preprocessing import LabelEncoder
>2. API キー設定
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText

3.複数プロンプトの定義

prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。"
]
  1. Gemini API 呼び出し関数
def generate_text(prompt, max_tokens=150):
    payload = {"prompt": prompt, "maxTokens": max_tokens}
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        return response.json().get("text", "")
    else:
        print(f"Error {response.status_code}: {response.text}")
        return ""
  1. 生成 → 要約(簡易: 最初の文だけ) → キーワード抽出 → 仮分類
results = []

def extract_keywords(text, top_n=5):
    vectorizer = CountVectorizer(stop_words="english")
    X = vectorizer.fit_transform([text])
    word_counts = X.toarray().sum(axis=0)
    words = vectorizer.get_feature_names_out()
    keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
    return keywords

def classify_text(text):
    # 簡易分類: キーワードによる仮分類
    categories = ["AI", "ML", "Python", "Other"]
    text_lower = text.lower()
    if "ai" in text_lower:
        return "AI"
    elif "machine" in text_lower or "learning" in text_lower:
        return "ML"
    elif "python" in text_lower:
        return "Python"
    else:
        return "Other"

for prompt in prompts:
    generated = generate_text(prompt)
    summary = generated.split(".")[0]  # 最初の文を要約として使用
    keywords = extract_keywords(generated)
    category = classify_text(generated)
    results.append({
        "prompt": prompt,
        "response": generated,
        "summary": summary,
        "keywords": ", ".join(keywords),
        "category": category
    })

df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_advanced.csv", index=False)
df
  1. 結果のポイント
    summary:簡易的に最初の文を抽出
    keywords:テキスト中の上位キーワードを自動抽出
    category:キーワードベースの簡易分類(必要に応じて ML モデルで強化可能)
    💡 さらに拡張例
    要約を Gemini API に依頼 → より自然な文章に
    分類を機械学習モデルに置き換え → 精度向上
    可視化 → プロンプト別のカテゴリ分布やキーワード頻度をグラフ化
    希望であれば、このサンプルをさらに 可視化まで含めた Colab ワンストップノートブック にまとめることもできます。
    作りますか?

はい。

ChatGPT:

では、これまでの内容をまとめて Colab 上で Gemini 生成 → 要約・キーワード抽出・分類 → 可視化 までワンストップで行うサンプルノートブック形式にまとめます。

  1. ライブラリのインポート
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
  1. APIキーとエンドポイント設定
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText"
>3. 複数プロンプトの定義
prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。",
    "生成AIを教育に活用する利点と課題について述べてください。",
    "Pythonでテキスト処理する際の便利なライブラリを教えてください。"
]
>4. Gemini API 呼び出し関数
def generate_text(prompt, max_tokens=150):
    payload = {"prompt": prompt, "maxTokens": max_tokens}
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        return response.json().get("text", "")
    else:
        print(f"Error {response.status_code}: {response.text}")
        return ""
>5. 要約キーワード抽出分類関数
def extract_keywords(text, top_n=5):
    vectorizer = CountVectorizer(stop_words="english")
    X = vectorizer.fit_transform([text])
    word_counts = X.toarray().sum(axis=0)
    words = vectorizer.get_feature_names_out()
    keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
    return keywords

def classify_text(text):
    text_lower = text.lower()
    if "ai" in text_lower:
        return "AI"
    elif "machine" in text_lower or "learning" in text_lower:
        return "ML"
    elif "python" in text_lower:
        return "Python"
    else:
        return "Other"
>6. 複数プロンプトを処理して DataFrame に格納
results = []

for prompt in prompts:
    generated = generate_text(prompt)
    summary = generated.split(".")[0]  # 最初の文を要約
    keywords = extract_keywords(generated)
    category = classify_text(generated)
    results.append({
        "prompt": prompt,
        "response": generated,
        "summary": summary,
        "keywords": ", ".join(keywords),
        "category": category,
        "length": len(generated)
    })

df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_full.csv", index=False)
df
>7. 可視化例
(a) プロンプトごとの生成文字数
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("生成文字数")
plt.ylabel("プロンプト")
plt.title("プロンプトごとの生成文字数")
plt.tight_layout()
plt.show()
(b) カテゴリ分布
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("カテゴリ")
plt.ylabel("件数")
plt.title("生成結果のカテゴリ分布")
plt.tight_layout()
plt.show()
(c) キーワード頻度上位5個まで抽出して集計
all_keywords = [kw for sublist in df["keywords"].str.split(", ") for kw in sublist]
keyword_series = pd.Series(all_keywords).value_counts().head(10)

plt.figure(figsize=(8,5))
keyword_series.plot(kind="barh", color="lightgreen")
plt.xlabel("出現回数")
plt.ylabel("キーワード")
plt.title("上位キーワードの出現頻度")
plt.tight_layout()
plt.show()
 このノートブックでできること
複数プロンプトの Gemini 生成
簡易要約の自動抽出
キーワード抽出
カテゴリ分類
生成文字数カテゴリ分布キーワード頻度の可視化
CSV出力で結果保存
必要であれば次のステップとして Gemini API に要約や分類も任せてより自然な結果を得る拡張版 も作れます
作りますか

はい

ChatGPT:
>ではColab 上で Gemini API に要約分類まで任せて自然な結果を得る拡張版 を作ります
ここでは生成  要約  分類まで すべて Gemini に依頼 するワークフローです
1. ライブラリインポート
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
2. API キーとエンドポイント設定
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText"
3. 複数プロンプトの定義
prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。",
    "生成AIを教育に活用する利点と課題について述べてください。",
    "Pythonでテキスト処理する際の便利なライブラリを教えてください。"
]
4. Gemini API 呼び出し関数要約分類を指示
def generate_summary_and_classification(prompt, max_tokens=200):
    # Gemini に生成 + 要約 + カテゴリ分類を依頼
    full_prompt = (
        f"以下の質問に対して文章を生成し、簡単な要約とカテゴリ分類も出力してください。\n"
        f"質問: {prompt}\n"
        f"出力形式: JSON で summary, category, response を返してください。"
    )
    payload = {"prompt": full_prompt, "maxTokens": max_tokens}
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        try:
            return response.json()
        except:
            return {"summary": "", "category": "Other", "response": response.text}
    else:
        print(f"Error {response.status_code}: {response.text}")
        return {"summary": "", "category": "Other", "response": ""}
5. 複数プロンプト処理
results = []

for prompt in prompts:
    result = generate_summary_and_classification(prompt)
    results.append({
        "prompt": prompt,
        "response": result.get("response", ""),
        "summary": result.get("summary", ""),
        "category": result.get("category", ""),
        "length": len(result.get("response", ""))
    })

df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_summary_classification.csv", index=False)
df
6. 可視化例
(a) 生成文字数
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("生成文字数")
plt.ylabel("プロンプト")
plt.title("プロンプトごとの生成文字数")
plt.tight_layout()
plt.show()
(b) カテゴリ分布
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("カテゴリ")
plt.ylabel("件数")
plt.title("生成結果のカテゴリ分布")
plt.tight_layout()
plt.show()
 この拡張版のポイント
Gemini に生成要約分類を一括で依頼
JSON 形式で結果を受け取りColab で分析可視化
生成内容要約カテゴリ文字数の全体を CSV に保存
もし希望であればさらに 生成結果を自動でキーワード抽出してクラウドワードクラウド化 まで組み込む完全版も作れます
作りますか

はい

ChatGPT:
>ではColab 上で Gemini 生成結果を自動でキーワード抽出してワードクラウド化する完全版 を作ります
これで生成  要約分類  キーワード抽出  可視化までワンストップです
1. 必要ライブラリのインストールインポート
# ワードクラウド用ライブラリ
!pip install wordcloud

import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
2. API キーとエンドポイント
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText"
3. プロンプトの定義
prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。",
    "生成AIを教育に活用する利点と課題について述べてください。",
    "Pythonでテキスト処理する際の便利なライブラリを教えてください。"
]
4. Gemini API 呼び出し関数要約分類指示付き
def generate_summary_and_classification(prompt, max_tokens=200):
    full_prompt = (
        f"以下の質問に対して文章を生成し、簡単な要約とカテゴリ分類も出力してください。\n"
        f"質問: {prompt}\n"
        f"出力形式: JSON で summary, category, response を返してください。"
    )
    payload = {"prompt": full_prompt, "maxTokens": max_tokens}
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        try:
            return response.json()
        except:
            return {"summary": "", "category": "Other", "response": response.text}
    else:
        print(f"Error {response.status_code}: {response.text}")
        return {"summary": "", "category": "Other", "response": ""}
5. 複数プロンプト処理キーワード抽出
results = []

def extract_keywords(text, top_n=10):
    vectorizer = CountVectorizer(stop_words="english")
    X = vectorizer.fit_transform([text])
    word_counts = X.toarray().sum(axis=0)
    words = vectorizer.get_feature_names_out()
    keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
    return keywords

all_text_for_wordcloud = ""

for prompt in prompts:
    result = generate_summary_and_classification(prompt)
    response_text = result.get("response", "")
    summary = result.get("summary", "")
    category = result.get("category", "")
    keywords = extract_keywords(response_text)
    
    all_text_for_wordcloud += " " + " ".join(keywords)
    
    results.append({
        "prompt": prompt,
        "response": response_text,
        "summary": summary,
        "category": category,
        "keywords": ", ".join(keywords),
        "length": len(response_text)
    })

df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_wordcloud.csv", index=False)
df
6. 可視化
(a) 生成文字数
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("生成文字数")
plt.ylabel("プロンプト")
plt.title("プロンプトごとの生成文字数")
plt.tight_layout()
plt.show()
(b) カテゴリ分布
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("カテゴリ")
plt.ylabel("件数")
plt.title("生成結果のカテゴリ分布")
plt.tight_layout()
plt.show()
(c) キーワードワードクラウド
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)

plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title("生成結果のキーワードワードクラウド")
plt.show()
 この完全版ノートブックでできること
複数プロンプトの Gemini 生成
要約カテゴリ分類
キーワード抽出
生成文字数カテゴリ分布ワードクラウドの可視化
CSV で結果保存
必要であればこのワークフローを 自動的に Google Drive に保存して共有 する完全自動化版にも拡張可能です作りますか

はい

ChatGPT:
>ではColab 上で Gemini 生成  要約分類  キーワード抽出  可視化  Google Drive 自動保存 までをワンストップで行う完全自動化版を作ります
1. Google Drive マウント
from google.colab import drive
drive.mount('/content/drive')
初回は認証コードの入力が必要ですこれで /content/drive/MyDrive/ 以下にファイルを保存可能になります
2. ライブラリのインポート
!pip install wordcloud

import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
3. API キーと Gemini エンドポイント設定
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText"
4. 複数プロンプト定義
prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。",
    "生成AIを教育に活用する利点と課題について述べてください。",
    "Pythonでテキスト処理する際の便利なライブラリを教えてください。"
]
5. Gemini API 呼び出し関数要約分類
def generate_summary_and_classification(prompt, max_tokens=200):
    full_prompt = (
        f"以下の質問に対して文章を生成し、簡単な要約とカテゴリ分類も出力してください。\n"
        f"質問: {prompt}\n"
        f"出力形式: JSON で summary, category, response を返してください。"
    )
    payload = {"prompt": full_prompt, "maxTokens": max_tokens}
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        try:
            return response.json()
        except:
            return {"summary": "", "category": "Other", "response": response.text}
    else:
        print(f"Error {response.status_code}: {response.text}")
        return {"summary": "", "category": "Other", "response": ""}
6. 複数プロンプト処理キーワード抽出Drive 保存
results = []

def extract_keywords(text, top_n=10):
    vectorizer = CountVectorizer(stop_words="english")
    X = vectorizer.fit_transform([text])
    word_counts = X.toarray().sum(axis=0)
    words = vectorizer.get_feature_names_out()
    keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
    return keywords

all_text_for_wordcloud = ""

for prompt in prompts:
    result = generate_summary_and_classification(prompt)
    response_text = result.get("response", "")
    summary = result.get("summary", "")
    category = result.get("category", "")
    keywords = extract_keywords(response_text)
    
    all_text_for_wordcloud += " " + " ".join(keywords)
    
    results.append({
        "prompt": prompt,
        "response": response_text,
        "summary": summary,
        "category": category,
        "keywords": ", ".join(keywords),
        "length": len(response_text)
    })

df = pd.DataFrame(results)

# Google Drive に保存
drive_path = "/content/drive/MyDrive/colab_gemini_complete.csv"
df.to_csv(drive_path, index=False)
print(f"CSV 保存完了: {drive_path}")
7. 可視化
(a) 生成文字数
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("生成文字数")
plt.ylabel("プロンプト")
plt.title("プロンプトごとの生成文字数")
plt.tight_layout()
plt.show()
(b) カテゴリ分布
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("カテゴリ")
plt.ylabel("件数")
plt.title("生成結果のカテゴリ分布")
plt.tight_layout()
plt.show()
(c) キーワードワードクラウド
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)

plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title("生成結果のキーワードワードクラウド")
plt.show()
 完全自動化版の特徴
複数プロンプト生成  要約分類
キーワード抽出  ワードクラウド化
生成文字数カテゴリ分布の可視化
結果を Google Drive に自動保存
Colab 上でワンストップ完結
希望であればさらに 定期的に Gemini API を自動で実行して Drive に追記更新するスケジュール化版 も作れます
作りますか

はい

ChatGPT:
>ではColab 上で Gemini API の自動定期実行  生成結果の更新保存  可視化も自動更新 まで行うスケジュール化版を作ります
ここでは Colab 内で簡易的に 時間間隔でループ実行 して Google Drive に追記する方法を示します
1. ライブラリ準備
!pip install wordcloud
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
import time
2. API キーとエンドポイント
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText"
3. 複数プロンプト定義
prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。"
]
4. Gemini API 呼び出し関数要約分類
def generate_summary_and_classification(prompt, max_tokens=200):
    full_prompt = (
        f"以下の質問に対して文章を生成し、簡単な要約とカテゴリ分類も出力してください。\n"
        f"質問: {prompt}\n"
        f"出力形式: JSON で summary, category, response を返してください。"
    )
    payload = {"prompt": full_prompt, "maxTokens": max_tokens}
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        try:
            return response.json()
        except:
            return {"summary": "", "category": "Other", "response": response.text}
    else:
        print(f"Error {response.status_code}: {response.text}")
        return {"summary": "", "category": "Other", "response": ""}
5. キーワード抽出関数
def extract_keywords(text, top_n=10):
    vectorizer = CountVectorizer(stop_words="english")
    X = vectorizer.fit_transform([text])
    word_counts = X.toarray().sum(axis=0)
    words = vectorizer.get_feature_names_out()
    keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
    return keywords
6. Google Drive 保存先
drive_path = "/content/drive/MyDrive/colab_gemini_schedule.csv"
7. 自動定期実行ループ: 30分間隔で3回実行
num_iterations = 3          # 実行回数
interval_minutes = 30       # 実行間隔(分)

for i in range(num_iterations):
    print(f"\n=== Iteration {i+1} ===")
    results = []
    all_text_for_wordcloud = ""
    
    for prompt in prompts:
        result = generate_summary_and_classification(prompt)
        response_text = result.get("response", "")
        summary = result.get("summary", "")
        category = result.get("category", "")
        keywords = extract_keywords(response_text)
        
        all_text_for_wordcloud += " " + " ".join(keywords)
        
        results.append({
            "prompt": prompt,
            "response": response_text,
            "summary": summary,
            "category": category,
            "keywords": ", ".join(keywords),
            "length": len(response_text)
        })
    
    df = pd.DataFrame(results)
    
    # Drive に追記保存(既存ファイルがあれば追記)
    if os.path.exists(drive_path):
        df.to_csv(drive_path, mode='a', index=False, header=False)
    else:
        df.to_csv(drive_path, index=False)
    
    print(f"Iteration {i+1} 保存完了: {drive_path}")
    
    # 可視化
    plt.figure(figsize=(8,5))
    plt.barh(df["prompt"], df["length"], color="skyblue")
    plt.xlabel("生成文字数")
    plt.ylabel("プロンプト")
    plt.title(f"Iteration {i+1} プロンプトごとの生成文字数")
    plt.tight_layout()
    plt.show()
    
    wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
    plt.figure(figsize=(12,6))
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis("off")
    plt.title(f"Iteration {i+1} ワードクラウド")
    plt.show()
    
    if i < num_iterations - 1:
        print(f"{interval_minutes}分待機中...")
        time.sleep(interval_minutes * 60)
 特徴
指定回数間隔で Gemini API を自動実行
生成結果要約分類キーワードを CSV に追記保存
生成文字数ワードクラウドを毎回可視化
Google Drive に自動保存で共有可能
必要であればさらに Slack / Discord などに自動通知 する仕組みも追加して
生成結果をチームにリアルタイム配信する自動化フローにすることも可能です
作りますか

はい

ChatGPT:
>ではColab 上で Gemini 生成結果を Slack または Discord に自動通知 する仕組みを追加した完全自動化版を作ります
ここでは生成  要約分類  キーワード抽出  可視化  Google Drive 保存  Slack/Discord 通知までワンストップで行います
1. ライブラリ準備
!pip install wordcloud requests
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
import time
2. API キーエンドポイントDrive パス設定
api_key = os.environ.get("GEMINI_API_KEY", "ここにAPIキーを入力")
endpoint = "https://api.gemini.google.com/v1/generateText"
drive_path = "/content/drive/MyDrive/colab_gemini_slack.csv"
3. Slack / Discord Webhook URL 設定
# Slack Webhook URL
slack_webhook_url = "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX"

# Discord Webhook URL
discord_webhook_url = "https://discord.com/api/webhooks/XXXXX/XXXXX"
4. プロンプト定義
prompts = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。"
]
5. Gemini API 呼び出し関数
def generate_summary_and_classification(prompt, max_tokens=200):
    full_prompt = (
        f"以下の質問に対して文章を生成し、簡単な要約とカテゴリ分類も出力してください。\n"
        f"質問: {prompt}\n"
        f"出力形式: JSON で summary, category, response を返してください。"
    )
    payload = {"prompt": full_prompt, "maxTokens": max_tokens}
    headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
    response = requests.post(endpoint, headers=headers, json=payload)
    if response.status_code == 200:
        try:
            return response.json()
        except:
            return {"summary": "", "category": "Other", "response": response.text}
    else:
        print(f"Error {response.status_code}: {response.text}")
        return {"summary": "", "category": "Other", "response": ""}
6. キーワード抽出関数
def extract_keywords(text, top_n=10):
    vectorizer = CountVectorizer(stop_words="english")
    X = vectorizer.fit_transform([text])
    word_counts = X.toarray().sum(axis=0)
    words = vectorizer.get_feature_names_out()
    keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
    return keywords
7. Slack / Discord 通知関数
def send_slack_message(message):
    payload = {"text": message}
    requests.post(slack_webhook_url, json=payload)

def send_discord_message(message):
    payload = {"content": message}
    requests.post(discord_webhook_url, json=payload)
8. 自動定期実行ループ: 230分間隔
num_iterations = 2
interval_minutes = 30

for i in range(num_iterations):
    print(f"\n=== Iteration {i+1} ===")
    results = []
    all_text_for_wordcloud = ""
    
    for prompt in prompts:
        result = generate_summary_and_classification(prompt)
        response_text = result.get("response", "")
        summary = result.get("summary", "")
        category = result.get("category", "")
        keywords = extract_keywords(response_text)
        all_text_for_wordcloud += " " + " ".join(keywords)
        
        results.append({
            "prompt": prompt,
            "response": response_text,
            "summary": summary,
            "category": category,
            "keywords": ", ".join(keywords),
            "length": len(response_text)
        })
    
    df = pd.DataFrame(results)
    
    # Drive に保存・追記
    if os.path.exists(drive_path):
        df.to_csv(drive_path, mode='a', index=False, header=False)
    else:
        df.to_csv(drive_path, index=False)
    
    # Slack / Discord 通知
    for r in results:
        message = f"Iteration {i+1} - Prompt: {r['prompt']}\nSummary: {r['summary']}\nCategory: {r['category']}\nKeywords: {r['keywords']}\n"
        send_slack_message(message)
        send_discord_message(message)
    
    print(f"Iteration {i+1} 保存・通知完了: {drive_path}")
    
    # 可視化
    plt.figure(figsize=(8,5))
    plt.barh(df["prompt"], df["length"], color="skyblue")
    plt.xlabel("生成文字数")
    plt.ylabel("プロンプト")
    plt.title(f"Iteration {i+1} プロンプトごとの生成文字数")
    plt.tight_layout()
    plt.show()
    
    wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
    plt.figure(figsize=(12,6))
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis("off")
    plt.title(f"Iteration {i+1} ワードクラウド")
    plt.show()
    
    if i < num_iterations - 1:
        print(f"{interval_minutes}分待機中...")
        time.sleep(interval_minutes * 60)
 この完全自動化版の特徴
Gemini 生成  要約分類  キーワード抽出
生成文字数ワードクラウドの可視化
Google Drive に自動保存
Slack / Discord に自動通知
定期実行指定回数間隔で自動更新
💡 拡張例
Webhook での通知に 生成結果の画像ワードクラウド添付
実行間隔やプロンプトリストを Google Sheets で管理し動的に取得
結果を Notion にも自動同期
必要であればワードクラウド画像を Slack / Discord に添付する通知版 も作れます
作りますか

全体の管理はGithubで行いたくGithub連携のスクリプトをご紹介ください

ChatGPT:
>わかりましたではColab + Gemini 自動生成ワークフローを GitHub で管理自動更新できる仕組み のサンプルスクリプトを示します
ここでは以下を実現します
Colab / Python スクリプトを GitHub リポジトリで管理
生成結果 CSV  GitHub に自動コミットプッシュ
GitHub Actions で定期実行も可能
1. GitHub リポジトリに接続する準備
a. Personal Access TokenPATの作成
GitHub > Settings > Developer settings > Personal access tokens
repo 権限付きトークンを作成
Colab で使用する
b. Colab  GitHub 情報を設定
import os

# GitHub リポジトリ情報
GITHUB_USERNAME = "あなたのGitHubユーザー名"
GITHUB_REPO = "リポジトリ名"
GITHUB_BRANCH = "main"

# Personal Access Token
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", "ここにPATを入力")
2. CSV  GitHub に自動コミットプッシュする関数
from git import Repo
import shutil

def push_to_github(local_file_path, repo_path="/content/temp_repo"):
    """
    local_file_path: Colab 上の保存ファイル
    repo_path: 一時クローン先
    """
    repo_url = f"https://{GITHUB_USERNAME}:{GITHUB_TOKEN}@github.com/{GITHUB_USERNAME}/{GITHUB_REPO}.git"
    
    # 一時ディレクトリにクローン
    if os.path.exists(repo_path):
        shutil.rmtree(repo_path)
    Repo.clone_from(repo_url, repo_path, branch=GITHUB_BRANCH)
    
    # ファイルをコピー
    shutil.copy(local_file_path, repo_path)
    
    # Git 操作
    repo = Repo(repo_path)
    repo.git.add(".")
    repo.git.commit("-m", "Update generated CSV from Colab")
    repo.git.push("origin", GITHUB_BRANCH)
    
    print("GitHub にプッシュ完了")
3. CSV 保存 + GitHub プッシュの例
local_csv_path = "/content/colab_gemini_github.csv"

# ここまでの Gemini 自動生成フローで df が作成済みと仮定
df.to_csv(local_csv_path, index=False)

# GitHub にプッシュ
push_to_github(local_csv_path)
4. GitHub Actions で定期実行する方法
リポジトリに .github/workflows/run_colab.yml を作成
内容例
name: Run Gemini Workflow

on:
  schedule:
    - cron: '0 */6 * * *'  # 6時間ごとに実行
  workflow_dispatch:      # 手動実行も可能

jobs:
  run_colab:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      - name: Install dependencies
        run: pip install pandas requests matplotlib wordcloud scikit-learn
      - name: Run script
        run: python path/to/your_script.py
      - name: Commit & push results
        run: |
          git config --global user.name "github-actions"
          git config --global user.email "actions@github.com"
          git add colab_gemini_github.csv
          git commit -m "Auto update from GitHub Actions" || echo "No changes to commit"
          git push
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 特徴
Colab / Python スクリプトを GitHub 管理
生成結果 CSV を自動プッシュ
GitHub Actions で定期実行も可能
Slack / Discord 連携を追加したまま GitHub 管理可能
💡 拡張案
GitHub Actions で直接 Gemini API を叩いて Colab を使わず完全自動化
CSV の他に ワードクラウド画像を GitHub にアップロード
Slack / Discord 通知も GitHub Actions 内で行う
希望であればColab ワークフロー + Slack/Discord 通知 + GitHub 自動管理を統合した完全スクリプト例 を作れます作りますか
Network connection lost. Attempting to reconnect

はい

ChatGPT:
>ではColab ワークフロー + Gemini 生成  要約分類  キーワード抽出  可視化  Google Drive 保存  Slack/Discord 通知  GitHub 自動管理 を統合した完全スクリプト例を作ります
1. ライブラリ準備
!pip install wordcloud gitpython requests
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
from git import Repo
import shutil
import time
2. 環境変数 / 設定
# Gemini API
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY", "ここにAPIキー")
GEMINI_ENDPOINT = "https://api.gemini.google.com/v1/generateText"

# Google Drive 保存先
DRIVE_PATH = "/content/drive/MyDrive/colab_gemini_complete.csv"

# Slack / Discord Webhook
SLACK_WEBHOOK = "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX"
DISCORD_WEBHOOK = "https://discord.com/api/webhooks/XXXXX/XXXXX"

# GitHub リポジトリ設定
GITHUB_USERNAME = "あなたのGitHubユーザー名"
GITHUB_REPO = "リポジトリ名"
GITHUB_BRANCH = "main"
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", "ここにPAT")
3. プロンプト定義
PROMPTS = [
    "AIとColabの連携の利点について簡潔に説明してください。",
    "機械学習の学習を効率化する方法を3つ挙げてください。",
    "Pythonでデータ可視化をする際のポイントを教えてください。"
]
4. Gemini API 呼び出し関数
def generate_summary_and_classification(prompt, max_tokens=200):
    full_prompt = (
        f"以下の質問に対して文章を生成し、簡単な要約とカテゴリ分類も出力してください。\n"
        f"質問: {prompt}\n"
        f"出力形式: JSON で summary, category, response を返してください。"
    )
    payload = {"prompt": full_prompt, "maxTokens": max_tokens}
    headers = {"Authorization": f"Bearer {GEMINI_API_KEY}", "Content-Type": "application/json"}
    response = requests.post(GEMINI_ENDPOINT, headers=headers, json=payload)
    if response.status_code == 200:
        try:
            return response.json()
        except:
            return {"summary": "", "category": "Other", "response": response.text}
    else:
        print(f"Error {response.status_code}: {response.text}")
        return {"summary": "", "category": "Other", "response": ""}
5. キーワード抽出関数
def extract_keywords(text, top_n=10):
    vectorizer = CountVectorizer(stop_words="english")
    X = vectorizer.fit_transform([text])
    word_counts = X.toarray().sum(axis=0)
    words = vectorizer.get_feature_names_out()
    return [words[i] for i in word_counts.argsort()[::-1][:top_n]]
6. Slack / Discord 通知関数
def send_slack_message(message):
    requests.post(SLACK_WEBHOOK, json={"text": message})

def send_discord_message(message):
    requests.post(DISCORD_WEBHOOK, json={"content": message})
7. GitHub 自動プッシュ関数
def push_to_github(local_file_path, repo_path="/content/temp_repo"):
    repo_url = f"https://{GITHUB_USERNAME}:{GITHUB_TOKEN}@github.com/{GITHUB_USERNAME}/{GITHUB_REPO}.git"
    if os.path.exists(repo_path):
        shutil.rmtree(repo_path)
    Repo.clone_from(repo_url, repo_path, branch=GITHUB_BRANCH)
    shutil.copy(local_file_path, repo_path)
    repo = Repo(repo_path)
    repo.git.add(".")
    repo.git.commit("-m", "Update generated CSV from Colab workflow")
    repo.git.push("origin", GITHUB_BRANCH)
    print("GitHub にプッシュ完了")
8. メイン処理生成  要約  キーワード  保存  通知  GitHub
results = []
all_text_for_wordcloud = ""

for prompt in PROMPTS:
    res = generate_summary_and_classification(prompt)
    response_text = res.get("response", "")
    summary = res.get("summary", "")
    category = res.get("category", "")
    keywords = extract_keywords(response_text)
    all_text_for_wordcloud += " " + " ".join(keywords)
    
    results.append({
        "prompt": prompt,
        "response": response_text,
        "summary": summary,
        "category": category,
        "keywords": ", ".join(keywords),
        "length": len(response_text)
    })
    
    # Slack / Discord に通知
    msg = f"Prompt: {prompt}\nSummary: {summary}\nCategory: {category}\nKeywords: {', '.join(keywords)}"
    send_slack_message(msg)
    send_discord_message(msg)

# DataFrame 作成 & Drive 保存
df = pd.DataFrame(results)
df.to_csv(DRIVE_PATH, index=False)
print(f"Google Drive に保存完了: {DRIVE_PATH}")

# GitHub にプッシュ
push_to_github(DRIVE_PATH)

# 可視化
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("生成文字数")
plt.ylabel("プロンプト")
plt.title("プロンプトごとの生成文字数")
plt.tight_layout()
plt.show()

wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title("ワードクラウド")
plt.show()
 このスクリプトでできること
Gemini 生成  要約分類  キーワード抽出
生成結果を Google Drive に保存
Slack / Discord に自動通知
GitHub に自動プッシュでバージョン管理
生成文字数ワードクラウドの可視化
💡 拡張案
GitHub Actions でこのスクリプトを定期実行Colab を使わず完全自動化
ワードクラウド画像も Slack / Discord に添付通知
プロンプトリストを GitHub 管理し動的に取得
必要であればGitHub Actions での定期実行 + Slack/Discord 添付画像通知版 も作れます作りますか
ChatGPT の回答は必ずしも正しいとは限りません重要な情報は確認するようにしてください
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?