AIがコード添削するアプリを学校の教材用に開発した
2020年以降、小・中・高でプログラミングが必修となった一方で、教えられる先生はまだまだ不足しています。
そんな中、私は講師として小中学校のプログラミング授業のカリキュラム作成〜実際の指導を仕事としています。
今回は、生成AI でコードを訂正してくれるPythonエディタを開発して、教材として授業で使用した話をします。
そもそもの経緯
もともとサイバーセキュリティのコンサルとして東京で仕事していましたが、2022年に地方に移住し、ご縁があって教育委員会から声がかかり、小〜中学校でプログラミングを教えています。
学校でプログラミングを教える時、大きく2つの課題があります。
- プログラミングの環境構築をどうする?
- 英語のエラー文をどう確認 & 修正させる?
現状、この課題を同時に解決しうるのが、AIが構文を自動で添削してくれるwebエディタを開発することだったのです。
プログラミングの環境構築が不十分
学校によって生徒に配布されるタブレットがまちまちのため(iPad, Fujitsu, chromebook)共通して使用できるwebエディタを採用することになり、初年度はpaiza.IOを採用しました。

しかし、paiza.ioは入力と出力がインタラクティブに機能しません。
例えば、for文でくり返す回数を指定して、そのスコープ内にinput()を組み込んでも、決めた回数分だけ予め入力する必要があるのです。



例えば4択クイズのプログラムを書いた場合、挑戦者は問題文も分からないのに答えの入力を強いられるため、プログラムとして破綻してしまいます。
この問題を克服できるのが、Python Playgroundというwebエディタで、アカウント登録せずに入力と出力の流れを充実に進めてくれます。

以下の通り、input()の行に到達するとプログラムを一旦止めて、入力を確認してから後のプログラムに進んでくれます。


このwebエディタのおかげで課題1は解決しましたが、今度は別の課題が見えてきます。生徒が書いたコードをどうやってレビューするか問題です。
エラー文が英語で読めない
1クラス20人程度の生徒がいるとして、さまざまな習熟度の生徒がいます。
Scratchをやり込んでプログラミングの感度が高い生徒もいれば、タイピングもままならない生徒もいます。
1コマ50分でカリキュラムを進めながら、生徒一人一人のコードエラーを修正するのは非常に困難です。
加えて、エラー文は英語で書かれているため、とくに中学1年生などは英文が読めずにギブアップする傾向があります。
そんな中、生徒がどんなエラーに時間を取られているのかを検証した結果、ほぼ構文のニアミスであることが分かりました。以下3つが代表例です。
- 半角と全角の区別がつかない
- 閉じ括弧(クオテーション)がない
- 宣言した変数のスペルを間違えてる
以上のように、プログラミング教育の趣旨とは別のところで時間を消費してしまっているのです。


手っ取り早い解決策は日本語でエラー文を解説してくれることですが、私が知る限り、そういったwebエディタはありません。
エラー内容を日本語で解説してくれて、なんならリアルタイムでコードを添削してくれるツールがあれば、生徒はアルゴリズムに集中できて、教える側も授業の進行にリソースを割ける訳です。
解決策としてBase44で「Python先生」開発
Base44は、生成AIを活用してアプリを開発できるwebアプリです。
このアプリを使用して自動でコードをレビュー、添削してくれるwebエディタ「Python先生」を開発しました。

ユーザーは、AIとチャットしながら作りたいアプリを開発していくのですが、このアプリのアドバンテージは、なんといってもかなり漠然としたリクエストを投げても良い感じに仕上げてくれるところです。

チャットで使用するAIモデルは、Gemini, Claude, ChatGPT から選択でき、VScodeとGeminiを繋げて開発をしていた経験からGeminiを使用しました。
Pythonコードが実行できるwebエディタを開発してください。ターゲットは中学生です。5秒間コードが書かれなかったらコードをレビューして、エラーになる箇所があったら指摘する機能を追加してください。
AIに投げたプロンプトの例
以上のようなリクエストを投げたら、7割くらいの満足度で作成してくれて、あとは微調整すれば実際に使用できる、というレベルまで仕上がります。

このwebエディタの最大のアドバンテージは、構文の間違いを自動で検出して修正を提案してくれるところです。

実際に学校で使用してみた感想
プログラミング教育の趣旨に集中できる点においては満足です。
授業では文法というよりプログラムの3大アルゴリズム(順次、判断、くり返し)の理解を第一に据えているので、そこにフォーカスする時間が増えたというのは素直に評価できます。
また、副産物として生成AIは空気を読んで、生徒が書いたコードをノートとして保存、再利用できる機能も付けてくれました。

月1回しか授業がない学校では、この機能は救世主として機能しており「前に保存したコードの3行目を使って」みたいなノリで、いちいち説明する時間を短縮できますし、生徒も「そう言えばこんなコード書いたな」で早く思い出してくれます。
改善ポイント
一方で、アプリの精度は今ひとつなので、引き続き開発が必要です。
キャッシュクリアしたらノートがリセットされる
Python先生はログイン機能がないため、ブラウザのキャッシュが切れるとノートがリセットされます。
現状、敢えてログイン機能を実装していないのですが、ともかく生徒にはノートに保存させるコードは2~3行程度にして、もしキャッシュがクリアになってもすぐに書き直せるようにしています。
くり返し回数を正しく認識できない
Python先生は、input()の行に到達した際にプログラムを一旦止める仕様になっておらず、for文のくり返しの回数を予め数えて、その回数分だけ入力欄を表示します。
そのため、何かの拍子にくり返す回数を誤認識して、プログラムが正常に動かない場合があります。(AIチャットで指摘しても何故か修正してくれない)
目下のところ、上手く機能するコードのみ授業で取り扱って、どうしても正常に動かない場合はPython Playgroundでコードを書くようにしています。
まとめ
以上、私が生成AIでPythonコードをAIが添削してくれるアプリを開発して、それをプログラミングの授業で使ってみた話でした。
技術者の立場として、近年の生成AIの進歩は純粋にすごいと思いますし、あと数年もすれば、アイデアがあれば誰でも簡単にアプリを開発できる時代が到来すると思います。
とはいえ、やはりエラーの修正など、細かいところはエンジニアとしての知識が役に立ちますし、道徳的な点において、機械ではなく敢えて人間に任せることもあるでしょう。
生徒たちには、AIに限らず新しい技術が登場した際に、もう人間は必要ない、プログラミングなんて学ぶ必要があるのか?と考えるのではなく、人間がやらないといけない場面は必ずあるということ、そしてそれがどの場面なのか正しく分析する方法を学んでほしいと考えながら授業を行っています。
