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

稲川

帝塚山学院大学
susumu@tezuka-gu.ac.jp

西野和典

孝司

大阪公立大学
c21839@omu.ac.jp

高橋参吉

太成学院大学

NPO法人 学習開発研究所

k-nishino@tgu.ac.jp

takahasi-san@u-manabi.org

2022年にOpenAI社が開発したChatGPTが公開され，大きな話題となった.生成AIの登場で，コンピュータを利用したクリエイティブな活動は大きく変わろうとしている.一方，教育環境に生成AIを持ち込むことには，個人・機密情報の流出や著作権侵害などの問題や生成AIに頼りすぎることにより，それが学習者の思考の妨げるのではないかなどの懸念もある.しかし，必修化されたプログラ
ミング学習に，生成AIを有効に活用できれば，そのメリットは大きいと考える．そこで，本稿では，ChatGPTに代表される対話型テキスト生成AIのプログラミング実習への活用について検討する.
キーワード：情報科教育，プログラミング実習，ChatGPT，生成AI，micro:bit

1. はじめに

2. プログラミング授業での課題

学習指導要領が改訂(小，中学校は平成29年告示，高プログラミングが必修化されたことにともないこれ等学校は平成30年告示)され，将来に向けての人材育成

からは大多数の学生がプログラミングを学習することが求められる今日，学習指導要領で示される「プログになる.これは非常に喜ばしいことであるが，反面，今ラミング的思考」，「論理的思考」などを育成するためまで専門教育としてきたプログラミング教育を，あまの教育を行うためには，小学校，中学校，高等学校のりその分野に興味を示さない学習者も学ばなければなそれぞれの校種において，教材開発や効果的な指導法らない状況となった.

が求められている．

大学におけるプログラミングの授業でも，情報を専筆者らは，大きく変わった学習指導要領の内容を中攻しない学生から「プログラミングが難しい」「プログ心に，小学校から中学校への接続，さらに高等学校へラミングが苦手だ」という言葉を耳にすることがある.の接続を考慮したプログラミング的思考および情報のその１つの理由がプログラミングおける言語習得の難

科学的理解を深めるために教材や指導法を検討してきしさにある．とくにテキスト型のプログラミング言語た．また，小学校から高等学校までの接続性，STEAM

では，カッコの形やピリオドの有り無しなど，細かな教育の重要性を念頭に，教育用ワンボードコンピュー

文法を理解しなければ，プログラムが思うように動か(1)

タmicro:bitを用いたプログラミング教材を開発し ，教(2)(3)

ず学生のつまずく１つの要因になっている．本来，プ員研修 を行い，教材は教科書にまとめている ．特に，ログラミングを学ぶ意義は，問題解決のためにいかに状態遷移システムの実装については論文としてまとめコンピュータを活用できるかであり，コーディングス

(4)

た ．

キルの向上を目指したものではない．

2022年11月にOpenAI社によって公開されたChatGPT

そこで，生成AIを活用することによって，このコーに代表される生成AIは，対話による文章の生成や長文ディングに対する苦手意識を払拭できれば今より多くの要約，翻訳などを即座に行うことが可能であり，教の学生達がプログラミングを楽しむことができるので育・研究現場での使用のあり方が問われていはないかと考え，今回のChatGPTの授業での活用を検討る.ChatGPTは文章を生成するだけではなく，プログラすることとした．

ムの自動生成なども可能で，筆者らもmicro:bitのプロ
グラミング教材について，仕様からのプログラム生成やリファクタリングなどを試行してみたが活用性は高いと感じている.

3. ChatGPTを試用するプログラミングの授業
今回，ChatGPTを活用する予定の授業では，大学から学生に付与しているメールアドレスで簡単に利用できるChatGPT（Ver3.5）を活用することとした.

対象とする授業は大学の 1 回生配当のプログラミン
グ実習科目（共通教養科目）で，授業時間数は週 2 コ
マ，うち 1 コマがメディア授業である．授業の概要は前半（７回）で，Scratch を利用してプログラミングの基礎を学習し，後半（７回）で micro:bit を用いたセン
サなどの制御プログラミングを学習する.
後半のうち 4 回分は，4 章で説明する ChatGPT を活用したライントレース・タイムトライアルレースの課
題に割り振る予定である．その授業計画は，表 1 のとおりである．なお，micro:bit の基本的なプログラミン

図1 教材のロボットカーと練習用コース

