0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Classroomを使ったことがありません。これはなんですか。

Posted at

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

Google Classroomをつかうことがあるかも。
講師側でも受講側でも使ったことがなく、なんじゃらほい状態。

ChatGPT

Google Classroomを使ったことがありません。これはなんですか。

ChatGPT:

わかりました!では、Google Classroomについて、初心者向けにわかりやすく説明します。
Google Classroomとは?
Google Classroom(グーグル クラスルーム)は、学校や塾、オンライン講座で使うことができる学習管理ツールです。
簡単に言うと、**「先生と生徒がネット上でつながって、授業の資料配布・課題提出・連絡を一括で行えるアプリ」です。
主な特徴
授業の管理
先生が授業ごとに「クラス」を作成できます。
生徒は招待コードやリンクでクラスに参加します。
課題の配布・提出
先生は課題やテストをオンラインで配布できます。
生徒はパソコンやスマホから課題を提出できます。
コミュニケーション
クラス内で質問したり、先生からの連絡を受け取ったりできます。
コメント機能やお知らせ機能があります。
Googleサービスとの連携
Googleドキュメント、スプレッドシート、スライドなどと連携して課題を作成・提出できます。
メリット
紙の資料やプリントが不要。
課題の提出期限や進捗を簡単に管理できる。
先生と生徒がネット上で直接やり取りできる。
もしよければ、次に実際に生徒としてGoogle Classroomを使う場合の手順も簡単に説明できます。
それも見たいですか?
あなた:
他の類似ツールを8つ示し、損得をしめしてください。
ChatGPT:
もちろんです。Google Classroomに似た学習管理システム(LMS: Learning Management System)や教育用プラットフォームを8つ紹介し、それぞれの
利点(得)と欠点(損)**もまとめます。

  1. Microsoft Teams for Education
    得: Officeアプリ(Word、Excel、PowerPoint)と連携可能。ビデオ会議やチャットも一括管理できる。
    損: インターフェースがやや複雑で、初心者には操作が難しい場合がある。
  2. Moodle
    得: オープンソースで自由にカスタマイズ可能。大規模クラス向けの機能が豊富。
    損: 初期設定や管理が複雑で、ITスキルがないと運用が難しい。
  3. Canvas
    得: UIが直感的で使いやすい。課題管理や成績管理が充実。
    損: 無料版は機能制限があり、学校全体で使う場合はライセンス費用がかかる。
  4. Schoology
    得: SNS風の操作感で使いやすい。教材共有やコミュニケーションがスムーズ。
    損: 高度な機能は有料。日本語対応がやや不十分。
  5. Edmodo
    得: 学生とのコミュニケーションに特化。小・中学生向けに親しみやすい。
    損: 高度な課題管理や分析機能は弱め。
  6. Blackboard
    得: 大学や専門機関での実績が多く、成績管理・試験機能が充実。
    損: UIが古く、操作がやや複雑。導入コストが高い。
  7. Seesaw
    得: 小学生や幼児向けに最適。作品や学習記録の共有が簡単。
    損: 高学年や大学向けには機能が限定的。
  8. ClassDojo
    得: 行動評価やコミュニケーションに特化。保護者との連携も簡単。
    損: 課題やテスト管理は弱い。教育の総合管理には不向き。
    💡 まとめのポイント:
    小中学生向け: Seesaw、ClassDojo、Edmodo
    高校・大学向け: Google Classroom、Canvas、Blackboard、Moodle
    Officeとの連携重視: Microsoft Teams
    操作の簡単さ: Google Classroom、Canvas、Edmodo
    もし希望なら、私は**「初心者向けで使いやすくコストが低い順」にこれらをランキング化**して比較表も作れます。
    作ってほしいですか?

Notion.siteは別物ですか?

ChatGPT:

