AI解説
情報源:arXiv 全文(PDF・11頁)を精読。著者:Christophe Casseau, Jean-Rémy Falleri, Thomas Degueule, Xavier Blanc(Univ. Bordeaux, LaBRI)。実装・実験データは Zenodo アーティファクト(10.5281/zenodo.8167588)。 本ノートは SLR(Siddik 2025) の §5.2.2 Computational Environments in Notebooks で挙げられた論文の1本。
一言で
教師が「ノートブックをどの順で触ってほしいか(=シナリオ)」をスクリプトで形式化し、それを解釈して学生に実時間で色(緑/橙/赤)+絵文字の視覚ガイドを出す JupyterLab プラグイン。狙いは、ノートブックの自由なセル実行順がもたらす「学生が意図しない順で実行して壊す/迷子になる」問題を、探索の自由を残したまま抑えること。21名の無作為化比較実験で、MOON 群は不正な実行(赤セル実行)が激減し、かつ進捗は阻害されないことを示した。
背景・問題(problem)
教育現場で Jupyter ノートブックが普及している(採点課題・対話的教科書・演習シート・ライブコーディング)。テキスト・コード・画像・動画を1つの対話的文書にまとめられるのが利点。しかし問題は次にある。
- ノートブックのセルは任意の順で読める・実行できるため、非決定的な挙動を生む。学生が教師の意図した順で実行しないと、未定義の変数・関数を参照したりしてエラーや誤った結果に直面し、学習の妨げになる。
- 教師は通常これを文章の指示で補おうとするが、デジタル媒体は紙より読解効率・指示遵守が落ちることが知られており、結果としてノートブックの誤用と迷子が頻発する。
論文が挙げる典型例:画像処理の演習で、学生がセル C1 C3 C5 C7 を順に実行したあと C3 で画像を差し替えたのに、寸法を再計算する C5 を「ただの表示」と思って飛ばし C7 を実行 → 古い画像の幅・高さで黒画素率を計算してしまい誤りに気づけない。さらに学生は任意の場所にセルを挿入・削除・改変できるため、気づかぬうちにノートブックの一貫性を壊す。
課題(task / やること)
教師に (1) シナリオをスクリプトとして書ける言語 を与え、(2) そのスクリプトを解釈して、次に実行すべきセルや各セルの過去/未来の実行状態を視覚表示で学生に提示すること。
シナリオ → スクリプト(DFAベースの言語)
著者はまず GitHub/Kaggle 上の教育ノートブック約100本を非形式的に分析し、セル実行に 3パターン(線形・非線形・任意)があれば十分と判断。基本単位は「コードセル Ci +それに紐づく説明テキストセル群 Tj」で Ci~Tj~...~Tn と書く(以降テキストセルは省略)。3つの演算子で実行順を表す:
- 線形
( ):括弧内を上から順に実行。例(C1 C3 C5 C7 C3 C5 C7)(同じセルを2回踏む指定も可)。 - 非線形
[ ]:角括弧内は任意順。例[Ci Cj]はCi→CjでもCj→Ciでも可。 - 任意
?:?C10のように、実行してもしなくてもよいセル。
これらは入れ子で合成でき、ノート全体を1式で表せる。例(最初のパート→残り2パートは任意順):((C1 C3 C5 C7 C3 C5 C7 ?C10)[(C12 C14)(C16 C18)])。

Figure 1a:教師のシナリオを体現した教育ノートブック。各セルはコードセル Ci/テキストセル Tj と位置で識別される。
学生への支援:3色+次セルボタン
スクリプトを MOON に渡すと、学生の操作に応じて各セルを色分けする:
- 緑=今実行してよいセル(次のタスク)
- 橙=すでに実行済みのセル
- 赤=まだ実行すべきでないセル
関連するテキストセルも一緒に強調され、指示と対象セルが結びつく。任意セル C10 は、無視すれば次ステップで赤に、実行すれば橙になる。赤セルを実行しても色は変わらない(=シナリオは進まない)。緑セルを実行することだけが進行手段。さらに、最後に実行したセルに次に実行可能なセルへ飛ぶボタンを付け、画面外でもスクロール無しで移動できるようにする。

