canvas-course-builder について
canvas-course-builderは、自然言語の指定、JSONテンプレート、既存コースを基にCanvasのコース構成を作るスキルです。コース設計者向けで、作成前に計画を提示して承認を得ます。
主な機能
- 01説明からコース構成を作成
- 02JSONテンプレートから構成を生成
- 03既存コースの構成を複製
- 04作成前に計画を確認
- 05構成をテンプレートとして保存
活用シーン
- 01新学期の週次モジュールを準備
- 02テンプレートからコースの骨組みを作成
- 03別コースに構成を複製
- 04再利用するコース構成を保存
MCP 対応
接続済みのCanvas MCP サーバーが必要で、コース検索、構成取得、モジュールやコンテンツの作成にそのツールを使います。複製されるのは構成のみで、コンテンツは含まれません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ vishalsachdev/ canvas-mcp --skill canvas-course-builderインストール後、Claude Code で/canvas-course-builderを入力して読み込まれたか確認します。
詳細
Canvas コースビルダー
自然言語の説明、JSON テンプレート、または既存のコースの複製から、Canvas のコース構成を丸ごと作成します。1 つのワークフローで、ページ、課題、ディスカッションを含むモジュールを作成し、適切に整理します。
前提条件
- Canvas MCP server が起動し、接続されている必要があります。
- 認証済みユーザーは、対象コースで instructor または designer ロールを持っている必要があります。
- 対象コースは Canvas にすでに存在している必要があります(このスキルはコースに内容を追加しますが、コース自体は作成しません)。
モード
このスキルは 3 つのモードで動作します。
モード 1:仕様から作成(デフォルト)
ユーザーが自然言語でコース構成を説明するか、構造化された仕様を提示します。
モード 2:テンプレートから作成
保存済みの JSON テンプレートを読み込み、コースのひな形を作成します。
モード 3:既存のコースを複製
コース A の構成を読み取り、コース B に複製します。
手順
1. モードを決定して入力を収集する
コース構成の作成方法をユーザーに尋ねます。
コース構成をどのように作成しますか?
- 説明する -- 構成を教えてください(例:「15 週間で、各週に概要ページ、課題、ディスカッションを設ける」)
- テンプレートから -- 保存済みのテンプレートファイルを読み込む
- 別のコースを複製する -- 既存コースの構成をコピーする
モード 1(仕様)の場合: 次の情報を尋ねます。
- 対象コース(コードまたは ID)
- モジュール/週/単元の数
- モジュールの命名パターン(例:「第 N 週:[トピック]」)
- 各モジュールに共通して含める項目(概要ページ、課題、ディスカッションなど)
- モジュールごとの例外(中間試験の週、最終プロジェクトなど)
モード 2(テンプレート)の場合: テンプレートファイルのパスを尋ねます。JSON テンプレートを解析します。
モード 3(複製)の場合: 次の情報を尋ねます。
- コピー元コース(コードまたは ID)
- 対象コース(コードまたは ID)
get_course_structure(source_course)を呼び出して、全体の構成を読み取る
2. 構成のプレビューを生成する
作成する内容のプレビューを作成し、ユーザーに提示します。
## Course Build Plan: [Course Name]
### Structure: 15 modules x 4 items each = 60 items total
| Module | Page | Assignment | Discussion | SubHeader |
|--------|------|------------|------------|-----------|
| Week 1: Introduction | Overview | HW 1 (10 pts) | Week 1 Forum | Materials |
| Week 2: Fundamentals | Overview | HW 2 (10 pts) | Week 2 Forum | Materials |
| ... | ... | ... | ... | ... |
| Week 14: Review | Overview | -- | Review Forum | Materials |
| Week 15: Final | Overview | Final Project (100 pts) | -- | Materials |
### Items to create:
- 15 modules
- 15 overview pages
- 14 assignments
- 14 discussion topics
- 15 subheaders
- Total: 73 Canvas objects
Shall I proceed?
3. ユーザーによる承認または変更
明示的な承認を待ちます。ユーザーは次の操作を行えます。
- そのまま承認する
- 変更を依頼する(項目の追加/削除、名前の変更、配点の調整)
- キャンセルする
承認なしに先へ進まないでください。
4. 作成を実行する
依存関係の順に項目を作成します。
- まずモジュール: 各モジュールについて
create_moduleをpublished=falseで呼び出します(モジュールはデフォルトで公開されます) - ページ: 各概要ページについて
create_pageをpublished=falseで呼び出します(ページはデフォルトで公開されます) - 課題: 各課題について
create_assignmentを呼び出します(未公開) - ディスカッション: 各フォーラムについて
create_discussion_topicを呼び出します - モジュール項目:
add_module_itemを呼び出して、作成した各項目をモジュールにリンクします
進捗を追跡しながら、随時報告します。
Creating modules... 15/15 done
Creating pages... 15/15 done
Creating assignments... 14/14 done
Creating discussions... 14/14 done
Linking items to modules... 58/58 done
作成に失敗した項目がある場合は、エラーを記録し、残りの項目の作成を続けます。
5. 結果を報告する
## Build Complete: [Course Name]
### Created:
- 15 modules
- 15 overview pages
- 14 assignments
- 14 discussion topics
- 58 module items linked
### Failed (0):
None
### Next Steps:
- All items created **unpublished** -- publish when ready
- Add content to overview pages
- Set due dates on assignments
- Run `/canvas-course-qc` to verify structure
6. テンプレートとして保存する(任意)
作成後、構成を再利用可能なテンプレートとして保存するかユーザーに尋ねます。
この構成を、今後のコースで使えるテンプレートとして保存しますか?
はいの場合は、get_course_structure(target_course) を呼び出し、出力を JSON ファイルとして保存します。
使用する MCP ツール
| ツール | 用途 |
|---|---|
list_courses | 利用可能なコースを検索する |
get_course_structure | 複製するコピー元コースを読み取る。作成後の確認にも使用する |
create_module | 各モジュールを作成する |
create_page | 概要/コンテンツページを作成する |
create_assignment | 課題を作成する |
create_discussion_topic | ディスカッションフォーラムを作成する |
add_module_item | 項目をモジュールにリンクする |
update_module | 準備ができたらモジュールを公開する |
テンプレート形式
テンプレートは、次の構造を持つ JSON ファイルです。
{
"template_name": "Standard 15-Week Semester",
"modules": [
{
"name_pattern": "Week {n}: {topic}",
"items": [
{"type": "SubHeader", "title_pattern": "Week {n} Materials"},
{"type": "Page", "title_pattern": "Week {n} Overview"},
{"type": "Assignment", "title_pattern": "HW {n}", "points": 10},
{"type": "Discussion", "title_pattern": "Week {n} Discussion"}
]
}
],
"special_modules": [
{"position": 8, "name": "Midterm Review", "items": [{"type": "Page", "title": "Midterm Study Guide"}]},
{"position": 15, "name": "Final Project", "items": [{"type": "Assignment", "title": "Final Project", "points": 100}]}
]
}
例
ユーザー:「BADM 350 に、毎週の概要ページ、宿題、ディスカッションを含む 15 週間の構成を作成して」
エージェント: プレビューを生成し、承認を求めてから、60 件以上の項目を作成します。
ユーザー:「CS 101 の構成を CS 102 に複製して」
エージェント: CS 101 の構成を読み取り、CS 102 用のプレビューを生成して承認を求め、一致する構成を作成します。
メモ
- モジュールとページは、
published=falseが渡された場合にのみ未公開になります(どちらもデフォルトでは公開されます)。create_assignmentはデフォルトで未公開になります。create_discussion_topicは作成時に必ず公開されます。ディスカッションをまだ学生に見せたくない場合は、今すぐ作成するのではなく、delayed_post_atを指定してスケジュールしてください。 - クローン作成時にコンテンツはコピーされません。コピーされるのは構造(モジュール名、アイテムの種類、構成)のみです。
- コース間でコンテンツ(構造だけではなく)をコピーするには、
create_content_migration(プレビューと確認トークン)を使用し、get_content_migration_statusで状態を確認してください。数ページだけなら、get_page_contentとcreate_pageによるページごとのコピーが適しています。 - 構築後に
canvas-course-qcを実行して、構造が完全かつ一貫していることを確認してください。