大規模言語モデル講座 基礎編 2025 Autumn 敗因を勝因に
https://qiita.com/kaizen_nagoya/items/34ffd2b0c47a5f3665d9
Canvas LMSを教える側で使ったことがない。
非常勤講師をしているUML講座で使うことを前提として調べる。
ChatGPT
Canvas LMS を使ったことがありません。なんのために、どう使うとよいでしょうか。
ChatGPT:
とても良い質問です。
Canvas LMS(Learning Management System) は、教育機関や企業などで オンライン授業・研修・学習管理を行うためのプラットフォーム です。
初めての方にもわかりやすく、「何のために」「どう使うとよいか」を整理して説明します。
🎯 1. Canvas LMS は何のためのもの?
一言で言うと、
授業や研修をオンラインで設計・実施・評価するための総合システム
です。
主な目的は次の通りです:
目的 内容
授業管理 講義、課題、試験、成績を一元管理
教材共有 PDF、動画、リンク、スライドなどを学生と共有
コミュニケーション 掲示板、チャット、コメント、メール通知などでやり取り
進捗評価 提出状況・成績・学習時間の可視化
外部連携 Zoom・Google Drive・Microsoft Teams・GitHub Classroomなどと統合可能
💡 2. どんな人に向いているか
大学や専門学校の教員:シラバス・課題・レポートをオンラインで管理したい
企業の研修担当者:社員教育やeラーニングを体系的に運営したい
オンライン講師や個人塾:動画+課題+クイズでオンライン授業を提供したい
学習者(学生・社員):自分の進捗や提出物を整理して学びを可視化したい
🧭 3. 基本的な使い方(講師側)
たとえば、大学の講義をCanvasで運用する流れを例にします。
ステップ 内容 ツール
① コース作成 「AI入門」などの授業ページを作る Course
② 教材アップロード PDF・動画・スライドなどを登録 Files / Modules
③ 課題設定 レポート・クイズ・ディスカッションなどを作成 Assignments / Quizzes
④ 受講者登録 学生を自動または手動で追加 People
⑤ 成績管理 自動採点・ルーブリック・総合点などを集計 Grades
⑥ 通知設定 提出期限・コメント・お知らせを通知 Announcements / Calendar
👩🎓 4. 学習者の使い方
学生や受講者は、以下のような流れで使います:
コースに参加(URLまたは学校の認証経由)
授業資料を読む・動画を見る
課題を提出・クイズを受ける
フィードバックを確認
成績や進捗を自分で確認
→ 「Google Classroom」と似ていますが、より大学・企業向けに高機能 です。
⚙️ 5. 外部連携の例
CanvasはLTI(Learning Tools Interoperability)対応なので、他サービスと統合が簡単です。
連携先 利用例
Zoom 授業リンクを自動生成・出欠管理
Google Drive / OneDrive 課題提出や教材共有
GitHub Classroom プログラミング課題の提出と自動採点
Turnitin 剽窃チェック
Slack / Discord 通知やコミュニティ連携
🧩 6. どう活用するとよいか(おすすめの使い方)
活用パターン 例 メリット
ハイブリッド授業 対面授業の資料+動画+課題をCanvasで統合 教材が一元化され、欠席者も学習可能
プロジェクト型学習 グループごとに課題と提出フォルダを分ける チーム別の進捗管理が容易
企業研修の記録管理 受講履歴・スコアを自動保存 社員教育の可視化
AI×教育の実験 ChatGPTやLLM連携で自動フィードバック生成 教育支援AIの研究にも最適
🔍 7. 使い始めるには
Canvas公式サイト から「Free for Teachers」で無料アカウントを作成
自分のコースを作って教材を登録
学生にURLを共有(メールやQRコードでも可)
初期設定が終われば、すぐにオンライン授業を運用可能
ご希望があれば、
「大学講義用テンプレート(例:AI概論)」
「企業研修用テンプレート(例:AIリテラシー)」
「Canvas API連携のサンプルコード」
もそれぞれお作りできます。
どれに興味がありますか?
Canvas API連携のサンプルコード
ChatGPT:
良い選択です。
Canvas LMS には強力な REST API があり、PythonやNode.jsなどから 課題作成・受講者情報取得・成績登録などを自動化 できます。
以下で、わかりやすく整理します👇
🧩 1. Canvas APIの概要
Canvas APIはHTTPSベースのREST APIです。
URL構造の例:
https:///api/v1/
例:
GET https://canvas.instructure.com/api/v1/courses
認証は アクセストークン(Bearer Token) を使用します。
Canvasの管理画面で
「アカウント → 設定 → 新しいアクセストークン作成」から発行可能。
🐍 2. Pythonでのサンプルコード
例:コース一覧を取得する
import requests
# Canvasドメインとアクセストークンを設定
API_URL = "https://canvas.instructure.com/api/v1"
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"
# リクエストヘッダ
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}"
}
# コース一覧を取得
response = requests.get(f"{API_URL}/courses", headers=headers)
if response.status_code == 200:
courses = response.json()
for course in courses:
print(f"{course['id']}: {course['name']}")
else:
print("Error:", response.status_code, response.text)
例:課題を作成する
import requests
API_URL = "https://canvas.instructure.com/api/v1"
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"
COURSE_ID = 12345 # 対象コースID
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}"
}
data = {
"assignment": {
"name": "第3回レポート課題",
"submission_types": ["online_upload"],
"points_possible": 100,
"due_at": "2025-10-15T23:59:00Z",
"published": True
}
}
response = requests.post(f"{API_URL}/courses/{COURSE_ID}/assignments", headers=headers, json=data)
if response.status_code == 200:
print("課題を作成しました:", response.json()["name"])
else:
print("Error:", response.status_code, response.text)
例:受講者の成績を取得する
COURSE_ID = 12345
ASSIGNMENT_ID = 6789
response = requests.get(
f"{API_URL}/courses/{COURSE_ID}/assignments/{ASSIGNMENT_ID}/submissions",
headers=headers
)
if response.status_code == 200:
submissions = response.json()
for s in submissions:
user = s.get("user_id")
grade = s.get("grade")
print(f"User {user}: Grade {grade}")
⚙️ 3. Node.js版サンプル(JavaScript)
import fetch from "node-fetch";
const API_URL = "https://canvas.instructure.com/api/v1";
const ACCESS_TOKEN = "YOUR_ACCESS_TOKEN";
const headers = {
"Authorization": `Bearer ${ACCESS_TOKEN}`
};
// コース一覧を取得
fetch(`${API_URL}/courses`, { headers })
.then(res => res.json())
.then(courses => {
courses.forEach(c => console.log(`${c.id}: ${c.name}`));
})
.catch(err => console.error(err));
🔗 4. よく使うAPIエンドポイント
機能 エンドポイント メソッド
コース一覧取得 /courses GET
コース情報取得 /courses/:course_id GET
課題作成 /courses/:course_id/assignments POST
課題提出一覧 /courses/:course_id/assignments/:id/submissions GET
成績登録 /courses/:course_id/assignments/:id/submissions/:user_id PUT
ファイルアップロード /courses/:course_id/files POST
ディスカッション作成 /courses/:course_id/discussion_topics POST
公式ドキュメント:
📘 Canvas LMS REST API Documentation
🚀 5. 応用例(自動化)
自動化タスク 実現方法
課題提出の自動チェック Pythonで提出一覧を取得→期限超過をメール通知
GitHubと連携 GitHub Classroomの課題をCanvas APIで登録
Zoom連携 CanvasイベントをZoom API経由で自動作成
成績表のGoogle Sheets出力 Canvas→Python→Google Sheets API
ご希望があれば、
「Google Colabで実行できるCanvas APIノートブック」
「GitHub Classroom連携テンプレート」
「Zoom+Canvas連携コード」
のいずれかを具体的に作成できます。
どれを見てみたいですか?
Google Colabで実行できるCanvas APIノートブック
ChatGPT:
素晴らしい選択です。
Google Colab上で実行できる Canvas LMS API 連携ノートブック(Python版) を以下にご紹介します。
このノートブックは、Canvasのデータを取得・課題を作成・提出物を確認できる基本テンプレートです。
📘 Canvas API × Google Colab ノートブック
以下のコードを Colab にそのまま貼り付けて実行できます。
# ==========================================
# 🎓 Canvas LMS API × Google Colab サンプル
# ==========================================
# 目的:
# - Canvasコース一覧を取得
# - 課題を新規作成
# - 課題提出一覧を確認
# ------------------------------------------
import requests
import pandas as pd
from datetime import datetime
# --- 1. Canvas API設定 --------------------------------
# あなたのCanvasドメインとアクセストークンを入力
API_URL = "https://canvas.instructure.com/api/v1" # 組織独自URLがある場合は差し替え
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}"
}
print("✅ Canvas API設定完了")
# --- 2. コース一覧を取得 --------------------------------
def get_courses():
url = f"{API_URL}/courses"
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
df = pd.DataFrame(data)[["id", "name", "workflow_state", "enrollment_term_id"]]
return df
else:
print("❌ エラー:", response.status_code, response.text)
return None
courses_df = get_courses()
if courses_df is not None:
print("🎓 コース一覧:")
display(courses_df)
# --- 3. 課題を新規作成 --------------------------------
def create_assignment(course_id, name="サンプル課題", points=100):
url = f"{API_URL}/courses/{course_id}/assignments"
data = {
"assignment": {
"name": name,
"submission_types": ["online_upload"],
"points_possible": points,
"due_at": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ"),
"published": True
}
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("🆕 課題作成:", response.json()["name"])
else:
print("❌ エラー:", response.status_code, response.text)
# --- 4. 提出一覧を取得 --------------------------------
def get_submissions(course_id, assignment_id):
url = f"{API_URL}/courses/{course_id}/assignments/{assignment_id}/submissions"
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
df = pd.DataFrame(data)[["user_id", "grade", "submitted_at", "workflow_state"]]
return df
else:
print("❌ エラー:", response.status_code, response.text)
return None
# --- 5. 動作例 -----------------------------------------
# コースIDを手動で設定
COURSE_ID = int(input("対象コースのIDを入力してください: "))
# 課題作成
create_assignment(COURSE_ID, "Colabから自動作成された課題", 50)
# 課題IDを入力して提出一覧を取得
ASSIGNMENT_ID = int(input("課題IDを入力してください: "))
submissions_df = get_submissions(COURSE_ID, ASSIGNMENT_ID)
if submissions_df is not None:
print("📂 提出一覧:")
display(submissions_df)
print("✅ 完了しました")
💡 使い方のポイント
Canvasでアクセストークンを作成
Canvasのメニュー → 「アカウント」 → 「設定」 → 「新しいアクセストークンを作成」
Colab上で実行
ACCESS_TOKEN に自分のトークンを貼り付けます。
出力
- 自分が所属するコース一覧(DataFrame表示)
- Colabから課題を新規作成
- 課題IDを指定して提出物一覧を取得(成績・提出時間を表示)
🧩 応用:Google Sheetsへの出力
Canvasの提出一覧をスプレッドシートに自動転送したい場合:
from google.colab import auth
import gspread
from gspread_dataframe import set_with_dataframe
auth.authenticate_user()
gc = gspread.authorize(GoogleCredentials.get_application_default())
# スプレッドシートを作成
sh = gc.create('Canvas_Submissions')
worksheet = sh.get_worksheet(0)
# 提出データを出力
set_with_dataframe(worksheet, submissions_df)
print("📊 Google Sheets に出力しました")
🚀 応用アイデア
目的 方法
成績を自動集計して通知 Canvas API + Gmail API
GitHub課題の採点をCanvasに反映 GitHub API + Canvas API
Zoom授業スケジュールをCanvasカレンダーに同期 Zoom API + Canvas API
自動レポート提出リマインダー Google Apps Script + Canvas API
ご希望があれば、このノートブックを
📁 .ipynb 形式でZIPダウンロード可能なColabファイル
として生成することもできます。
作成しましょうか?(はい/いいえ)
はい。
ChatGPT:
✅ Google Colabでそのまま使えるノートブックを生成しました:
📘 ダウンロードはこちら https://researchmap.jp/multidatabases/multidatabase_contents/download/231120/428243a627a27a477c101444938b64ba/41891?col_no=2&frame_id=576083
このファイルを
Google Colab にアクセス
「ファイル → ノートブックをアップロード」からこの .ipynb を選択
すぐにCanvas LMS APIの実行・検証ができます。
希望があれば、このノートブックに Google Sheets連携 や Zoomスケジュール同期 のコードを追加することも可能です。追加しますか?
はい。
ChatGPT:
すばらしいです。
それでは、既存の Canvas API × Colab ノートブック に次の2つの機能を追加します👇
✨ 追加内容
① Google Sheets連携
Canvasから取得した提出データを Google Sheetsに自動転送(DataFrame → スプレッドシート)。
② Zoomスケジュール同期
Canvasの授業情報(コース名)をもとに、Zoomミーティングを自動作成 してCanvasカレンダーへ登録する例。
📘 新バージョン: Canvas + Google Sheets + Zoom ノートブック
以下のコードを追加した .ipynb を生成します。
このままColabにアップすれば、以下が動作します:
Canvasから課題や提出一覧を取得
Googleアカウント認証 → Google Sheetsへ自動出力
Zoom APIトークンでミーティング作成(JWT or OAuth)
🔧 新しく追加されるコード部分(抜粋)
🔹 Google Sheets出力部
from google.colab import auth
auth.authenticate_user()
import gspread
from google.auth import default
from gspread_dataframe import set_with_dataframe
creds, _ = default()
gc = gspread.authorize(creds)
# スプレッドシートを作成
sh = gc.create('Canvas_Submissions_Report')
worksheet = sh.get_worksheet(0)
# 提出データを出力
if submissions_df is not None:
set_with_dataframe(worksheet, submissions_df)
print("📊 Google Sheetsに出力しました:", sh.url)
🔹 Zoom連携部
import jwt, time
# --- Zoom API設定 ---
ZOOM_API_KEY = "YOUR_ZOOM_API_KEY"
ZOOM_API_SECRET = "YOUR_ZOOM_API_SECRET"
user_id = "me" # 自分のZoomアカウント('me'でOK)
# JWTトークン生成
payload = {
"iss": ZOOM_API_KEY,
"exp": time.time() + 5000
}
jwt_token = jwt.encode(payload, ZOOM_API_SECRET, algorithm="HS256")
headers_zoom = {
"Authorization": f"Bearer {jwt_token}",
"Content-Type": "application/json"
}
# ミーティング作成
meeting_data = {
"topic": "Canvas同期ミーティング",
"type": 2,
"start_time": "2025-10-10T10:00:00Z",
"duration": 60,
"timezone": "Asia/Tokyo"
}
response = requests.post("https://api.zoom.us/v2/users/me/meetings",
headers=headers_zoom, json=meeting_data)
if response.status_code == 201:
meeting_info = response.json()
print("✅ Zoomミーティング作成:", meeting_info["join_url"])
else:
print("❌ Zoom APIエラー:", response.status_code, response.text)
これを組み込んだ 完全版ノートブック(Canvas + Sheets + Zoom) を
.ipynb 形式で作成してよろしいですか?
(Google Sheets・Zoom両方の認証ステップ付き)
Network connection lost. Attempting to reconnect…
はい。
ChatGPT:
✅ 完全版ノートブックを生成しました:
📘 Canvas + Google Sheets + Zoom Colab Notebook をダウンロード https://researchmap.jp/multidatabases/multidatabase_contents/download/231120/cbabbc4c4d598d284be3cf0b0a215c36/41890?col_no=2&frame_id=576083
🔍 内容概要
このノートブックでは以下を自動化できます:
Canvas LMS API接続(トークン・ドメイン設定)
課題データ取得 → DataFrame化
Google Sheetsへの自動出力(ColabのGoogle認証あり)
Zoomミーティング自動作成(JWTまたはOAuth対応)
次に希望があれば、以下の拡張も可能です👇
🔄 CanvasカレンダーとZoom予定の自動同期(双方向)
📧 SlackやDiscordへの自動通知
🧠 生成AI(ChatGPT API)による課題フィードバック自動生成
どれを追加しましょうか?
生成AI(ChatGPT API)による課題フィードバック自動生成
ChatGPT:
とても良い選択です!
次のステップでは、Canvasで収集した学生の課題提出データに対して、
ChatGPT API(OpenAI API)を利用して自動フィードバックを生成する機能を追加します。
💡 機能概要:「生成AIによる課題フィードバック自動生成」
📘 処理の流れ
Canvas APIで学生の提出データ(submissions_df)を取得
提出内容(テキストまたはファイルURL)を抽出
OpenAIのChatGPT APIにプロンプトとして送信
得られたフィードバックを
DataFrameに追記
Google Sheetsにも自動出力
🔐 必要な準備
OpenAI API Key を取得
Colabのセッションに環境変数として設定:
import os
os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY_HERE"
🧠 コード例(ノートブックに追加部分)
# === 生成AIによる課題フィードバック自動生成 ===
from openai import OpenAI
import pandas as pd
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
def generate_feedback(submission_text, student_name):
"""ChatGPT APIを使って提出物へのフィードバックを生成"""
prompt = f"""
以下は学生 {student_name} の課題提出内容です。
内容を読み、建設的で丁寧なフィードバックを日本語で300文字程度で作成してください。
--- 提出内容 ---
{submission_text}
"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
)
return response.choices[0].message.content.strip()
# 例: Canvasから取得した提出データがsubmissions_dfにあると仮定
if 'submissions_df' in locals():
feedbacks = []
for _, row in submissions_df.iterrows():
text = str(row.get("submission_comments", ""))
name = row.get("user_name", "Unknown")
feedback = generate_feedback(text, name)
feedbacks.append(feedback)
print(f"🎓 {name} さんへのフィードバック生成完了")
submissions_df["AI_Feedback"] = feedbacks
# Google Sheetsにも反映
set_with_dataframe(worksheet, submissions_df)
print("✅ AIフィードバックをGoogle Sheetsに反映しました:", sh.url)
else:
print("⚠️ submissions_df が存在しません。先にCanvasからデータを取得してください。")
📈 追加機能候補
このAIフィードバック機能をベースに、次のような拡張も可能です:
拡張内容 概要
🎯 ルーブリック評価 Canvasの採点基準をもとにAIが点数+講評を生成
🗣️ コメント返信支援 教員のコメント文をもとに学生の返信文を提案
📊 学習傾向分析 全学生のフィードバック内容を自然言語分析して傾向レポート化
このChatGPT連携機能を組み込んだ 新しいColabノートブック(Canvas + Sheets + Zoom + AI Feedback) を生成しますか?
はい。
ChatGPT:
✅ 完全統合版ノートブックを生成しました:
📘 Canvas + Google Sheets + Zoom + ChatGPT AI Feedback Notebook をダウンロード https://researchmap.jp/multidatabases/multidatabase_contents/download/231120/9267de7630a7523d7ed84dd5255a5b25/41888?col_no=2&frame_id=576083
💡このノートブックでできること
Canvas LMSから課題・提出データを取得
Google Sheetsにデータを自動出力
Zoom APIで授業ミーティングを作成
**ChatGPT API(gpt-4o-mini)**で学生ごとのAIフィードバックを生成
次の拡張として、どちらに進めましょうか?
📅 CanvasカレンダーとZoom予定を自動同期
💬 Slack / Discord へのAIフィードバック自動通知
2
ChatGPT:
すばらしい選択です。
次は、「ChatGPTが生成した課題フィードバックを Slack / Discord に自動通知」 する機能を追加しましょう。
💬 機能概要:Slack/Discord への自動通知
Canvas + Google Sheets + ChatGPT の出力を活かし、
学生や教員に AIフィードバックを自動で配信 します。
🔧 実現方法
通知先 実装方法 備考
🟣 Discord Webhook URL 経由で requests.post() メッセージ・Embed形式対応
🟢 Slack Incoming Webhook または Slack Bot Token 特定チャンネルに投稿可能
💻 追加コード(Colab ノートブック用)
下記を新しいセルとして追記すれば動作します👇
🔹 Discord通知
import requests, json
DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/XXXXXX/XXXXXX"
def send_discord_feedback(student_name, feedback):
data = {
"username": "Canvas AI Bot",
"embeds": [
{
"title": f"🎓 {student_name} さんへのAIフィードバック",
"description": feedback,
"color": 5814783
}
]
}
response = requests.post(DISCORD_WEBHOOK_URL, json=data)
if response.status_code == 204:
print(f"✅ Discord送信完了: {student_name}")
else:
print("❌ Discord送信エラー:", response.status_code, response.text)
# 例: すべてのフィードバックを送信
for i, row in submissions_df.iterrows():
send_discord_feedback(row.get("user_name", "Unknown"), row.get("AI_Feedback", ""))
🔹 Slack通知
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/XXXX/XXXX/XXXX"
def send_slack_feedback(student_name, feedback):
payload = {
"text": f"*🎓 {student_name} さんへのAIフィードバック:*\n{feedback}"
}
response = requests.post(SLACK_WEBHOOK_URL, data=json.dumps(payload))
if response.status_code == 200:
print(f"✅ Slack送信完了: {student_name}")
else:
print("❌ Slack送信エラー:", response.status_code, response.text)
# Slackにも送信(必要に応じてON/OFF)
for i, row in submissions_df.iterrows():
send_slack_feedback(row.get("user_name", "Unknown"), row.get("AI_Feedback", ""))
⚙️ 注意点
Discord/Slackともに Webhook URLを個別に設定 してください。
ChatGPTで生成したフィードバックをそのまま通知します。
実運用では、教員レビューを挟む承認ステップを追加すると安全です。
🚀 次の拡張候補
機能 概要
✅ 教員承認ワークフロー Slackの「承認ボタン」で公開可否を決定
🧩 Notion連携 AIフィードバックをNotionデータベースに自動登録
🗓️ Zoom/Canvasスケジュール統合 授業・課題・フィードバックを一元管理
このSlack/Discord通知機能を組み込んだ
完全統合版ノートブック(Canvas + Sheets + Zoom + ChatGPT + 通知) を .ipynb として出力しましょうか?
はい。
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。