OpenMAICを手元で動かす——テーマを一行書くと、AI教師の教室が建つ
清華大学のMAICチームが公開したOpenMAICを、実際にMacで立ち上げた記録です。必要なNode.jsのバージョン、起動までの手順、ライセンスがAGPLからMITに変わっている点、開発サーバーが落ちるときの対処まで整理します。
清華大学のMAICチームが公開したOpenMAICを、実際にMacで立ち上げた記録です。必要なNode.jsのバージョン、起動までの手順、ライセンスがAGPLからMITに変わっている点、開発サーバーが落ちるときの対処まで整理します。
📑 目次
ふむふむ。AIに何かを教えてもらうとき、私たちはたいてい「一対一の問答」をしています。チャット欄に質問を書いて、答えが返ってくる。それで足りることも多いんですよね。
でも、ちょっと待って。これって教室でしょうか。教室には、先生の説明の途中で誰かが手を挙げて、隣の人が違うことを言い出して、黒板に図が描かれていく、あのざわざわがあります。AIの学習支援は、そのざわざわをずっと削ってきた気がします。効率よく教えるほど、教室は静かになっていく。
今週のGitHub Trendingを見ていて、そのざわざわを丸ごと生成しようとしているプロジェクトが伸びていました。OpenMAIC(オープン・マルチエージェント・インタラクティブ・クラスルーム)です。テーマを一行書くか、PDFを放り込むと、スライド・クイズ・触って動かせる教材・プロジェクト学習まで含んだ「教室」が組み上がります。
ここが面白いところで、単に教材を作るツールではないんですね。AIの先生と、AIのクラスメートがいるんです。だから今日は、これを実際に自分のMacで立ち上げて、どこまで動くのか確かめてみました。
まず、何が動いているのか
OpenMAICは、清華大学のMAICチーム(THU-MAIC)が開発・公開しているオープンソースのプロジェクトです。TypeScriptで書かれていて、Webアプリとして動きます。研究としては「From MOOC to MAIC」という論文にまとまっていて、大規模公開オンライン講座(MOOC)の次の形を模索する内容になっています。
仕組みの芯は、教室を二段階で組み立てることにあります。
- まず、テーマからアウトライン(授業の骨組み)を作ります
- 次に、骨組みの各コマをシーンとして肉付けします。スライド、説明、クイズ、対話、ときには動くシミュレーションまで
さらに各シーンには、エージェントの人物設定が与えられます。教える側のAI教師だけではなく、質問する側のAIクラスメートが複数いて、「考え込む人」「メモを取る人」「脱線する人」のように振る舞いが分かれています。チカちゃんとしては、ここに一番惹かれました。学習の質は、内容の正しさだけでは決まらないんですよね。誰かが隣でつまずいているから、自分も考える。あの力のことを、この設計は真似しようとしています。
生成の裏側は、LangGraphベースの進行役(director graph)が各段階を順に呼び出しています。この「一気に生成しない」構造が、後で書くコストの話にも効いてきます。
手元で動かす——実際にやった手順
ここからが本題です。チカちゃんが実際に踏んだ順番で書いていきます。
前提:最初の罠はNode.jsのバージョン
公式ドキュメントには「Node.js 20 or later」と書かれています。ところが、リポジトリの package.json を開くと "node": ">=22.19.0" になっているんです。ドキュメントと実物が食い違っているので、22.19.0以上を前提にしたほうが安全です。
チカちゃんの環境は Node.js 26.4.0、pnpm 10.33.2 でした。pnpmが入っていない場合は、次のどちらかで用意します。
corepack enable
# または
npm install --global pnpm
1. 持ってきて、入れる
git clone https://github.com/THU-MAIC/OpenMAIC.git
cd OpenMAIC
pnpm install
pnpm install は依存を取るだけでなく、同梱のワークスペースパッケージ(数式のOffice変換、PPTX生成、教室DSL、レンダラー、エディタなど)をまとめてビルドします。ここで中断すると、後からPPTX出力が静かに失敗します。最後まで見届けてください。
チカちゃんの環境では1分6秒で終わりました。ただし、締めに警告が並びます。
Ignored build scripts: ...
pnpm 10 は依存パッケージのビルドスクリプトを既定で実行しないからです。必要になったものだけ pnpm approve-builds で選んで許可します。最初から全部許可する必要はありません。
2. 鍵をひとつだけ置く
cp .env.example .env.local
.env.local には、最低ひとつのLLMプロバイダの鍵を書けば動きます。
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY や GEMINI_API_KEY でも構いません。鍵を使いたくない場合は、ローカルのOllamaも選べます。
OLLAMA_BASE_URL=http://localhost:11434/v1
ここに小さな注意があります。localhostへの接続はSSRF対策でブロックされるため、OllamaのURLはサーバー側の環境変数として設定します。ブラウザから渡そうとしても通りません。
音声合成(TTS)・音声認識(ASR)・画像生成は任意です。最初は音声なしでも教室は建ちます。足りない機能はあとから足せます。
3. 起動する
pnpm dev
ブラウザで http://localhost:3000 を開きます。手元では Next.js 16.2.11 が「Ready in 273ms」で立ち上がり、HTTP 200が返ってきました。ここまで、つまずいた箇所はひとつもありません。
4. テーマを入れて、生成する
トップ画面にテーマを書くか、PDFやスライドなどの教材ファイルを足して Generate を押します。進捗は逐次配信されるので、教室が組み上がっていく途中が見えます。
裏側で何が起きているかは、APIの並びを見ると分かりやすいです。
| 段階 | 役割 |
|---|---|
scene-outlines-stream | アウトラインを逐次生成する |
scene-content | 各コマの中身を作る |
scene-actions | そのコマで起きる動作をつける |
agent-profiles | AI教師・クラスメートの人物設定を作る |
tts / image / video | 音声・画像・動画を用意する |
generate-classroom | 全体を仕事として進行・管理する |
つまり、教室1本に対して何度もモデルを呼んでいます。この構造を覚えておくと、次の節が素直に読めます。
5. 配るときはアクセスコードを
ACCESS_CODE=your-secret-code
これを設定すると、アクセス時にパスワードを求められます。誰かに見せる、教室で配る、という場面では必ず入れておきましょう。
6. 本番として動かすなら
pnpm build
pnpm start
DockerやVercel向けの手順も公式に用意されています。開発モードのまま公開するのは避けたいところです。
ハマりどころと、気にしておきたいこと
大きな教材で、開発サーバーが落ちる
長い章立てを生成していると、Jest worker encountered 2 child process exceptions のようなエラーで開発サーバーごと落ちることがあります。これはOpenMAICの実行時バグではなく、開発モード特有のNext.jsの制約によるものです。メモリを渡してあげると収まります。
NODE_OPTIONS=--max-old-space-size=4096 pnpm dev
本番ビルドでは起きません。開発中だけの呪文だと思ってください。
ライセンスは、解説記事と食い違っています
ここは強調しておきたいところです。ネット上には「OpenMAICはAGPL-3.0だから、SaaSとして使うとコピーレフトが波及する」という解説が今も出回っています。
でも、リポジトリの LICENSE を開くとMITなんです。v0.3.0(2026年6月29日)でAGPL-3.0からMITに変更されています。商用利用の制約は基本的にかかりません。古い解説を読んで導入をためらっていた人がいたら、それはもう理由になっていません。
ただし、例外があります。同梱パッケージの packages/mathml2omml は LGPL-3.0-or-later のままです。「リポジトリ全体がMIT」とひとまとめにしないほうがよさそうです。数式のOffice変換を組み込む場合は、そこだけ確認してください。
教室データの置き場所
生成した教室は、標準ではブラウザ側(IndexedDB)に置かれます。ブラウザのデータを消せば消えます。だからこそ、教室ZIPのエクスポートが事実上のバックアップになります。作り込んだ教室ほど、先に書き出しておきましょう。
v1.0.0以降はサーバー保存(PostgreSQL)も選べますが、DATABASE_URL の用意が要ります。個人で試すだけなら、最初からそこまで揃える必要はありません。
コストは、無料ではありません
教室1本を作るのに、アウトライン、シーンごとの本文、動作、人物設定、採点と何度もモデルを呼びます。「ボタンひとつ」に見えるぶん、請求を見て驚きやすい設計です。
チカちゃん的には、最初は短いテーマで、シーン数を少なくして試すのがおすすめです。持ち込みのPDFも、最初は数ページのものから。ローカルのOllamaやLemonadeを使えば鍵の消費は抑えられますが、そのぶん遅く、重くなります。
日本語UIは、公式に入っています
READMEの古い版や、それを引用した解説記事には「7言語」と書かれています。でも今のコード上は12ロケールです。日本語(ja-JP)も正式に入っていて、画面の言語切り替えから選べます。教室の中身も日本語になりやすいです(v0.1.1で言語の自動判定が入りました)。
ひとつだけ補足すると、切り替えの選択肢はブラウザ側で描画されるため、サーバーが返すHTMLを覗いても見えません。「HTMLに日本語がないから未対応」と早合点しないようにしてください。
で、これは何が新しいのか
ここで一回、立ち止まって考えてみます。
オンライン教育の難しさは、昔から「規模」と「適応」のトレードオフでした。録画講義は何万人にも届きますが、誰にも合わせてくれません。個別指導は合わせてくれますが、一人の先生が受け持てる人数には限りがあります。MOOCが長年抱えてきた宿題です。
OpenMAICが投げている答えは、一人の学習者に対して、複数のエージェントが同時にいるというものです。先生役がいて、クラスメート役が複数いて、その場の理解度に応じて説明が変わる。使う側から見れば、適応の側を自動化しようとしているわけですね。
面白いのは、その適応を「教材の出し分け」ではなく「他者の存在」で作ろうとしている点です。AIクラスメートが的外れな質問をすると、人間の学習者は「いや、そこは違うでしょ」と考えます。この引っかかりが理解を助ける。実際の教室で隣の人の間違いに助けられた経験、ありませんか。チカちゃんは、講義中に隣の人が質問したせいで自分も分かった、というパターンが好きです。あれは内容ではなく、関係が教えている。
だからこれは、教材生成ツールというより、教室という状況そのものを生成しようとしているプロジェクトに見えます。ここが、他のAI教材ツールと一線を画すところです。
反対側から見ると
もちろん、手放しには喜べません。
第一に、AI教師が間違える可能性は消えません。しかも教室の形をしているぶん、間違いはスライド、音声、クイズ、AIクラスメートの台詞として多重に増幅されます。単なるチャットの誤答より、訂正が面倒になりえます。
第二に、AIクラスメートの「他者性」は、どこまで本物でしょうか。結局は同じモデルが別の人格を演じているだけです。反論のために反論する役が、本当に読者の思考を揺さぶるのか。反対仮説として、これは孤独の増幅装置になりうるという見方があります。人間の学び仲間の代わりにはならない、と。
第三に、研究としての位置づけです。論文では、清華大学での予備実験として、500人を超える学生の10万件を超える学習記録をもとに検証しています。これは実運用に近い貴重なデータですが、万能の証明ではありません。論文自身が preliminary と断っている検証を、「効果が実証された」と読み替えないほうが誠実です。
そして第四に、教育の効率化という言葉自体が慎重に扱われるべき話題です。教える側の人間が減る方向にこの技術が使われたら、それはチカちゃんの望む姿ではないな、と思います。
どんな人に向いている?
- 教材づくりに時間を溶かしている人:テーマから骨組みを作る手間を短縮したい
- 自分の教材をAIに読ませて授業にしたい人:PDFやスライドを持ち込みたい
- エージェント設計に興味がある人:複数エージェントの分業と進行の作り方を見たい
- 教育をテーマに研究・実験している人:教室という単位を触って試したい
逆に、流暢な日本語の音声講義をすぐ得たい、無料で大量に量産したい、という用途には向きません。生成には鍵が要りますし、校正は人間の仕事として残ります。
まとめ——一行から、教室を開くまで
OpenMAICは、AIに「教えてもらう」を一対一の問答から教室のざわざわへ引き戻そうとしているプロジェクトです。
git clone https://github.com/THU-MAIC/OpenMAIC.git
cd OpenMAIC
pnpm install
pnpm dev
この4行と、.env.local に書いた鍵ひとつで、http://localhost:3000 に教室を開けます。Node.jsは22.19.0以上、pnpm approve-builds の警告は慌てない、大きい教材を扱うときはメモリを渡す。この3点だけ覚えておけば、最初の壁は越えられるはずです。
そして、ライセンスはMITに変わっています。古い解説を信じて遠巻きにしていた人には、それが今日いちばんの知らせかもしれません。
最後に問いをひとつ。教室の本質は、カリキュラムでしょうか。それとも、同じ時間に同じ場所に他の誰かがいることでしょうか。OpenMAICは後者に賭けているように見えます。そして、その賭けが正しいかどうかを決めるのは、生成された教室の中身ではなく、あなたがその教室に何を期待するか、なのかもしれません。
参考URL
- GitHub Trending(週次) → https://github.com/trending?since=weekly
- OpenMAIC リポジトリ → https://github.com/THU-MAIC/OpenMAIC
- OpenMAIC 公式ドキュメント(はじめかた) → https://open.maic.chat/docs/getting-started
- OpenMAIC 公式ドキュメント(設定) → https://open.maic.chat/docs/configuration
- From MOOC to MAIC: Reimagine Online Teaching and Learning Through LLM-Driven Agents → Journal of Computer Science and Technology, 2026, 41(1): 394-414
本記事は公開情報と手元での実行結果をもとにした個別の技術メモです。OpenMAICは活発に開発が進んでいるオープンソースで、バージョン、環境変数、Node.jsの要件、ライセンス表記は変更される可能性があります。導入前には必ず公式リポジトリの
README.md、LICENSE、.env.exampleを確認してください。APIキーは記事やシェル履歴に直接書かず、ローカルでの保存方法と保護範囲も確認してください。ライセンスはv0.3.0でMITに変更されましたが、同梱パッケージの一部(packages/mathml2ommlなど)は別のライセンスが適用されます。研究の記述は原論文の表記にもとづいており、製品の性能を保証するものではありません。
思索は冒険です。今日の話も、その入口のひとつでした。
- インターネット上のツールは第三者が提供するものです。開発工程や配布経路を悪用した攻撃(サプライチェーン攻撃)が仕掛けられる可能性もゼロではありません。ご利用の際は公式リポジトリの情報をご確認いただき、自己責任でお使いください。
- AIに関する技術や情報は急速に変化します。本記事の内容が公開後に古くなる可能性があります。各サービスの公式ドキュメントや最新情報をご確認ください。