グについては，この授業まで（3 回分）に習得済みである．
表 1 授業計画

5. ChatGPT を活用したプログラム作成の試行
実験

回数

授業の概要

ここでは，ChatGPT を活用して，4 章で示したレー

1 回目

ロボットカーに搭載されたセンサの制御

スのプログラムを実際に作成した試行実験の結果を示

および無線プログラミングす.

練習用コースを使った基本となるライン

5.1 実験１－無線でのスタートメッセージの受信

2 回目

3 回目

トレースプログラムの説明と ChatGPT を

まず，最初にChatGPTに対してライントレースの基本アシスタントとして活用するための注意プログラムを示し，改造点の1つである無線によ点の解説

る”start”メッセージの受信後，ロボットカーがスタ

ChatGPT をアシスタントとして，ライントートするためのプログラムの修正を要求してみた.

レースプログラムを改造
4 回目

本番コースでのレース開催，レポート作成，フィードバックなど

4. ロボットカーを用いたプログラミング教材

以下に，入力プロプトとChatGPTからの回答メッセージを示す．また，図2，図3に入力したライントレースの基本プログラムとChatGPTの生成プログラムを示す．
学生：

今回は，ワンボードコンピュータ micro:bit とロボッ

つぎのプログラムはmicro:bitのマイクロマクイーンの1トカー（micro:Maqueen Lite ）を用いたライントレース・ライントレースのプログラムです．このプログラムに無タイムトライアルレースを題材とすることとした．こ線で文字列"start"を受け取ってから動き出すようにプのレースのルールは以下の通りである．

ログラムを変更してください．
（プログラムは図2に示す）

・ マスタ(micro:bit)（図 1 の①）から無線(Bluetooth)で文字列”start”が送信されたらロボットカーはスタChatGPT：ートする．

以下は，micro:bitのマイクロマクイーンのライントレ・ ラインをトレースしていき，ゴール地点のゴールースプログラムを，無線で文字列"start"を受け取るとセンサ（図 1 の②）を踏むとゴールとする．

きに動き出すように変更したものです．基本的なアイデ・ ゴールラインの 5cm 先に障害物（図 1 の③）が置

アは，radio.onDataPacketReceived イベントハンドラ

いてあり，ゴール後，その障害物に当たった場合，を使用して，"start"という文字列が受信されたときに失格とする．

動作を開始するようにします．

・ ゴールしたことの検知および，タイム測定はマス（プログラムは図3に示す）

タ micro:bit でおこない，ゴール後，タイムが表示

このプログラムでは，radio.onDataPacketReceived イ

される（マスタのプログラムは教員が作成済）．

ベントハンドラが定義され，"start"が受信されたときに無線通信を開始し，その後は以前のプログラムのようにライントレースの動作が続きます．

1

https://www.dfrobot.com/product-1783.html

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)}})

図2 入力したライントレースの基本プログラム
radio.onDataPacketReceived(({receivedString}) => {if (receivedString == "start") {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)
}
})
}
})

※下線部が ChatGPT が新たに挿入したコード// ラジオを初期化
radio.setGroup(1)

図3 ChatGPTの生成プログラム(1)
図3のChatGPTの生成プログラムをロボットカーののではなく，無線から文字列”stop”を受信するとロmicro:bitにダウンロードし，ホストのmicro:bitから文字ボットカーが停止する改造をまず依頼した.このプロ列”start”を送信すると正常にロボットカーはスタ

ンプトおよびChatGPTが修正したプログラムは割愛すートしライントレースを開始した．生成されたプログ

るが，これも正常に文字列”stop”を受け取ると停止ラムを見ると，ライントレースの基本プログラムのコように改造することができた.

ードを無線の受信イベントハンドラである

5.2 実験２－超音波距離センサ値の利用(radio.onDataPacketReceived)内に記述するようにプログラムが修正されていることが分かる.
次に改造点2つ目のゴール後，障害物に当たる前に停止するプログラムの修正を要求するが，これについては，いきなり赤外線センサからの値をもとに停止する

さらに，超音波距離センサから距離を検知し，ゴール後，障害物に衝突せずに停止するようにプログラムを改造するようにプロンプトを与えた．図 4 に，
ChatGPT の生成したプログラムを示す．図4のChatGPTが生成したプログラムを見ると，無線学生：
では，次に超音波センサで２センチメートル以下の障害の受信イベントハンドラとライントレースの繰り返し物が見つかったら止まるようにしてください．

