

カリキュラムからプログラムでレッスンスライドを生成する方法(2026年版)
レッスンスライドをプログラムで生成するには、カリキュラムを「レッスンごとに1行」(ユニット、タイトル、目標、語彙、学年、言語)でエクスポートし、スクリプトで各行ごとに2Slides Fast PPTの POST /api/v1/slides/generate エンドポイントを呼び出します。テーマは GET /api/v1/themes/search から教育向けを選び、responseLanguage はクラスごとに設定します。12スライドのデッキは編集可能なPPTXで、120クレジット(約0.30ドル)で約30秒で返却されます。反転授業には create-pdf-slides と generate-narration を組み合わせて短い動画講義を作成可能です。教育テック開発者、教材設計者、学区のカリキュラムチーム向けの手法です。
ポイントまとめ
- Fast PPTのレッスンデッキは1スライドあたり10クレジット、12スライドで120クレジット、2,000クレジット5ドルのプランなら約0.30ドル。
- 40レッスン×12スライドの学科なら4,800クレジット(約12ドル)、1分間に6リクエストの制限で約7分で提出可能。
responseLanguageは「Spanish」や「Vietnamese」など言語名を受け付け、同じカリキュラム行から20以上の言語でバイリンガルプログラム対応。- Fast PPTの出力はネイティブで編集可能なPPTXなので、教師が授業前にスライドを自由に調整可能。Fast PPTデッキはナレーション対応不可。
- 反転授業用の8スライド動画講義は2,490クレジット(2,000スライド分810+ナレーション1,680)、約5〜6.25ドル。
対象ユーザー
カリキュラムを構造化された形式(Google Sheets、LMSのCSV、コースデータベースなど)で管理し、レッスンごとにドラフトデッキを大量に作成したい教材設計者、教育テックエンジニア、コースクリエイター向け。英語とスペイン語やベトナム語で1レッスンを用意するバイリンガルプログラムの学区チームに特に有効です。
レッスンが5つ程度で教師が午後に作成できるなら、このレシピは不要です。教師向けツールのまとめはこちらをご覧ください。
ワークフロー概要
| ステップ | ツール | 内容 | 2Slidesエンドポイント / クレジット |
|---|---|---|---|
| 1 | SheetsやLMSのエクスポート | レッスンと言語ごとに1行:ユニット、タイトル、学年、目標、語彙、スライド数 | なし |
| 2 | curlやブラウザ | 教育・教室向けテーマを検索し、学年帯ごとに1つのthemeIdを保存 | GET /api/v1/themes/search 無料 |
| 3 | PythonやNode | 行のフィールドから構造化プロンプトを作成し、クラスごとにresponseLanguageを設定 | なし |
| 4 | PythonやMake | 各行ごとにmode: "async"でgenerateを呼び出し、1分あたり最大6回 | POST /api/v1/slides/generate 1ページ10クレジット |
| 5 | スクリプト | 5〜10秒ごとにsuccessになるまでポーリングし、PPTXをDriveやLMSに保存 | GET /api/v1/jobs/{id} 無料 |
| 6 | 教師 | PPTXをレビュー・編集・承認し、生徒に配布 | なし |
| 7(任意) | スクリプト+ワークスペース | 反転授業用:画像デザインスライド、単一音声ナレーション、MP4書き出し | create-pdf-slides 2Kで1ページあたり10+100クレジット、generate-narration 1ページ210クレジット |
ステップ1:カリキュラムエクスポートの正規化
LMSのエクスポートや進度表を、レッスンと言語ごとに1行に平坦化します。2言語で授業がある場合は行を複製し、language列だけ変えます。目標や語彙など複数値はパイプ区切りにして、プロンプトビルダーが箇条書きに変換できるようにします。
unit,lesson_title,grade,objectives,vocabulary,language,slide_count
Ecosystems,Food Webs and Energy Flow,7,"Explain how energy moves between trophic levels|Identify producers, consumers and decomposers in a local ecosystem","producer|consumer|decomposer|trophic level",English,12
Ecosystems,Food Webs and Energy Flow,7,"Explain how energy moves between trophic levels|Identify producers, consumers and decomposers in a local ecosystem","producer|consumer|decomposer|trophic level",Spanish,12
Fractions,Comparing Fractions with Unlike Denominators,4,"Compare two fractions using common denominators|Justify comparisons with a visual model","numerator|denominator|equivalent fraction|benchmark fraction",Vietnamese,10後でスクリプトが埋める3つの管理用列を追加します:job_id、download_url、status。status列は後述のレビューのワークフローを制御します。
ステップ2:教育向けテーマIDを探す
themeIdはFast PPTデッキの見た目を決めます。1,500以上のテンプレートから教室関連のキーワードで検索し、小学校向けに手描きや落書き風、二次教育向けによりクリーンなものを学年帯ごとに1〜2個選びます。
curl "https://2slides.com/api/v1/themes/search?query=education&limit=10" \
-H "Authorization: Bearer $SLIDES_API_KEY"
# 他にも query=classroom, query=doodle, query=science, query=study も試す価値あり結果にはthemeIdとメタデータが含まれます。IDはシートではなく環境変数(EDU_THEME_ELEMENTARY、EDU_THEME_SECONDARY)に保存してください。検索エンドポイントは無料ですが1分あたり6リクエストの制限を共有するため、セットアップ時に1回だけ実行します。

