はじめに:教育現場の「AI実習」問題
大学で情報を教えている者です。
最近、大学院の講義で「生成AIを活用したプロトタイピング」や「AIとの対話演習」を取り入れようとしたのですが、ある壁にぶつかりました。
- 無料版(Web)の限界: 学生が一斉にアクセスすると制限がかかったり、動作が不安定になる。
- 有料版のハードル: 学生全員に月額20ドルのサブスクリプション(クレジットカード必須)を契約させるのは現実的ではない。
- プライバシー: 無料版のWebチャットだと、入力データが学習に使われる懸念がある。
「予算も限られているし、少し触らせるだけなのにどうしたものか……」と同僚に相談したところ、あっさりこう言われました。
「先生のアカウントでAPIキー発行して、Colabでアプリ化してURLだけ学生に配ればいいじゃん。GeminiのLiteモデルなら、実習レベルなら実質100円もかからないよ」
……そんなに簡単で安いのか? と半信半疑で試してみたところ、本当に一瞬で解決したので、その知見を全5回の連載で共有します。正直、ちょっと使うだけならこの記事だけで十分です。
今回は第1回、「学生への配布・共有編」です。
なぜWeb版ではなく「API」なのか?
「API」と聞くと難しそうですが、要は「従量課金のプロ用窓口」です。
教育利用において、APIには以下の圧倒的なメリットがあります。
- 学習に使われない: デフォルトで入力データは学習利用されません(セキュア)。
- 管理者(教員)だけが払えばいい: 学生はアカウント登録も支払いも不要。
- 驚くほど安い: 最新の価格破壊が凄まじいです。 かなり使ってもflash-liteなら人数×1~2円×時間くらいでいけます。
- 簡単に止められる&勝手に止まる: これは、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キーを登録し、「ノートブックからのアクセス」をオンにしてから実行してください。
# ==========================================
# 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=True と yield
ただ答えを「ボン!」と出すのではなく、生成された文字から順に表示する「ストリーミング」を実装しています。
コード内のここです:
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に裏でこっそり保存する & システムプロンプトで「メンタルトレーナー」を作る
ライセンス表記
本記事のコードはオープンソースです。授業や勉強会などで自由に改変・再配布してご活用ください。