処理が並列に実行される構造に変更されている.このChatGPT：生成されたプログラムに関しては超音波距離センサの了解しました．以下は，超音波センサを使用して，2セン検知距離の若干の修正が必要ではあったが（条件式チメートル以下の障害物が検知された場合に停止する「distance < 2」を「distance < 5」に修正），構造的ようにしたプログラムです．

な問題はなく正常に動作した.
以上のように，ChatGPTのアシストのもと，基本的なライントレースプログラムから，今回のレースのルー（プログラムは図4に示す）ルに対応する改造を行うことができた．実際の実習でこのプログラムでは，超音波センサからの距離が2センは，このような改造の後，さらにライントレースのアチメートル以下の場合に停止するように追加されていルゴリズムのチューニングを行ってもらう予定である.

ます．maqueen.Ultrasonic(PingUnit.Centimeters)を使

なお，今回は以下の理由から，ライントレースの基用して超音波センサの距離を取得し，それを条件に組み本プログラムをプロンプトとして与え，それを改造す込んでいます．

る手法をとることにした．

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 {// ライントレース動作
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)}}}})// ラジオを初期化
radio.setGroup(1)

図4 ChatGPTの生成プログラム(2)・ 学習者が基本的なライントレースプログラムの内実際の授業環境では手薄になるのが現状である．

容を理解した上で，ChatGPTを活用して欲しい．

ChatGPTをサポート役として利用することで，このよ・ プログラムコードをプロンプトとして入力し，そのコードをChatGPTに改造してもらうという方法を示したい．

うな問題がある程度解決できるのではないか．
(3) ソフトウエア開発における上流工程の重要性
生成AIの登場で，コーディングの重要度は軽減する

・ 基本プログラムを与えることで著作権違反となるように思う.これからは，問題点を明確にし，その解決ようなコードが生成されることを抑制したい．のためにいかにコンピュータを活用するかという上流・ 学生の中にはChatGPTを利用したことのない学生も存在するため，ある程度，道筋を示し，活用させ工程の学習に力を注ぐべきではないか．
また，生成 AI をプログラミング学習に活用するこたい．とには，現状，以下のようなことに留意する必要があ

将来的には，プログラムコードを一切示さないで，る．

プログラムを自動生成する方法が主流になるかも知れないが，現時点では，限定的な活用方法をとることにした.

・ AI の学習データによっては著作権問題が起こる可能性があること．
・ 生成されたコードに関して，セキュリティリスク（コードの機密性，生成コード自体の脆弱性など）

6. プログラミング授業での生成 AI の活用と留意点

・ 生成 AI はあくまでアシスタント（または copilot）

ChatGPT を授業で活用することは，今でも賛否両論であり，自ら全体を理解し，思考し決定する力が重あると思うが，今回は以下の理由からプログラミング実習での試行を踏み切ることとした.
(1) コーディングに対する学習者の負担の軽減が存在する可能性があること．

要性であると学習者が理解すること．
・ 生成 AI との対話において，新しい気付きを意識することが大事であることを学習者が理解すること．

小学校におけるプログラミング学習では，主に・ AI が生成したコードを含むシステムの動作不全にScratch のようなブロック型のビジュアルプログラミ対する責任問題が発生する可能性があること．

ング言語が利用されるが，高等学校の情報の授業では，※これについては，現在もすべてのコードを自分Python などのテキスト型プログラミング言語が利用さで作成するということは少なく，ライブラリなどれることが多い.学習がブロック型プログラミング言

第三者が作成したコードをシステムに組み込む可語からテキスト型プログラミング言語に移行する場合，能性は既に存在する．よって，コードの全てを理解テキスト型言語の文法理解が問題となる.大学の授業して動作を保証することよりテスト駆動開発などにおいてもブロック型プログラミング言語は楽しくプのコードの検証手法を身に付けることが大切であログラミングができたが，テキスト型プログラミングると考える．

言語になると「なぜ動かないか分からない」と悲鳴をこれらを解決するためには，AI に関する社会的な法あげる学生が多く見受けられる．ChatGPT を用いて，整備などとともに，AI リテラシー教育，ソフトウエアプログラムをデバッグしたり，コードの生成自体を任の検証手法などのソフトウエア工学の教育が必要であせることによって，学習者のコーディングにおけるスると思われる．