themes/searchで検索可能。
ステップ3:プロンプトを作成し多言語スライドの言語を設定
プロンプトはカリキュラムの質がデッキの質になる部分です。学年、目標の箇条書き、定義すべき語彙、固定のスライド構成をモデルに伝えます。userInputは数百語以内に抑え、目標と語彙が入力であり、ユニット全体の計画ではありません。
次に行のlanguageからresponseLanguageを設定します。言語名を受け付けるため、「Spanish」や「Vietnamese」は有効ですが、「es」や「vi」は無効です。プロンプトは英語で書き、デッキはスペイン語で出力することも可能。1つのテンプレートで全言語対応できます。
Create a 12-slide lesson deck for grade 7.
Unit: Ecosystems
Lesson: Food Webs and Energy Flow
Learning objectives:
- Explain how energy moves between trophic levels
- Identify producers, consumers and decomposers in a local ecosystem
Key vocabulary to define with one example each: producer, consumer, decomposer, trophic level
Structure: title slide, objectives, warm-up question, 5 content slides with one idea each,
vocabulary slide, quick check with 3 questions, summary.
Use short sentences suitable for the grade level.
generateエンドポイントパラメータ。responseLanguageは20以上の言語名を受け付ける。
ステップ4:Fast PPTでレッスンスライドをプログラム生成
ここが少人数チームで教室用プレゼンを一括作成できるステップです。Fast PPTのgenerateはデフォルトで同期処理で1回の呼び出しでdownloadUrlを返しますが、バッチ処理にはmode: "async"を設定し、jobIdを集めてポーリングします。1デッキ約30秒かかり、キーは1分に6リクエストまでなので10秒間隔で送信します。
curl -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Create a 12-slide lesson deck for grade 7. Unit: Ecosystems. Lesson: Food Webs and Energy Flow. Learning objectives: explain how energy moves between trophic levels; identify producers, consumers and decomposers in a local ecosystem. Key vocabulary to define with one example each: producer, consumer, decomposer, trophic level. Structure: title, objectives, warm-up question, 5 content slides, vocabulary, 3-question quick check, summary.",
"themeId": "'"$EDU_THEME_SECONDARY"'",
"responseLanguage": "Spanish",
"mode": "async"
}'
# -> {"jobId":"..."} その後 GET https://2slides.com/api/v1/jobs/{jobId} をポーリングPythonでの全ループ例:CSVを読み込み、10秒間隔で各行を送信、8秒間隔でジョブをポーリングし、ユニット・学年・言語を含むファイル名でPPTXを保存。異なる学年で同じレッスンタイトルでも上書きしません。
import csv, os, time, requests
API = "https://2slides.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SLIDES_API_KEY']}"}
THEMES = {
"elementary": os.environ["EDU_THEME_ELEMENTARY"],
"secondary": os.environ["EDU_THEME_SECONDARY"],
}
def theme_for(grade: str) -> str:
return THEMES["elementary"] if int(grade) <= 5 else THEMES["secondary"]
def build_prompt(row: dict) -> str:
objectives = "\n".join(f"- {o.strip()}" for o in row["objectives"].split("|"))
vocab = ", ".join(v.strip() for v in row["vocabulary"].split("|"))
return (
f"Create a {row['slide_count']}-slide lesson deck for grade {row['grade']}.\n"
f"Unit: {row['unit']}\nLesson: {row['lesson_title']}\n"
f"Learning objectives:\n{objectives}\n"
f"Key vocabulary to define with one example each: {vocab}\n"
"Structure: title slide, objectives, warm-up question, content slides with one "
"idea each, vocabulary slide, quick check with 3 questions, summary. "
"Use short sentences suitable for the grade level."
)
def submit(row: dict) -> str:
r = requests.post(f"{API}/slides/generate", headers=HEADERS, timeout=60, json={
"userInput": build_prompt(row),
"themeId": theme_for(row["grade"]),
"responseLanguage": row["language"] or "English",
"mode": "async",
})
r.raise_for_status()
return r.json()["jobId"]
def wait(job_id: str) -> dict:
while True:
job = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS, timeout=30).json()
if job["status"] in ("success", "failed"):
return job
time.sleep(8) # 5〜10秒ごとにポーリング。jobsエンドポイントは1分に10リクエスト許可。
with open("curriculum.csv", newline="", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
queued = []
for row in rows:
queued.append((row, submit(row)))
time.sleep(10) # 1分に6回の送信制限を守る
os.makedirs("decks", exist_ok=True)
for row, job_id in queued:
job = wait(job_id)
if job["status"] != "success":
print("FAILED", row["lesson_title"], row["language"], job_id)
continue
pptx = requests.get(job["downloadUrl"], timeout=120).content
name = f"{row['unit']}_G{row['grade']}_{row['lesson_title']}_{row['language']}.pptx"
with open(os.path.join("decks", name.replace(" ", "_")), "wb") as out:
out.write(pptx)
print("saved", name)各デッキが完成したら、job_id、download_url、status = "draft" をシートに書き戻します。

generateエンドポイントは同じテンプレートから編集可能なPPTXを1レッスンごとに生成。
ステップ5:反転授業向けバリエーション:短いナレーション付き動画講義
反転授業では生徒が自宅で見るのは動画なので、パイプラインを切り替えます。Fast PPTはナレーション対応不可。create-pdf-slidesで16:9の画像デザインスライド(2K解像度)、次に単一話者のgenerate-narration、最後に動画書き出しを行います。講義は6〜8スライド、1スライド約45秒のナレーションで5〜6分の動画が目安。
# 1) 画像デザインスライド(デフォルトで非同期)
curl -X POST https://2slides.com/api/v1/slides/create-pdf-slides \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "8-slide mini-lecture for grade 7 on food webs and energy flow. One idea per slide, written to be read aloud in about 45 seconds per slide. Cover: what a food web is, producers, consumers, decomposers, trophic levels, the 10 percent energy rule, one local example, a 2-question check.",
"aspectRatio": "16:9",
"resolution": "2K",
"page": 8,
"contentDetail": "standard",
"responseLanguage": "English",
"mode": "async"
}'
# ポーリングで完了まで待つ(10 + 8×100 = 810クレジット)
# 2) そのジョブに単一音声ナレーションを付ける(8×210 = 1,680クレジット)
curl -X POST https://2slides.com/api/v1/slides/generate-narration \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobId": "STEP_1のJOB_ID",
"mode": "single",
"speakerName": "Teacher",
"voice": "Leda",
"contentMode": "standard",
"includeIntro": true
}'
# 再度ポーリングで完了まで待つ
# 3) ページごとのPNG+WAVを取得(無料)
curl -X POST https://2slides.com/api/v1/slides/download-slides-pages-voices \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jobId": "STEP_1のJOB_ID"}' -o lecture-assets.zipMP4書き出しは2通り:2Slidesワークスペースでジョブを開き、エクスポート→動画生成を使うとブラウザで1920×1080のH.264 MP4を1ページ20クレジットで作成可能。あるいはZIP内のPNGとWAVをFFmpegで結合し、LMSにアップロードする完全自動化も可能です。顔なし教育ショート動画の記事では9:16版の編集例を紹介しています。
ステップ6:ノーコード&エージェントの代替案
MakeでカリキュラムからPowerPoint自動化
カリキュラムチームにPythonを実行できる人がいなければ、同じループはMakeのシナリオ(n8nやZapierも同様)で実装可能:
- トリガー:Google Sheetsの新規・更新行監視、またはLMSからのWebhookトリガー。
- 変換:テキストや変数ステップでStep 3のテンプレートから
userInputを組み立て。 - HTTPリクエスト:
POST https://2slides.com/api/v1/slides/generateにmode: "async"、Authorization: Bearerヘッダーはシナリオのシークレット、responseLanguageは行からマッピング。 - 待機:30〜45秒のDelayまたはSleepステップ。
- HTTPリクエスト:
GET https://2slides.com/api/v1/jobs/{jobId}。statusがsuccessかfailedでなければ待機ループ。 - 配信:PPTXを学年ごとのDriveフォルダにアップロードし、
download_urlとstatus = "draft"を行に書き戻し。 - 制限:1回の実行で1行処理、送信間隔は最低10秒。40行の一括貼り付けでも1分に6リクエスト制限を超えない。
エージェントに任せる
Claude Code、Codex、Cursorで作業する教師はスクリプトもシナリオも不要。2Slides Agent Skillをインストールするか、ホスト済みMCPサーバーを追加(claude mcp add --transport http 2slides "https://2slides.com/api/mcp?apikey=YOUR_KEY")、カリキュラム表を貼り付けて1行ごとにデッキを依頼できます。エージェントは同じthemes_search、slides_generate、jobs_getツールを同じキーとクレジットで呼び出します。Agent Skillsページ参照。

