9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

大学院の講義で学生全員に生成AIを使わせたい…と相談したら「Colabで自作すれば100円もかからない」と言われた話【その1:配布編】

Last updated at Posted at 2025-12-03

はじめに:教育現場の「AI実習」問題

大学で情報を教えている者です。
最近、大学院の講義で「生成AIを活用したプロトタイピング」や「AIとの対話演習」を取り入れようとしたのですが、あるにぶつかりました。

  1. 無料版(Web)の限界: 学生が一斉にアクセスすると制限がかかったり、動作が不安定になる。
  2. 有料版のハードル: 学生全員に月額20ドルのサブスクリプション(クレジットカード必須)を契約させるのは現実的ではない。
  3. プライバシー: 無料版のWebチャットだと、入力データが学習に使われる懸念がある。

「予算も限られているし、少し触らせるだけなのにどうしたものか……」と同僚に相談したところ、あっさりこう言われました。

「先生のアカウントでAPIキー発行して、Colabでアプリ化してURLだけ学生に配ればいいじゃん。GeminiのLiteモデルなら、実習レベルなら実質100円もかからないよ」

……そんなに簡単で安いのか? と半信半疑で試してみたところ、本当に一瞬で解決したので、その知見を全5回の連載で共有します。正直、ちょっと使うだけならこの記事だけで十分です。

今回は第1回、「学生への配布・共有編」です。

なぜWeb版ではなく「API」なのか?

「API」と聞くと難しそうですが、要は「従量課金のプロ用窓口」です。
教育利用において、APIには以下の圧倒的なメリットがあります。

  1. 学習に使われない: デフォルトで入力データは学習利用されません(セキュア)。
  2. 管理者(教員)だけが払えばいい: 学生はアカウント登録も支払いも不要。
  3. 驚くほど安い: 最新の価格破壊が凄まじいです。 かなり使ってもflash-liteなら人数×1~2円×時間くらいでいけます。
  4. 簡単に止められる&勝手に止まる: これは、Googleコラボの仕様です!

Gemini APIの価格破壊(2025年現在)

モデルの使い分けは以下の通りです。

  • Gemini 2.5 Flash Lite ←今回はこれ
    • 実習に最適。100万トークン(日本語で約70〜100万文字相当)あたり数セントレベル。
    • 授業で学生数十人が1コマ使い倒しても、缶コーヒー1本分にもなりません。「ほぼ無料感覚」です。
  • Gemini 2.5 Flash
    • 超高速・高コスパ。普段使いや、簡単なアプリ開発ならこれが標準。
  • Gemini 3.0 Pro
    • 非常に賢い。複雑な推論が必要な時に使います。Flashに比べるとコストは上がります。

今回は、学生に配布して遠慮なく使わせるため、最も安価な 「Gemini 2.5 Flash Lite」 を採用します。

用意するもの

  • Googleアカウント(無料の個人のものでOK)
  • Google Colab(ブラウザで動くPython環境)
  • Google AI Studioで取得したAPIキー

作成したコード

教員(あなた)がGoogle Colabを開き、以下のコードを実行するだけです。

事前準備:
Colabの左側にある「鍵アイコン(シークレット)」に MY_API_KEY という名前でAPIキーを登録し、「ノートブックからのアクセス」をオンにしてから実行してください。

gemini_lite_app.py
# ==========================================
# Google Colab 実習用 Gemini Webアプリ (Gradio版)
# ==========================================

# 1. 必要なライブラリのインストール
# ------------------------------------------
import os
import sys

# Google Generative AI と Gradio (Web UI用) をインストール
try:
    import google.generativeai as genai
    import gradio as gr
except ImportError:
    print("ライブラリをインストールしています... (約1分かかります)")
    !pip install -q -U google-generativeai gradio
    import google.generativeai as genai
    import gradio as gr

from google.colab import userdata

# 2. APIキーの読み込み
# ------------------------------------------
KEY_NAME = 'MY_API_KEY'

try:
    api_key = userdata.get(KEY_NAME)
    genai.configure(api_key=api_key)
except Exception as e:
    print(f"【エラー】APIキー '{KEY_NAME}' が見つかりません。Secretsを確認してください。")
    sys.exit(1)

