日本情報科教育学会第22回研究会

ChatGPTを活用したプログラミング実習の試み
喜家村 奨

稲川 孝司

帝塚山学院大学

大阪公立大学

susumu@tezuka-gu.ac.jpc21839@omu.ac.jp

西野 和典

高橋 参吉

太成学院大学

NPO法人 学習開発研究所

k-nishino@tgu.ac.jp

takahasi-san@u-manabi.org

背景• 2022年にChatGPTが公開され、文章の生成だけでなく、プログラムの生成も可能• micro:bitのプログラミング教材に関して、仕様から自動販売機のプログラムを生成、プログラムのリファクタリングなどを試行してみた• 高等学校以下でのプログラミング必修化に伴い、大学でも教養としてプログラミングの授業が増えてきたが、情報を専攻しない学生からは不評⇒
ChatGPTをプログラミングの授業で活用することで、多くの学生が楽しくプログラミングを学習できるのではないか・・・ChatGPTを試用するプログラ
ミングの授業• 対象とする授業は、大学１回生配当科目のプログラ
ミング実習科目（共通教養科目）• 全14回（週2コマうち１コマがメディア授業）• 前半7回： Scratchでプログラミングの基礎を学習• 後半7回： micro:bitを用いた制御プログラミング
うち4回をChatGPTの授業にあてる予定• 教材： micro:bitとロボットカーを用いたライントレー
ス・タイムトライアルレース• 使用する生成AI：ChatGPT（Ver.3.5）の予定• 2024年度から実施予定

ChatGPTを活用する4回の授業計画
回数

授業の概要

1回目

ロボットカーに搭載されたセンサの制御および無線プログラミング

2回目

練習用コースを使った基本となるライントレースプ
ログラムの説明とChatGPTをアシスタントとして活用するための注意点の解説

3回目

ChatGPTをアシスタントとして，ライントレースプ
ログラムを改造

4回目

本番コースでのレース開催，レポート作成，フィードバックなど※micro:bitの基本的なプログラミングはこの授業の前に習得ずみ

レースのルール• マスタmicro:bitから無線で文字列”start”が送信されたらスタート• ラインをトレースしていき、ゴール地点のゴールラインを踏むことでゴール• ただし、ゴールラインの5cm先に障害物が置いてあり、ゴール後、その障害物に当たってしまったら、失格。障害物に当たる前に停止する• ゴールの検知、タイムの測定はマスタmicro:bitでおこない、ゴール後、タイムが表示されるようになっている（マスタmicro:bitのプログラムは先生が作成済）

テストコースでの走行の様子

ChatGPTを活用したプログラ
ム作成の試行実験• ChatGPTにライントレースの基本プログラムをプロンプトとして与え、以下のプログラムの修正を実験的に行ってみた• 実験1：無線で文字列“start”を受け取ってから、スタートするようにプログラムを変更する• 実験2：超音波距離センサで障害物を検知して、障害物に当たる前にストップするようにプログ
ラムを変更する

実験１
無線でのスタートメッセージの受信• ライントレースの基本プログラムを示し、無線でメッセージを受け取ってからスタートするようにプログラムを修正するようにChatGPTに依頼

実験1:入力したプロンプト
学生：
つぎのプログラムはmicro:bitのマイクロマクイーンのライントレースのプログラムです．このプログラムに無線で文字列"start"を受け取ってから動き出す
ようにプログラムを変更してください．

実験1:与えたプログラム
basic.forever(function () {if (maqueen.readPatrol(maqueen.Patrol.PatrolLeft) == 0 &&maqueen.readPatrol(maqueen.Patrol.PatrolRight) == 0) {maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW, 50)} else if (maqueen.readPatrol(maqueen.Patrol.PatrolLeft) == 1 &&maqueen.readPatrol(maqueen.Patrol.PatrolRight) == 0) {maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 50)
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 15)} else if (maqueen.readPatrol(maqueen.Patrol.PatrolLeft) == 0 &&maqueen.readPatrol(maqueen.Patrol.PatrolRight) == 1) {maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 15)maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 50)}})

実験1:ChatGPTからの返答
ChatGPT：
以下は，micro:bitのマイクロマクイーンのライントレースプログラムを，無線で文字列"start"を受け取るときに動き出すように変更したものです．基本的なアイデアは，radio.onDataPacketReceived イベ
ントハンドラを使用して，"start"という文字列が受信されたときに動作を開始するようにします．

実験1:
ChatGPTの生成したプログラム
radio.onDataPacketReceived(({receivedString}) => {if (receivedString == "start") {basic.forever( function() {//：//与えたプログラム//：})}})// ラジオを初期化
radio.setGroup(1)実験Ⅱ
超音波距離センサ値の利用• 超音波距離センサで障害物との距離を測定し、衝突する前にストップするように修正する

実験Ⅱ:入力したプロンプト
学生：
では，次に超音波センサで２センチメートル以下の障害物が見つかったら止まるようにしてください．

実験Ⅱ:ChatGPTからの返答
ChatGPT：
了解しました．以下は，超音波センサを使用して，2センチメートル以下の障害物が検知された場合に停止するようにしたプログラムです．

実験Ⅱ:
ChatGPTの生成したプログラム
let isRunning = false
radio.onDataPacketReceived(({ receivedString }) => {if (receivedString == "start") {isRunning = true}basic.forever(function () {if (isRunning) {})let distance = maqueen.Ultrasonic(PingUnit.Centimeters)// 障害物が2センチメートル以下の場合は停止
if (distance < 2) {isRunning = false

障害物との距離を修正することで問題なく動作した

maqueen.motorStop(maqueen.Motors.All)} else {// ライントレース動作}})プロンプトとしてライントレースの基本プログラムを与えた理由• 学習者が基本的なライントレースプログラムの内容を理解した上で，ChatGPTを活用して欲しい．
• プログラムコードをプロンプトとして入力し，そのコードをChatGPTに改造してもらうという方法を示したい．
• 基本プログラムを与えることで著作権違反となるようなコードが生成されることを抑制したい．
• 学生の中にはChatGPTを利用したことのない学生も存在するため，ある程度，道筋を示し，活用させたい．

プログラミング授業での生成AIの活用について• コーディングに対する学習者の負担の軽減• 必修化に伴う学習意欲の維持の難しさ• ソフトウエア開発における上流工程の重要性

プログラミング授業で生成AIを活用する上でに留意点• （AIの学習データによっては）著作権問題がおこる可能性• 生成されたコードのセキュリティリスク（コードの機密性，生成コード自体の脆弱性など）の可能性• 生成AIはあくまでアシスタント（またはcopilot）であり，自ら全体を理解し，思考し決定する力が大事• 生成AIとの対話において新しい気付きを意識することが大事• AIが生成したコードを含むシステムの動作不全に対する責任問題※自分が作ろうとするプログラムの正しい振る舞い理解し、検証できる力が重要

まとめ• 大学の教養科目のプログラミング実習でChatGPTを活用することを検討• ビジネスアプリケーションだけでなく開発環境にも、生成AIを用いたcopilot機能は導入されていく• 高校の共通教科情報科で、ChatGPTのようなテキスト生成AIをどう活用するかは、検定教科書の内容や大学入試共通テストの指導との関係など、さらなる議論が必要

※本研究は2020度よりJSPS科研費JP20K02528（研究代表
者：喜家村奨，研究課題名：初等・中等教育の接続を考慮したプログラミング的思考を育成する教材及び指導法の開発）の助成を受けている．

参考:仕様を与えてプログラムを生成した例