はい、Notion(Notion.site)はGoogle Classroomとは別物です。ただし、使い方によっては教育目的でも活用できます。
Notionとは?
本質: ノート、データベース、タスク管理、Wikiなどをまとめられる多機能な情報整理ツール。
特徴: ページを自由に作れる、テンプレートが豊富、チームや個人で情報共有可能。
Google Classroomとの違い
項目 Google Classroom Notion
主目的 学習管理・課題提出・授業運営 情報整理・ノート作成・タスク管理
課題管理 あり(提出・採点・期限管理) 基本的には手動でタスクや進捗管理
コミュニケーション コメントや通知でやり取り可能 コメント機能ありだが通知は限定的
対象 主に学校教育(先生と生徒) 学生・先生だけでなく誰でも使用可能
連携サービス Google Drive, Docsなど Slack, Google Calendar, Notion APIなど
まとめ
Google Classroom: 「オンライン授業・課題管理専用」
Notion: 「自由度の高い情報整理ツール」
教育でNotionを使う場合は、自分で課題提出や進捗管理の仕組みを作る必要があります。
希望なら、私は 「Notionで学校や授業を管理する場合の具体的な使い方」 を例で示すこともできます。
それも見ますか?

はい。

ChatGPT:

わかりました。では、Notionを使って学校や授業を管理する具体例を順を追って示します。ここでは「生徒・先生両方で使える仕組み」を想定します。

  1. クラスページの作成
    Notionで「クラス名ページ」を作る(例:数学1年A組)
    ページ内にサブページを作る:
    授業資料
    課題一覧
    成績管理(先生用)
    お知らせ
  2. 授業資料の管理
    教科書やプリントをPDFやリンクで貼り付け
    動画やウェブ教材も埋め込める
    テンプレート例:
    「授業日」ページ → 今日の内容+資料リンク+練習問題
  3. 課題の配布・提出
    課題用データベースを作成
    カラム例:
    課題名
    期限
    担当教師
    提出状況
    添付ファイル(生徒が提出できる)
    生徒は自分のページで課題をアップロード
    先生は進捗状況を一覧で確認可能
  4. コミュニケーション
    コメント機能を使い、課題や資料に質問可能
    お知らせページに授業や試験の情報をまとめて掲載
    Slackやメールと連携すれば通知も飛ばせる
  5. 成績や進捗の管理(先生用)
    データベースで生徒ごとの提出状況や得点を記録
    表やカレンダー表示で進捗を可視化
    生徒には閲覧権限を制限することで個人情報を守れる
  6. メリットと注意点
    メリット:
    自由度が高く、授業スタイルに合わせてカスタマイズ可能
    資料や課題、進捗が一元管理できる
    注意点:
    課題の自動採点機能はない
    Google Classroomのような通知や提出期限の強制力は弱い
    初めて作る場合、ページ構造を設計する手間がある
    💡 補足:
    Notionは「自由度の高い学習管理ツール」と考えると理解しやすいです。Google Classroomが「授業に最適化された完成品のLMS」だとすれば、Notionは「自分で作れるカスタムLMS」といったイメージです。
    希望なら、私はこの説明を元に 実際のNotionテンプレート例を作って、すぐ使える形 にもできます。
    作りますか?

Google Classroomで利用可能な便利スクリプトをお示しください。

ChatGPT:

わかりました。Google Classroomは公式APIがあり、課題管理やクラス情報取得などを自動化できます。ここでは便利に使えるスクリプト例をいくつか示します。すべてPythonで、Google Classroom APIを利用します。

  1. クラス一覧を取得するスクリプト
from googleapiclient.discovery import build
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/classroom.courses.readonly']
SERVICE_ACCOUNT_FILE = 'service_account.json'

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('classroom', 'v1', credentials=credentials)

results = service.courses().list().execute()
courses = results.get('courses', [])

for course in courses:
    print(f"Class: {course['name']} (ID: {course['id']})")

用途: 自分が管理するすべてのクラス名とIDを一覧表示
便利: クラスIDを使って課題や生徒情報の取得に活用
2. 課題一覧を取得するスクリプト

course_id = 'YOUR_COURSE_ID'  # 取得したクラスIDに置き換え
results = service.courses().courseWork().list(courseId=course_id).execute()
courseworks = results.get('courseWork', [])

for cw in courseworks:
    print(f"Assignment: {cw['title']} | Due: {cw.get('dueDate')}")

用途: クラス内の課題をまとめて確認
便利: 期限管理やリマインダー作成に使える
3. 生徒の提出状況を取得するスクリプト

course_work_id = 'YOUR_COURSEWORK_ID'

submissions = service.courses().courseWork().studentSubmissions().list(
    courseId=course_id, courseWorkId=course_work_id
).execute()

for s in submissions.get('studentSubmissions', []):
    print(f"Student ID: {s['userId']} | State: {s['state']}")

