Canvas Editor
Canvas LMS 管理ツール マニュアル
このツールはコマンドラインから Canvas LMS のコース管理を対話形式で行うための Python スクリプトです。モジュール管理・小テスト設定・評定表エクスポートなど 17 の操作に対応しています。
動作環境・必要なもの
| 項目 | 内容 |
|---|---|
| OS | macOS / Linux / Windows(WSL) |
| Python | 3.10 以上 |
| 外部ライブラリ | openpyxl(起動スクリプトが自動インストール) |
| Canvas 権限 | 対象コースの教員権限 + API トークン |
ファイル構成
Canvas/
├── canvas_quiz_editor.py # メインスクリプト
└── run.sh # 起動スクリプト(仮想環境を自動管理)
2ファイルを同じフォルダに置いてください。
インストール・初回セットアップ
1. ファイルを配置する
canvas_quiz_editor.py と run.sh を同じフォルダ(例:~/Canvas/)に置きます。
2. 起動スクリプトに実行権限を付与する(初回のみ)
chmod +x run.sh
3. Canvas API トークンを取得する
ツールを使うには Canvas の API トークンが必要です。以下の手順で取得してください。
- Canvas にログインし、右上のアカウントアイコンをクリックして「設定」を開く
- ページ下部の「承認済みインテグレーション」セクションまでスクロールする
- 「新しいアクセストークンを生成」ボタンをクリックする
- 用途(例:Canvas 管理ツール)と有効期限を入力して「トークンを生成」をクリックする
- 表示されたトークン文字列をコピーして安全な場所に保存する
起動方法
./run.sh
初回起動時は仮想環境の作成と openpyxl のインストールが自動で行われます。2回目以降はそのまま起動します。
python3 --version を実行して Python 3.10 以上がインストールされているか確認してください。
基本的な操作の流れ
- 接続設定:Canvas の URL(例:
https://yourschool.instructure.com)と API トークンを入力する(セッション中1回のみ) - コース選択:担当コースの一覧が表示されるので番号を入力する
- 操作メニュー:実行したい操作の番号を入力する(現在のコース名が毎回表示される)
- 各操作の手順に従って入力する
bで操作メニューに戻る、qで終了
b を入力すると、その操作をキャンセルして操作メニューに戻ります。
操作メニュー一覧
| 番号 | 操作 | カテゴリ |
|---|---|---|
| 1 | 小テストの日時一覧を表示する | 小テスト |
| 2 | 小テストの日時を変更する | 小テスト |
| 3 | モジュールを作成する | モジュール |
| 4 | モジュールにページを追加する | モジュール |
| 5 | モジュールにファイルをアップロードして追加する | モジュール |
| 6 | モジュールに外部 URL を追加する | モジュール |
| 7 | モジュールの公開・非公開を変更する(個別) | モジュール |
| 8 | モジュールアイテムの公開・非公開を変更する(個別) | モジュール |
| 9 | モジュールと全アイテムを公開する | モジュール |
| 10 | モジュールのみを公開する(アイテムは変更しない) | モジュール |
| 11 | モジュールと全アイテムを非公開にする | モジュール |
| 12 | 非公開のモジュール・アイテムを一覧表示して公開する | モジュール |
| 13 | 公開中のモジュール・アイテムを一覧表示して非公開にする | モジュール |
| 14 | モジュールを他のコースにコピーする | コース間コピー |
| 15 | モジュールのアイテムを他のコースのモジュールにコピーする | コース間コピー |
| 16 | Classic Quiz を他のコースにコピーする | コース間コピー |
| 17 | 評定表をエクスポートする(CSV / xlsx) | 評定 |
各操作の詳細
1. 小テストの日時一覧を表示する
コース内の全小テストの公開日時・提出期限・公開終了日時を一覧表示します。
# タイトル 公開日時 提出期限 公開終了
──────────────────────────────────────────────────────────────────
1 第1回小テスト 2026-04-01 09:00 2026-04-07 23:59 2026-04-08 00:00
2 第2回小テスト (未設定) 2026-04-14 23:59 (未設定)
2. 小テストの日時を変更する
複数の小テストを選択して、公開日時・提出期限・公開終了日時を一括変更します。
- 日時の入力形式:
2026-06-01 23:59 - 変更しない項目は空 Enter でスキップ
clearと入力すると設定を削除(未設定に戻す)- 複数選択:
1,3,5/2-6/all
3. モジュールを作成する
モジュール名と公開開始日時(任意)を入力して新しいモジュールを作成します。
4. モジュールにページを追加する
新しいページを作成してモジュールに追加します。
- ページタイトル・本文(HTML 可)を入力
- 本文は空行を2回入力で確定、1行目に
bだけで戻る - 公開状態・公開開始日時・公開終了日時を設定可能
5. モジュールにファイルをアップロードして追加する
ローカルのファイルを Canvas にアップロードしてモジュールに追加します。
- ファイルパスは絶対パス・相対パスどちらでも可(例:
/Users/you/doc.pdf) - モジュール上での表示タイトルを変更可能(空 Enter でファイル名をそのまま使用)
- 公開開始・終了日時を設定可能
6. モジュールに外部 URL を追加する
外部 Web サイトへのリンクをモジュールアイテムとして追加します。
- URL は
https://またはhttp://から始まるものを入力 - 新しいタブで開くかどうかを選択可能
- 公開開始・終了日時を設定可能
7. モジュールの公開・非公開を変更する(個別)
モジュールを複数選択して、公開または非公開に変更します。現在の状態が一覧に表示されます。
8. モジュールアイテムの公開・非公開を変更する(個別)
モジュールを選んだ後、アイテムを複数選択して公開・非公開を変更します。アイテムの種別(ページ・ファイル・外部 URL・小テストなど)と現在の状態が表示されます。
9. モジュールと全アイテムを公開する
選択したモジュールと、その中の全アイテムをまとめて公開します。
10. モジュールのみを公開する(アイテムは変更しない)
モジュール自体だけを公開します。各アイテムの公開状態は変更しません。
11. モジュールと全アイテムを非公開にする
選択したモジュールと全アイテムをまとめて非公開にします。
12. 非公開のモジュール・アイテムを一覧表示して公開する
コース内の全モジュール・全アイテムをスキャンし、非公開のものだけをフラットに一覧表示します。番号を選んで公開できます。
非公開 一覧
═══════════════════════════════════════════════════
1. [モジュール] 第3回 資料
2. └─ [ページ ] シラバス (第1回 資料)
3. └─ [ファイル] lecture02.pdf (第2回 資料)
b. 戻る
13. 公開中のモジュール・アイテムを一覧表示して非公開にする
公開中のモジュール・アイテムのみをフラットに一覧表示します。番号を選んで非公開にできます。
14. モジュールを他のコースにコピーする
現在のコースのモジュール(複数選択可)を、別のコースにコピーします。コピー先に同名のモジュールが作成され、アイテムがそこに追加されます。
| アイテム種別 | コピーの挙動 |
|---|---|
| ページ | 本文ごと複製して追加 |
| 外部 URL | そのまま追加 |
| ファイル | ダウンロード URL を外部 URL として追加(Canvas の仕様上、ファイル本体はコピーされません) |
| Classic Quiz・課題・討論 | 元コンテンツの URL へのリンクとして追加(Classic Quiz は 16番で本体ごとコピー可) |
15. モジュールのアイテムを他のコースのモジュールにコピーする
コピー元のモジュールとアイテムを選択し、コピー先のコース・モジュールを指定します。コピー先モジュールは既存のものから選ぶか、新規作成できます。
16. Classic Quiz を他のコースにコピーする
Classic Quiz(旧形式の小テスト)を選択し、問題本体ごとコピー先コースに再生成します。New Quizzes(新形式)には対応していません。
対応する Classic Quiz の種別:
| 種別 | 説明 |
|---|---|
| 採点あり | 通常の小テスト(成績に反映) |
| 練習用 | 成績に反映しない練習問題 |
| 採点アンケート | 回答者を記録するアンケート |
| アンケート | 匿名アンケート |
コピーされる内容:
- クイズのタイトル・説明・制限時間・試行回数・シャッフル設定など
- 全問題(多肢選択・正誤・複数回答・穴埋め・記述・数値など全タイプ対応)
- 各問題の選択肢・正解・配点・解説コメント
操作の流れ:
Classic Quiz 一覧(コピー元)
1. [採点あり] 第1回小テスト (10問)
2. [練習用 ] 練習問題 (5問)
b. 戻る
選択 > 1
コピー先コースを選択 → 番号を入力
コピー先のモジュールにも追加しますか? [y]: y
→ モジュールを選択(または新規作成)
確認後 y → コピー実行
✅ クイズ本体を作成しました。
✅ 問題: 10/10 件を作成しました。
✅ モジュール「第1回」に追加しました。
17. 評定表をエクスポートする(CSV / xlsx)
評定表を以下の3ステップで出力します。
- Canvas API(受講生・課題・提出データ)から評定表を組み立て
- UTF-8 BOM 付き CSV として保存
- openpyxl で xlsx に変換して保存(ヘッダー書式・列幅自動調整・先頭行固定)
出力される列:
| 列名 | 内容 |
|---|---|
| Student | 元の氏名フィールド(加工前) |
| college | 半角英数3文字+全角2文字+半角英数2文字+全角2文字 |
| stid | ハイフン後の半角英数7文字(学籍番号) |
| name | 空白以降の漢字氏名 |
| SIS User ID / Login ID | Canvas ユーザー ID |
| Current / Final Score・Grade | 現在・最終の評点・評価 |
| 各課題名 (配点) | 各課題のスコア |
ABC大学DE学科-1234567 山田太郎 の形式に一致しない場合、college と stid は空欄になり、name に元の文字列がそのまま格納されます。
出力ファイル例:
gradebook_コース名_20260415_103000_utf8bom.csv
gradebook_コース名_20260415_103000.xlsx
共通の入力ルール
| 入力 | 動作 |
|---|---|
b | 現在の操作をキャンセルして操作メニューに戻る |
| 空 Enter | 日時入力:変更なし/選択肢:デフォルト値を使用 |
clear | 日時入力:設定を削除して未設定にする |
all | 複数選択:一覧の全件を選択 |
1,3,5 | 複数選択:番号をカンマ区切りで指定 |
2-6 | 複数選択:範囲で指定(2番から6番) |
r | 操作メニューから:コース一覧を再取得してコース選択に戻る |
q | 操作メニューから:ツールを終了する |
日時の入力形式
すべての日時は 日本標準時(JST) で入力します。内部で UTC に自動変換されます。
2026-06-01 23:59
2026/06/01 23:59
2026-06-01 ← 時刻は 00:00 扱い
よくある質問
Q. 「担当コースが見つかりません」と表示される
API トークンが無効か期限切れの可能性があります。Canvas の設定画面でトークンを再生成してください。または、コースが「公開済み」状態でない場合は一覧に表示されないことがあります。
Q. ファイルアップロードが失敗する
ファイルパスが正しいか確認してください。スペースを含むパスは引用符なしでそのまま入力できます。ファイルサイズが大きい場合は時間がかかることがあります。
Q. コース間コピーで小テストや課題がリンクになってしまう
14番・15番のモジュールコピー機能では、Canvas API の仕様上、課題・討論はコース間での完全なコピーができないため URL リンクとして追加されます。Classic Quiz については 16番の専用機能で問題本体ごとコピーできます。課題・討論のコピーは Canvas の「コースインポート」機能をご利用ください。
Q. Classic Quiz のコピーで一部の問題が失敗する
問題タイプや選択肢の構造が特殊な場合に作成が失敗することがあります。コピー後に Canvas 上で問題数を確認し、不足している問題は手動で追加してください。
Q. 評定表の college・stid が空欄になる
氏名フィールドが想定のフォーマット(ABC大学DE学科-1234567 山田太郎)と異なる場合に空欄になります。Student 列に元の氏名は保持されています。