# 3. モデルの準備
# ------------------------------------------
# とにかく安い実習用モデルを指定
MODEL_NAME = "gemini-2.5-flash-lite-preview-09-2025"
model = genai.GenerativeModel(MODEL_NAME)

print(f"準備完了: {MODEL_NAME} を使用します。")

# 4. チャット応答関数の定義
# ------------------------------------------
def response_generator(message, history):
    """
    Gradioからの入力を受け取り、Geminiの応答を返します。
    """
    # Gemini用に履歴フォーマットを変換
    gemini_history = []
    for user_msg, ai_msg in history:
        gemini_history.append({"role": "user", "parts": [user_msg]})
        gemini_history.append({"role": "model", "parts": [ai_msg]})
    
    # チャットセッションを開始(過去の履歴を含める)
    chat_session = model.start_chat(history=gemini_history)
    
    try:
        # ストリーミング(文字がパラパラ出る演出)対応
        response = chat_session.send_message(message, stream=True)
        partial_text = ""
        for chunk in response:
            if chunk.text:
                partial_text += chunk.text
                yield partial_text
    except Exception as e:
        yield f"エラーが発生しました: {str(e)}\n(混雑しているか、APIキーの制限の可能性があります)"

# 5. Webアプリの起動
# ------------------------------------------
# UIの設定
demo = gr.ChatInterface(
    fn=response_generator,
    title="授業用 AIアシスタント",
    description="質問を入力するとAIが答えます。",
    theme="soft",
    examples=["AIについて教えて", "PythonでHello Worldを書いて", "この授業の感想を要約して"]
)

print("\n--- アプリを起動します ---")
print("しばらくすると下記に 'Running on public URL: https://...' というリンクが表示されます。")
print("そのリンクを学生に共有してください(リンクは72時間有効です)。\n")

# share=True で外部公開リンクを生成
demo.launch(share=True, debug=True)

技術的なポイント解説

このコードには、授業運営をスムーズにするための3つの工夫があります。

1. モデル選び:gemini-2.5-flash-lite-preview

コード内でモデル名を指定しています。
MODEL_NAME = "gemini-2.5-flash-lite-preview-09-2025"
ここをLiteにすることで、学生が興味本位で大量に質問を投げても、コストを気にせず笑って見ていられます。

2. 魔法のオプション:share=True

Gradioの起動時に demo.launch(share=True) と書くだけで、72時間限定の公開URL が発行されます。
これこそが肝です。サーバーを契約したり、ドメインを取る必要はありません。

  • 教員: Colabで実行ボタンを押す。
  • Colab: https://xxxxx.gradio.live というURLを発行する。
  • 学生: そのURLをスマホやPCで開く(ログイン不要)。

授業が終われば、Colabを停止すればアクセスできなくなります。一時的な実習に最適です。

3. AIらしさの演出:stream=Trueyield

ただ答えを「ボン!」と出すのではなく、生成された文字から順に表示する「ストリーミング」を実装しています。
コード内のここです:

response = chat_session.send_message(message, stream=True)
# ...中略...
yield partial_text

return ではなく yield を使うことで、処理の途中経過を画面に送り続けることができます。これがあるだけで、学生の反応(「おー、考えてる!」感)が全く違います。

とはいえ、爆速で生成されちゃうので、あまりわからないこともよくあります。

まとめ

これだけのコード量で、「学生全員は無料で、安全に、最新AIを使える環境」が整いました。同僚の助言は正しかったわけです。

次回は、この仕組みを応用して、自分自身(教員・研究者)が普段使いするための「シンプルかつ爆速な自分専用チャットボット」の構築方法を紹介します。Liteではなく、標準モデルの「Flash」を使います。

このソースコードもしくは、次の基本編のソースコードを学生に渡すと、少し仕組みを理解している学生であれば、自分でLLM環境を構築してくれます。

【連載予定】

  • 1.配布編(今回):ColabとLiteモデルで実習環境をバラ撒く
  • 2.基本編:自分専用のGemini 2.5 Flashチャットを作る

  • 3.ログ収集編&人格設定編:チャットの内容をCSVに裏でこっそり保存する & システムプロンプトで「メンタルトレーナー」を作る

ライセンス表記
本記事のコードはオープンソースです。授業や勉強会などで自由に改変・再配布してご活用ください。

9
12
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
9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?