用途: 課題の提出済み/未提出を確認
便利: 提出漏れリストを自動生成できる
4. 課題を自動作成するスクリプト

new_assignment = {
    'title': '自動作成課題',
    'description': 'この課題はスクリプトで作成されました',
    'workType': 'ASSIGNMENT',
    'dueDate': {'year': 2025, 'month': 10, 'day': 15},
    'dueTime': {'hours': 23, 'minutes': 59}
}

created = service.courses().courseWork().create(
    courseId=course_id, body=new_assignment).execute()
print(f"Created assignment ID: {created['id']}")

用途: 定期課題やテンプレ課題を自動作成
便利: 同じ課題を複数クラスに一括配布可能
ポイント
Google Classroom APIを使う場合、サービスアカウント or OAuth2 認証 が必要
Pythonだけでなく Apps Script でも同様の自動化が可能
スクリプト化することで、課題管理、提出確認、通知送信などを自動化できる
希望なら、私は 「Python + Google Classroom APIで生徒への自動リマインダー送信まで行う実用サンプル」 を作ることもできます。
作りますか?

はい。

ChatGPT:

では、PythonとGoogle Classroom APIを使って、生徒への課題提出リマインダーを自動送信するスクリプト例を作ります。ここでは、提出期限が近い課題をチェックして、未提出の生徒にメールで通知する仕組みを示します。
前提
Google Classroom API と Gmail API の有効化
サービスアカウントまたは OAuth2 認証の準備
google-api-python-client と google-auth のインストール
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
サンプルスクリプト

from googleapiclient.discovery import build
from google.oauth2 import service_account
from datetime import datetime, timedelta

# 認証情報
SCOPES = [
    'https://www.googleapis.com/auth/classroom.coursework.students.readonly',
    'https://www.googleapis.com/auth/classroom.rosters.readonly',
    'https://www.googleapis.com/auth/gmail.send'
]
SERVICE_ACCOUNT_FILE = 'service_account.json'

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
classroom_service = build('classroom', 'v1', credentials=credentials)
gmail_service = build('gmail', 'v1', credentials=credentials)

# 対象クラスID
course_id = 'YOUR_COURSE_ID'

# 課題一覧取得
courseworks = classroom_service.courses().courseWork().list(courseId=course_id).execute().get('courseWork', [])

# 今日から3日以内の課題を対象
today = datetime.today()
target_date = today + timedelta(days=3)

for cw in courseworks:
    due = cw.get('dueDate')
    if due:
        due_date = datetime(due['year'], due['month'], due['day'])
        if today <= due_date <= target_date:
            # 提出状況確認
            submissions = classroom_service.courses().courseWork().studentSubmissions().list(
                courseId=course_id, courseWorkId=cw['id']
            ).execute().get('studentSubmissions', [])

            for s in submissions:
                if s['state'] != 'TURNED_IN':
                    # 生徒IDからメール取得
                    student_id = s['userId']
                    student = classroom_service.courses().students().get(
                        courseId=course_id, userId=student_id
                    ).execute()
                    email = student['profile']['emailAddress']

                    # メール作成
                    message = {
                        'raw': base64.urlsafe_b64encode(
                            f"To: {email}\nSubject: 課題提出リマインダー\n\n課題「{cw['title']}」の提出期限が近づいています。提出を忘れないでください。".encode('utf-8')
                        ).decode('utf-8')
                    }

                    # メール送信
                    gmail_service.users().messages().send(userId='me', body=message).execute()
                    print(f"Reminder sent to {email} for assignment {cw['title']}")

仕組みの説明
課題取得: 指定クラスの課題一覧を取得
期限チェック: 今日から3日以内の課題のみ対象
提出状況確認: 未提出の生徒のみ抽出
メール送信: Gmail APIを使って自動リマインダー送信
💡 補足ポイント
Gmail API での送信は base64 エンコードが必要
提出済み/未提出の判定は state フィールドで行う
cron やスケジューラーに登録すれば毎日自動でリマインダー送信が可能
希望であれば、私はこのスクリプトを さらに「複数クラス対応+Slack通知対応」に拡張した実用版 にアップデートできます。
作りますか?

はい。

ChatGPT:

了解です。それでは、先ほどのスクリプトを複数クラス対応+Slack通知付きの実用版にアップデートした例を示します。
前提
Google Classroom API と Gmail API の有効化
Slack Incoming Webhook URL の取得
Python ライブラリのインストール
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib requests
サンプルスクリプト(複数クラス+Slack通知)

import base64
from googleapiclient.discovery import build
from google.oauth2 import service_account
from datetime import datetime, timedelta
import requests

# --- 認証情報 ---
SCOPES = [
    'https://www.googleapis.com/auth/classroom.coursework.students.readonly',
    'https://www.googleapis.com/auth/classroom.rosters.readonly',
    'https://www.googleapis.com/auth/gmail.send'
]
SERVICE_ACCOUNT_FILE = 'service_account.json'
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES
)

classroom_service = build('classroom', 'v1', credentials=credentials)
gmail_service = build('gmail', 'v1', credentials=credentials)

# --- Slack Webhook URL ---
SLACK_WEBHOOK_URL = 'YOUR_SLACK_WEBHOOK_URL'

# --- 対象クラスIDリスト ---
course_ids = ['CLASS_ID_1', 'CLASS_ID_2']  # 複数クラス対応

# --- 日付設定 ---
today = datetime.today()
target_date = today + timedelta(days=3)

# --- メイン処理 ---
for course_id in course_ids:
    # 課題取得
    courseworks = classroom_service.courses().courseWork().list(courseId=course_id).execute().get('courseWork', [])
    
    for cw in courseworks:
        due = cw.get('dueDate')
        if due:
            due_date = datetime(due['year'], due['month'], due['day'])
            if today <= due_date <= target_date:
                # 提出状況確認
                submissions = classroom_service.courses().courseWork().studentSubmissions().list(
                    courseId=course_id, courseWorkId=cw['id']
                ).execute().get('studentSubmissions', [])
                
                for s in submissions:
                    if s['state'] != 'TURNED_IN':
                        student_id = s['userId']
                        student = classroom_service.courses().students().get(
                            courseId=course_id, userId=student_id
                        ).execute()
                        email = student['profile']['emailAddress']
                        student_name = student['profile']['name']['fullName']

                        # --- Gmail通知 ---
                        message_text = f"課題「{cw['title']}」の提出期限が近づいています。提出を忘れないでください。"
                        message = {
                            'raw': base64.urlsafe_b64encode(
                                f"To: {email}\nSubject: 課題提出リマインダー\n\n{message_text}".encode('utf-8')
                            ).decode('utf-8')
                        }
                        gmail_service.users().messages().send(userId='me', body=message).execute()
                        print(f"Gmail reminder sent to {student_name} ({email}) for {cw['title']}")

                        # --- Slack通知 ---
                        slack_text = f"⏰ {student_name} さんへリマインダー: 課題「{cw['title']}」の提出期限が {due_date.strftime('%Y-%m-%d')} です。"
                        requests.post(SLACK_WEBHOOK_URL, json={"text": slack_text})
                        print(f"Slack notification sent for {student_name} ({cw['title']})")

特徴
複数クラス対応: course_ids に複数クラスIDを設定可能
Gmail通知: 未提出の生徒にメールで自動リマインダー
Slack通知: 教師用チャンネルなどに同時に通知
期限設定: 今日から3日以内の課題を自動抽出
💡 運用ポイント
cronやWindowsタスクスケジューラで毎日定期実行すると自動化が完了
Slack通知で教員も未提出状況を把握できる
Gmail送信は一度に大量に送ると制限に引っかかるため注意
必要であれば、私はこのスクリプトを 「提出済みもまとめて進捗管理表をGoogle Sheetsに自動出力」 まで拡張した完全版にすることもできます。
作りますか?

はい。

ChatGPT:

了解です。それでは、先ほどのスクリプトをさらに拡張して、提出状況を自動でGoogle Sheetsに集計・出力する完全版を示します。これにより、先生はGmailやSlack通知だけでなく、進捗表としても一目で確認できます。
前提
Google Classroom API + Gmail API + Google Sheets API + Slack Webhook が有効
サービスアカウント or OAuth2 認証
Python ライブラリインストール
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib requests
Google Sheets 上に進捗管理用のスプレッドシートを作成し、IDを取得
完全版サンプルスクリプト

import base64
from googleapiclient.discovery import build
from google.oauth2 import service_account
from datetime import datetime, timedelta
import requests