アクセシビリティとレビュー:AIドラフトを教師が承認
生成されたデッキはすべてドラフト扱いにします。status列はdraft→reviewed→approvedと進み、レビュー担当者のイニシャルを記録。approvedになるまで生徒には配布しません。これは機能ではなく運用ポリシーであり、編集可能なPPTXが教室利用でPDFより重要な理由です。
デッキごとのレビュー項目:
- 内容:行の目標がすべて含まれ、基準に合致。事実や日付の捏造なし。クイックチェックの質問はスライドから答えられる。
- 読みやすさ:文の長さや語彙が学年に合う。よくある修正は4年生向けスライドに9年生レベルの文が混入。
- 翻訳デッキ:バイリンガル教師がスペイン語やベトナム語のデッキを独立してレビュー。語彙例は文化的適合も必要。
- アクセシビリティ:画像に代替テキストを追加、テンプレート背景とのテキストコントラストを確認、教室後方から読める文字サイズ、色だけで意味を伝えない。多くの学区がWCAGガイドラインを参照。
- 動画講義:
download-slides-pages-voicesのZIPにはスライドごとにWAVがあり、任意の音声認識ツールで文字起こしし、MP4に字幕を付けるのは数分。
教師のレビューは1デッキあたり約10分、40レッスンなら約7時間。白紙テンプレートから作る時間はゼロ。
学科での費用例
クレジットは従量課金制。5ドルで2,000クレジット(1クレジット0.0025ドル)、80ドルで40,000クレジット(1クレジット0.002ドル)。新規アカウントは500クレジット無料、12スライド4デッキ分のテストに十分。
| ボリューム | パイプライン | クレジット | USD換算 |
|---|---|---|---|
| 40レッスン×12スライド(学科1学期分) | Fast PPT generate | 480ページ×10 = 4,800 | 5ドルパック換算で約12ドル |
| 500レッスン×12スライド(学区またはコースマーケット月間) | Fast PPT generate | 6,000ページ×10 = 60,000 | 80ドルパック換算で約120ドル |
| 40反転講義×8スライド、2K+ナレーション | create-pdf-slides 40×810、generate-narration 40×1,680 | 32,400 + 67,200 = 99,600 | 約199〜249ドル |
| 40講義のMP4書き出し(ワークスペース) | 320ページ×20 | 6,400 | 約13〜16ドル |
時間もコストの一部。1分に6回送信で40レッスンは約7分、500レッスンは約84分で提出完了。各デッキは送信後約30秒で完成。
この用途にFast PPTと画像デザインスライドどちらを使う?
- 教師がPowerPointやGoogleスライドで編集し、大量作成するならFast PPT(
generate):12スライド120クレジット、約30秒で納品。 - デッキが最終的に生徒向け(動画講義、LMS埋め込み)や特定のビジュアルスタイルが必要なら
create-pdf-slides:2Kで10ページ1,010クレジット+ナレーション1ページ210クレジット。 - 学区にブランド化されたスライドがある場合は
create-like-this:公開URLをreferenceImageUrlに渡す。create-pdf-slidesと同じ料金。 - 混用は避けること:ナレーションとMP4書き出しは
create-pdf-slidesとcreate-like-thisのみ対応、Fast PPTは不可。
よくある落とし穴
- 大量貼り付けでHTTP 429エラー:キーは1分に6リクエストまで。送信は1つの送信者で10秒間隔を守る。複数スレッドやシナリオ分岐でキーを共有しない。
- APIキーをスプレッドシートや共有Apps Scriptに入れない:サーバー側か自動化ツールのシークレットストアに保管。教師はデッキのみ受け取り、キーは渡さない。
- Fast PPTジョブにナレーションを付けようとする:ナレーションエンドポイントは拒否。まず
create-pdf-slidesで作り直す。 - 言語コードを渡す:
responseLanguage: "es"は無効で"Spanish"が正しい。言語列を対応言語名で検証する。 create-pdf-slidesはデフォルトでpage: 1:ページ数は明示的に指定(ミニ講義なら8など)かpage: 0でモデルに任せる。1ページだけの講義は初回によくある驚き。- ユニット全体を
userInputに貼り付ける:長い基準文書は焦点の定まらないデッキになる。まず目標、語彙、スライド構成に絞る。
よくある質問
コードを書かずにレッスンスライドをプログラム生成できますか?
はい。Make、n8n、ZapierではSheetsトリガーからHTTPリクエストステップでPOST /api/v1/slides/generateをmode: "async"付きで呼び出し、待機ステップの後にGET /api/v1/jobs/{id}を呼びます。教師は自動化ツールを使わず、2SlidesスキルやMCPサーバーを使ったAIエージェントにカリキュラム表を貼り付けてデッキ作成を依頼することも可能です。どの方法も同じAPIキーとクレジットを使います。
1つのカリキュラムから多言語レッスンスライドを作るには?
レッスン行を言語ごとに複製し、language列に「Spanish」や「Vietnamese」など言語名を入れます。スクリプトはその値をresponseLanguageに渡すため、同じ目標と語彙から英語版とスペイン語版のデッキが1つのテンプレートで生成されます。2Slidesは20以上の出力言語に対応。翻訳デッキはバイリンガル教師が文化的適合も含めてレビューしてください。
2Slides以外にAIでレッスンプランからスライドを作るAPIはありますか?
はい。GammaのAPI(https://developers.gamma.app)は類似の自動化を提供しますが、APIキーはProプランが必要です。2Slidesのキーは無料アカウントでも使えます。SlideSpeakやCanva ConnectもAPIを公開。教育向けに重要な点は編集可能なPPTX出力、リクエストごとの言語指定、スライド単位の料金体系です。
生成するレッスンデッキは何枚スライドが適切ですか?
45〜50分授業なら10〜14枚が標準:タイトル、目標、ウォームアップ、4〜6枚の内容スライド(1アイデアずつ)、語彙スライド、クイックチェック、まとめ。1スライド10クレジットなので12枚なら120クレジット。userInputで枚数を指定し、バッチ全体でサイズ・レビュー時間・コストを予測可能に。
教師は生成されたデッキをPowerPointやGoogleスライドで編集できますか?
はい。Fast PPTのgenerateはデザイン済みテンプレートからネイティブPPTXを返すため、PowerPoint、Keynote、Googleスライドでテキストボックス、図形、画像を編集可能です。このレシピがAPI出力をドラフト扱いにするのはそのためです。教師がファイルを開き、生徒向けに例を調整し、承認版を保存します。create-pdf-slidesはPDFとページ画像のセットでテキスト編集不可です。
次のステップ
これで、カリキュラムのシートレイアウト、プロンプトテンプレート、Pythonループ、レビュー運用ポリシーが揃い、学科全体のレッスンスライドをプログラムで多言語対応で生成できます。
- 2slides.com/api でAPIキーを取得。登録で500クレジット無料、12スライド4デッキ分のテストが可能。
- ハブ記事AIプレゼンAPIのチーム別ユースケースで営業、人事、マーケティングチームの同様の活用例を確認。
- 小さなプロンプト版のvocabulary-deck一括生成レシピや、最初の反転授業動画録画前に読むべき動画講義ガイドもおすすめ。
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free