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?

Canvas LMS 使ったことがありません。with ChatGPT

Last updated at Posted at 2025-10-09

大規模言語モデル講座 基礎編 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フィードバック自動通知

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 の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。

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?