# --- 認証情報 ---
SCOPES = [
    'https://www.googleapis.com/auth/classroom.coursework.students.readonly',
    'https://www.googleapis.com/auth/classroom.rosters.readonly',
    'https://www.googleapis.com/auth/gmail.send',
    'https://www.googleapis.com/auth/spreadsheets'
]
SERVICE_ACCOUNT_FILE = 'service_account.json'
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES
)

classroom_service = build('classroom', 'v1', credentials=credentials)
gmail_service = build('gmail', 'v1', credentials=credentials)
sheets_service = build('sheets', 'v4', credentials=credentials)

# --- Slack Webhook URL ---
SLACK_WEBHOOK_URL = 'YOUR_SLACK_WEBHOOK_URL'

# --- Google Sheets ID ---
SHEET_ID = 'YOUR_SHEET_ID'
SHEET_NAME = '進捗管理'

# --- 対象クラスIDリスト ---
course_ids = ['CLASS_ID_1', 'CLASS_ID_2']  # 複数クラス対応

# --- 日付設定 ---
today = datetime.today()
target_date = today + timedelta(days=3)

# --- スプレッドシート初期化 ---
sheet_values = [['クラス名', '課題名', '生徒名', 'メール', '提出状況', '期限']]

# --- メイン処理 ---
for course_id in course_ids:
    # クラス情報取得
    course = classroom_service.courses().get(courseId=course_id).execute()
    course_name = course['name']

    # 課題取得
    courseworks = classroom_service.courses().courseWork().list(courseId=course_id).execute().get('courseWork', [])
    
    for cw in courseworks:
        due = cw.get('dueDate')
        if due:
            due_date = datetime(due['year'], due['month'], due['day'])
            if today <= due_date <= target_date:
                # 提出状況確認
                submissions = classroom_service.courses().courseWork().studentSubmissions().list(
                    courseId=course_id, courseWorkId=cw['id']
                ).execute().get('studentSubmissions', [])
                
                for s in submissions:
                    student_id = s['userId']
                    student = classroom_service.courses().students().get(
                        courseId=course_id, userId=student_id
                    ).execute()
                    email = student['profile']['emailAddress']
                    student_name = student['profile']['name']['fullName']
                    state = s['state']

                    # --- Gmail通知(未提出のみ) ---
                    if state != 'TURNED_IN':
                        message_text = f"課題「{cw['title']}」の提出期限が近づいています。提出を忘れないでください。"
                        message = {
                            'raw': base64.urlsafe_b64encode(
                                f"To: {email}\nSubject: 課題提出リマインダー\n\n{message_text}".encode('utf-8')
                            ).decode('utf-8')
                        }
                        gmail_service.users().messages().send(userId='me', body=message).execute()
                        print(f"Gmail reminder sent to {student_name} ({email}) for {cw['title']}")

                        # --- Slack通知 ---
                        slack_text = f"{student_name} さんへリマインダー: 課題「{cw['title']}」の提出期限が {due_date.strftime('%Y-%m-%d')} です。"
                        requests.post(SLACK_WEBHOOK_URL, json={"text": slack_text})
                        print(f"Slack notification sent for {student_name} ({cw['title']})")

                    # --- スプレッドシートに追加 ---
                    sheet_values.append([
                        course_name,
                        cw['title'],
                        student_name,
                        email,
                        state,
                        due_date.strftime('%Y-%m-%d')
                    ])

# --- スプレッドシートに書き込み ---
sheets_service.spreadsheets().values().update(
    spreadsheetId=SHEET_ID,
    range=SHEET_NAME + '!A1',
    valueInputOption='RAW',
    body={'values': sheet_values}
).execute()

print("Google Sheetsに提出状況を更新しました。")

特徴
複数クラスに対応
Gmailで生徒にリマインダー送信
Slackで教員向け通知
提出状況をGoogle Sheetsに自動集計
今日から3日以内の課題のみ対象
💡 運用のコツ
定期実行: cron または Windows タスクスケジューラで毎日自動実行
カスタマイズ: 提出期限の範囲や通知文を自由に変更可能
進捗確認: Sheetsでフィルターをかければ未提出一覧だけ表示可能
必要であれば、私はこのスクリプトをさらに 「提出期限が過ぎた課題だけを抽出し、ペナルティ対象リストも作成」 まで自動化するバージョンにもできます。
作りますか?
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?