Figure 1b:学生がセルを C1 C3 C5 C7 C3 C5 C7 の順で実行した後の状態。実行済みが橙、次に可能な C10(任意)・パートA(C12)・パートB(C16)が緑、まだ早いセルが赤。
探索の自由との両立
MOON は教師のシナリオを強制するぶん柔軟性を下げるが、探索を殺さない工夫を持つ:
- 自動バックトラッキング:学生が橙セル(過去に実行したセル)を再実行すると、MOON はスクリプト上「そのセルを最後に実行した時点」へDFAを戻し、全セルの色を貼り直す。ただしメモリ状態は戻さない(色=シナリオ進行の管理のみ。実体の整合は学生の責任)。上の画像差し替え例では、橙の
C3を実行し直すとC5が再び緑になり、C5→C7と踏めば正しい黒画素率が得られる。 - back ボタン:ユーザトレースを1つ戻し、DFAを直前状態に戻す(自動バックトラッキングで戻れないケースを補う)。
- セルの追加・削除:探索/メモ用に新規セルを足せる(白で表示してシナリオ外と区別、必要ならスクリプト内のセル番号を調整)。ただしシナリオに属するセルはスクリプト読み込み後は削除不可。
実装
MOON は JupyterLab プラグイン。スクリプトは(非線形パターンを除き)正規表現とみなせる。非線形は取り得る線形パターンを全展開し、Hopcroft らのアルゴリズム([29])で決定性有限オートマトン(DFA)を生成する(任意順セルが多すぎると指数爆発するため上限がある)。スクリプトの構文解析(AST)には TypeScript 向け PEG パーサ生成器 tsPEG を使う。DFA に加えて、有効な遷移列だけを記録するユーザトレース((Ci, qj) の列)を保持する(無効遷移は記録しない)。セル実行時、その実行が現在状態の許す遷移なら状態と色を更新する。

Figure 2:スクリプト (C7 ?C10 [(C12 C14)(C16 C18)]) から得られるオートマトン。状態 q0…q9 と、各コードセル実行に対応する遷移。
評価:無作為化比較実験(21名)
ボルドー大の1年生21名・グラフ理論の演習(2h40)で A/B比較。11名が対照群(MOONなし)、10名が実験群(MOONあり、事前に20分の操作説明)。両群とも JupyterLab を計装し、全セル実行のログトレースをノートのメタデータに記録した(ユーザトレースと違い、シナリオ非準拠の実行も記録し、バックトラック時も改変しない)。研究設問は:
- RQ1:MOON はシナリオ遵守を助けるか? 指標 fitness =
(g + o) / (g + o + r)(g/o/r=緑/橙/赤セル実行数。1なら赤を一度も踏んでいない)。 - RQ2:MOON は進捗を阻害するか? 指標 completeness(実行した相異なるセル数、最大20)と correctness(採点、仏式0–20)。

Figure 3a:fitness の分布。

Figure 3b:completeness の分布。

Figure 3c:correctness(採点)の分布。
結果:
- RQ1:実験群の fitness はほぼ1(3名は完全に1)、対照群は約0.25〜0.8。Mann-Whitney U 検定で
p = 0.000122、効果量rbc = -1(対照群の最大0.8 < 実験群の最小0.91 と完全分離)。→ MOON は誤用を明確に減らす。 - RQ2:completeness は
p = 0.53、correctness はp = 0.29で有意差なし(帰無仮説を棄却できない)。むしろ実験群の方が中央値で4点、平均で 14.3 vs 12.4 とわずかに高い。→ MOON は進捗を妨げない(むしろ微増)。
ユーザ調査(16回答, 回答率80%):「セル実行順の遵守に役立つか」に最多が Always、Never はゼロ。「MOON の提案は意外か」は最多が Never。「MOON をデフォルト有効にすべきか」は Rather useful 8・Very useful 4・Indifferent 4・Bad idea 0。約75%が「やや有用〜とても有用」と回答。一部の学生は「バックトラック時に未改変の中間セルまで再実行させられるのが手間」と指摘。
位置づけ・関連
- 教育用ノートブックのツールは多い(自動採点 nbgrader 等、再現性、ストーリーテリングUI)が、教師が自分のシナリオをノート内に埋め込み、読解と実行を学生支援する観点のものは無かった、というのが MOON の主張。
- 動機(セルの自由実行順が壊す問題)は Fork It や「ノートブックの乱雑さ管理」系のHCI研究と地続き。Fork It が並行状態の探索を支援するのに対し、MOON は教師の意図した単一シナリオへの遵守を色で誘導する、と方向が異なる。
- 既知の弱点:JupyterLab のカーネル再起動はメモリを消すが MOON の状態は残るため、整合が崩れうる(実験では「再起動時は MOON もリセットせよ」と口頭指示で回避)。色依存のため色覚多様性に対し絵文字を併用。