トレスを大いに軽減できるのではないか．
(2) 必修化に伴う学習意欲の維持の難しさ

7. おわりに高等学校以下のプログラミング必修化にともない大大学においても情報を専攻しない学生がプログラミ学においても共通科目としてプログラミング関連科目ングに関する授業を履修する機会が増えてきている．

を配置し，情報専攻以外の多くの学生がこのような科

本稿では，大学のプログラミング実習授業（共通科目）目を履修する機会が増えた．
エンジニア思考の学生や，での生成 AI の活用について検討した結果を示した．

プログラミングに興味を持っている学生は積極的にプ高等学校の共通教科情報科において，生成 AI をいかログラミング言語を習得しようとするが，プログラミに活用するかについては，検定教科書の内容（基本構ングの授業に対して受け身の学生にとっては，プログ

文，アルゴリズム等）との関係，大学入学共通テスト

ラミング言語の習得はハードルが高い．教員やスチュの指導との関係など，さらなる議論が必要なように思ーデントアシスタントが十分サポートできればよいがうが，高等学校の学習においても，産学連携プロジェ

クトや「総合的な探求の時間」などに身の回りの問題ボットカー（micro:Maqueen Lite）のメーカであるをコンピュータで解決するようなテーマでは，生成 AI

DFROBOT 社 の Wiki 内 の チ ュ ー ト リ ア ル

を活用する価値はあるように思う．

（https://wiki.dfrobot.com/micro_Maqueen_for_micro_bit_S

現在，既にビジネスアプリケーションだけでなく，KU_ROB0148-EN）に記載されていたプログラムであソフトウエア開発環境についても生成AIを利用しる．以下，簡単にそのプログラムで使用されている関た”copilot”機能が実装されてきている．また，各ソフト数等について説明する．

ウエアの機能として実装するのではなく，学習者個人に寄り添ったよりパーソナライズされた生成AIの出ラインセンサの値を取得する関数：

現も予想される．プログラミングが必修化された意義

maqueen.readPatrol(ラインセンサの ID)は，論理的思考やプログラミング的思考を身に付けるためであり，コーディングスキルを身に付けさせるこ

ラインセンサの ID：とではない．ならば生成AIを活用することで，コーデ

maqueen.Patrol.PatrolLeft：左ラインセンサ

ィングに対するストレスを軽減することは，プログラmaqueen.Patrol.PatrolRight：右ラインセンサ

ミング学習において有効ではないか.本稿が生成AIを学習に活用することに対する議論の１つのきっかけに戻り値：

なれば幸いである.

0(黒) or 1（白）謝辞

本研究は2020度よりJSPS科研費JP20K02528（研究代

モータをドライブする関数：
maqueen.motorRun(モータの ID,回転方向,速度)

表者：喜家村奨，研究課題名：初等・中等教育の接続を考慮したプログラミング的思考を育成する教材及びモータの ID：指導法の開発）の助成を受けている．また，常日頃か

maqueen.Motors.All：両方のモータら，本研究に対して，的確で心温まる助言をくださる，maqueen.Motors.M1；左のモータ

NPO法人 学習開発研究所の三輪吉和氏に感謝します．

maqueen.Motors.M2：右のモータ

参考文献

回転方向：

(1) 高橋参吉，喜家村奨，西野和典：「情報の科学」でのmaqueen.Dir.CW：正転「micro:bit」によるプログラミング教育の可能性～小maqueen.Dir.CCW：逆転

学校から高等学校までの一貫したプログラミング教育～，日本情報科教育学会第10回研究会報告書，pp.10-15

速度：（2018）.

整数（0～255）(2) 高橋参吉，喜家村奨，稲川孝司，西野和典：「micro:bit」
プログラミングで学ぶ情報技術の教材開発および教員研修，日本情報科教育学会第11回研究会報告書，pp.25－
30（2018）.
(3) 高橋参吉，喜家村奨，稲川孝司：「micro:bit で学ぶプロ
グラミング ブロック型から JavaScript そして Pythonへ」，コロナ社(2019).
(4) 喜家村奨，西野和典，稲川孝司，高橋参吉：micro:bit を用いた状態遷移システムの教材開発およびプログラムの実装，日本情報科教育学会，日本情報科教育学会誌，vol.15，No1，pp.37-46(2022).

付録
本稿で示したライントレースの基本プログラムはロ

付図 1 ライントレースの基本プログラムの説明