JSiSE Research Report
vol.38,no.2(2023-7)

Scratch ブロックの多様な組み合わせを考慮したプログラム自動採点方法の開発
畠中 明哉*1, 広瀬 啓雄*1，尾崎 剛*1*1 公立諏訪東京理科大学大学院

Development of an Automated Grading Method for Scratch
Programs Considering Diverse Combinations of Blocks
Akiya HATANAKA*1, Hiroo HIROSE*1, Takeshi OZAKI*1*1 Suwa University of Science
This study developed an automated grading system for Scratch programs. The system extracts therequired information from the solution programs, compares them with the model answers todetermine correctness, and displays the results. By validating the constrained problems withmultiple expected answers, it was confirmed that accurate grading is possible.
キーワード: プログラミング教育，ビジュアルプログラミング，Scratch，初等教育
Scratch などのビジュアル型プログラミング言語を

1. はじめに用いたプログラムを対象に，学習者が作成したプログ
日本では，IT 人材不足の解消を目的に，2020 年度から小学校でのプログラミング教育が導入された．文部科学省が公開している「小学校プログラミング教育の手引(第三版)1」では，「プログラミング的思考」の育成や各教科等での学びをより確実なものにすることなどがねらいとして挙げられている．小学校のプログラミ
ング教育は，多様な教科等に取り入れることが可能であり，そのためには児童がプログラミングに必要な知識・スキルを身につけるための学習活動を行う必要がラムに対して自動で分析や評価を行う研究は既に行われている．太田ら 2 は，小学校におけるプログラミン
グ教育での教師や児童の利用を想定しており，児童が自由に作成したプログラムに対して，分析や評価を行うための基準を新たに提案し，その基準に基づいてプログラムの評価を行う学習支援システムを開発した．
このシステムはプログラムの評価を行うものであり，特定の課題に対して児童が解いた問題の自動採点を行うシステムではない．

ある．しかし，その学習活動を各教科等に組み込んでしまうとプログラミング教育の本来の目的が達成されない可能性がある．そのため，教員が授業時間をやりくりしてプログラミングを学ぶ時間を確保しているが，十分な時間を確保することができない可能性がある．
そこで，児童が短時間で効率的な学習を可能にし，どの程度プログラミング的思考やプログラミングに関す

著者らは，プログラムの効率的な学習用教材として児童が数分程度取り組める Scratch ドリルの開発を目指している．これまで，プログラミングを学ぶ課題に対して，作成されたプログラムを正しく採点する正誤判定方法の提案と検証を行ってきた 3．しかし，正しく判定を行うことができなかったブロックの組み合わせが存在したため採点方法の再検討が必要であった．

る知識・スキルを習得したか確認するための方法を明らかにする必要がある．

これらをうけて本研究は，学習者が問題に対して作成したプログラムを正しく判定できる正誤判定システ－32－

ムの構築を目的に行った．に表示される．

2. プログラム自動採点システム
2.1 Scratch
現在，小学校では Scratch などのビジュアル型プログラミング言語を使った学習指導が展開されている．
Scratch は，米国のマサチューセッツ工科大学メデ
ィアラボと Scratch 財団が共同開発したビジュアル型プログラミング言語である．ブロックタイプのコマンドを組み合わせることでプログラムを作成することが

図 1 自動採点の流れできる．Scratch 開発環境の画面は大きく 3 つに分けられている．画面左はブロックパレット，画面中央にスクリプトエリア，画面右がステージ及びスプライト情報が表示されている．ブロックパレットには，動き・見た目・音・イベント・制御・調べる・変数・ブロック定数の 8 種類に分けられたブロックがある．これらのブロックをスクリプトエリアにドラッグ＆ドロップし，組み合わせることでプログラムを作成する．プログラムの実行結果がステージ及びスプライトに表示される．
さらに，Scratch にはプログラムを拡張できるものと し て 拡 張 機 能 が あ る ． 2019 年 に 公 開 さ れ た
Scratch3.0 では，micro:bit や翻訳，音声合成などの2.3 採点機能の構築
Scratch のソースコードは，GitHub 上で公開されている．公開されているソースコードのうち，scratchgui と scratch-vm をダウンロードし，拡張機能の構築に関係のあるファイルを編集することで，拡張機能を自作することができる．本研究では，公式の Japanese
Scratch-Wiki5 の拡張機能の作り方を参考に，新たな拡張機能として，正誤判定を行うオリジナルブロックを作成していく．また，Scratch の開発言語は JavaScriptであるため，オリジナルブロックの動作を記述する際も JavaScript を使用する．
表 1 ブロックの種類と形状外部機器や API を扱う拡張機能が追加された．また，拡張機能は Scratch 公式が用意しているものの他に，種類4拡張機能を自作することができ，Stretch3 のような第形状真偽ブロック三者が作成した拡張機能を搭載した Scratch システム

スタックブロックが Github 上 で 公 開 さ れ て い る ． 本 研 究 で は ，ハットブロック

Scratch3.0 を つ か っ た シ ス テ ム を 構 築 し ， 以 下 ，Scratch3.0 を Scratch と表記する．

C 型ブロック

2.2 自動採点の流れ
値ブロック

自動採点は Scratch の拡張機能を用いて実現する．

キャップブロック

図 3 はプログラムの自動採点の流れである．学習者が拡張機能を選択すると，図 4 のように Scratch のブロ
ックパレットに問題ごとに作成された正誤判定ブロッScratch で利用可能なブロックを形状別でみた場合，クが追加される．問題に対する解答を作成した後，対応する正誤判定ブロックを先頭に配置することで正誤判定が行われる．正解不正解の判定結果がステージ上

表 1 に示す 6 種類がある．これらのブロックのうち，ハットブロックは，その下にブロックが追加される度－33－

に処理が行われる．この特徴は，学習者が作成したプ

fields・next・topLevel・parent・shadow・x．y といログラムの正誤判定を行うのに適しているため，本研うプロパティが格納されている．この中で正誤判定に

究では正誤判定ブロックをハットブロックで作成した．

必要なプロパティは id・opcode・inputs・fields・next

また，値ブロックの中には，選択するとそのブロックプロパティである．id プロパティはスクリプトエリアに代入されている値をステージ上に表示することがでに置かれているブロックに振り分けられている独自のきるブロックがある．このことから，判定結果の表示id である．opcode プロパティはブロック名を表しておは値ブロックで作成した(図 2)．

り，例えば，「〇歩動かす」ブロックの opcode は，「motion_movesteps」である．inputs プロパティは隠しブロックが存在するブロックや，「ずっと～する」や「もし～なら」などの繰り返し処理・条件分岐処理のブロックがもっており，隠しブロックの値や繰り返し・条件分岐処理のブロックの条件やその中に置かれているブロックを知りたい場合は inputs を調べると分かる．fields プロパティは隠しブロックの値が格納されており，入力された値を調べる際に有効である．nextプロパティは，次に置かれているブロックの id をもっており，ブロックの並び順は next をたどることで分かる．

図 2 正誤判定ブロック・判定結果ブロック

2.4.2 解答プログラムの読み取り
解答プログラムからブロック名，値，順序を自動的

2.4 正誤判定に読み取る機能を構築する．学習者が作成したプログ

正誤判定は，解答プログラムに使われたブロック名，ラムからブロック名と入力された値を抜き出し，ブロ値，順序が模範解答と一致するかどうかで行う．

ック名を key，入力された値を value としたプロパテ

2.4.1 Scratch のブロック

ィを，オブジェクトに格納する．ブロックの名前は学習者が作成したプログラムを採点する上で，Scratch のブロックから必要な情報を読み取る必要がopcode を，入力された値は隠しブロックの fields を使う．

ある．Scratch にはブロックパレット，スクリプトエ
リアにある全ブロックの情報をもつ BlockUtility オ
ブジェクトというプロパティがあり，ステージ上のス
図3

プライトの座標，向き，大きさやスプライトの動きの「○歩動かす」ブロックメソッドなどの情報をもっている．スクリプトエリア

図 3 の「〇歩動かす」ブロックを例に説明する．
「〇に作成したプログラムの情報も BlockUtility に存在歩動かす」ブロックの opcode は「motion_movesteps」

する．BlockUtility からスクリプトエリアに作成したで ， 入 力 さ れ て い る 値 は 10 で あ る ． こ れ をプログラムを解析すると，どのブロックが使用された{“motion_movesteps”:10}としてオブジェクトに格納読み取ることができる．また，ブロックにはブロックする．

パレットに置かれているブロックの他にも，値を入力・変更することができるブロックなどは，隠しブロックと呼ばれる値を格納しているブロックが存在する．
Scratch のブロックには ，id ・opcode・inputs・－34－

(1)

(2)

図 6 は，繰り返し処理と条件分岐処理のブロックが(3)組み込まれたプログラムである．繰り返しや条件分岐などの制御ブロックの中などに置かれているブロックは，inputs プロパティを使って読み取ることができる．
「control_forever」は，「ずっと～する」ブロックを

図 4 多様なブロックの組み合わせ指している．このブロックのように中に置けるブロッ

しかし，Scratch では多様なブロックの組み合わせ

ク群が 1 つの場合は，inputs.SUBSTACK プロパティをで同じ動きをすることが可能である．図 4 は，図 3 の調べることでプログラム群の読み取りが可能となる．

ブロックと同じ動きをするブロックの組み合わせの例「control_if_else」は「もし～なら，でなければ～」で，(1)ブロックを複数置いた組み合わせ，(2)「○回ブロックを指す．このブロックは条件ブロック，条件繰り返す」ブロックを使用した組み合わせ，(3)演算ブが真の場合のブロック群，および条件が偽の場合のブロックを使用した組み合わせである．これらも図 3 のロック群を置くことができる．これらは，「ずっと～す場合と同様に，{“motion_movesteps”:10}となるようにる」ブロックと同様に inputs プロパティを使って調べした．

る．inputs.CONDITION プロパティから条件ブロック，inputs.SUBSTACK1 プロパティから真の場合のブロック群，inputs.SUBSTACK2 プロパティから偽の場合のブロック群を読み取ることが可能である．
以上のような処理を行うことで，解答プログラムから必要な情報だけを抜き出し，オブジェクトに格納することができる．
2.4.3 正誤判定
図 5 プログラム例 1

正誤判定のために模範解答を用意する．問題に対す

図 5 は，「動く・待つ・動く」のような複数の動作をするプログラムの例である．このようなプログラムでる模範解答プログラムを上記の方法でオブジェクトに格納したものを模範解答とする．

は，ブロックの順序を取得する必要がある．ブロックの順序は，ブロックの next プロパティを辿ることで取得することができる．図 5 のプログラムは，間に違う種類のブロックを挟んで，同じ種類のブロックが配置されている．これらのブロックの順序を明確にするために，opcode に番号をつけて格納する(図 5 右)．

図6図 7 判定結果の表示

プログラム例 2

図 7 のように正誤判定ブロックに解答プログラムを－35－

組み合わせることで，解答が模範解答と一致するかど本制御構造である，順次・分岐・反復を含む問題となうかを判定する．解答が模範解答と一致していれば「正るように作成した.

解○」，そうでなければ「不正解×」と表示する．
(1)

(2)

(3)

(4)

3. 検証
検証用の問題とそれに対する正誤判定ブロックを 7つ作成し(表 2)，正しく判定を行うことができるかどうかを検証した．
表 2 検証用の問題
問題文
問1

(5)

図8

正解の想定解答(6)(7)

1 秒待った後に，時計回りに 3 度回し続けなさい．

問2

もしスプライトがマウスポインターに触れたなら 3 歩動かしなさい．そうでなければ 2 歩動かしなさい．そして，もし端に着いたら跳
図9

ね返るようにしなさい．これらをずっと繰り検証用の問題に対して,正解の解答には,図 8 のよう返しなさい．
問3

問4

問5

問6

スプライトの大きさを 100%にしなさい．そしな(1) 「模範 解答 」 ,(2) 「ブロ ックを 複数 置いた 解て，スプライトの大きさを 10 ずつ変え，もし答」,(3)「『○回繰り返す』ブロックを置いた解答」,(4)

マウスポインターに触れたなら大きさを 100%「演算ブロックを用いた解答」,不正解の解答には,図にする動きをずっと繰り返しなさい．

9 のような，(5)「数値が異なるブロックを置いた解スプライトの大きさを 100%にしなさい．そし答」,(6)「ブロックの種類が異なる解答」,(7)「ブロて，1 秒待ちスプライトの大きさを 5 ずつ変ックの順番が異なる解答」の想定解答を用意した．(2)え，1 秒待ち・スプライトの大きさを 50 ずつから(7)の想定解答においては，ブロックの数値やブロ変える動きをずっと繰り返しなさい．

ックの組み合わせのパターンを複数用意した．これら

1 秒待ち，スプライトを 0 度に向けなさい．の想定解答を用いてシステムの検証を行った．その結次に 1 秒待ち，スプライトを 90 度に向けなさ

果，すべての問題に対し，用意したすべての想定解答

い．

で正しく判定を行うことができた．

スプライトを時計回りに 15 度回し 1 秒待ち，

4. 考察

時計回りに 90 度回し 1 秒待つ動きを 3 回繰り返しなさい．
問7

不正解の想定解答

本研究では，1 つのスプライトかつ 1 つのスクリプ

スプライトがマウスポインターに触れているトで作成することができる 7 つの問題で検証を行った．

時はずっと時計回りに 5 度回しなさい．

その問題に対し，正解・不正解の想定解答を複数用意し検証を行った結果すべて正しく判定を行うことがで検証用の問題は、1 つのスプライトかつ 1 つのスクきた．このことから，構築した正誤判定システムは自リプトでプログラムを作成できる問題に限定し，「プロ動採点が可能であるといえ，この条件に合致するプロ

グラミング能力検定

グラムを学ぶ際に利用可能であると考えられる．

過去問題集ビジュアル言語版

レベル 1」6 の 6 月分の問題を参考に，プログラムの基－36－

Scratch のプログラムには，検証問題のようなプログラム以外にも，変数を利用するプログラムや，1 つ謝辞のスプライトに対して 2 つ以上のスクリプトで作成するプログラム，複数のスプライトに対して 1 つまたは複数のスクリプトで作成するプログラムもある．今回

本研究は，JSPS 科研費 22K02893，23K02715 の助成を受けたものです．

構築したシステムはこれらのプログラムに対応してお参 考 文 献らず，このようなプログラムでの検証は行っていないが，これらに対応した正誤判定システムの実現は十分(1) 文部科学省:「小学校プログラミング教育の手引(第三版)」,(2020)に可能であると考え，開発を進めている．

(2) 太田 剛，加藤 浩，森本 容介:“コンピューテショナル・シンキング概念に基づくプログラム自動評価機能を持

5. まとめつ Scratch 用学習支援システムの開発”，教育システム

本研究は,Scratch で作成されたプログラムの自動情報学会詩，Vol.35，No.2，pp204-214，(2018)

採点システムの開発を行った．解答プログラムから，(3) 畠中 明哉，尾崎 剛，広瀬 啓雄:“Scratch ドリルシス

正誤判定に必要なブロック名，値，順序を抜き出す機テム開発に向けた Scratch プログラム自動採点方法の能を構築した．その抜き出した情報が，模範解答と一検討”，教育システム情報学会

致しているかどうかを判定し，結果を表示するシステ会

ムを開発した．

2022 年度学生研究発表

A06，(2023)(4) Stretch3,

本システムで正しく採点を行うことが可能か検証すhttps://github.com/stretch3/stretch3.github.io(2023 年 6 月 13 日確認)るために，1 つのスプライトかつ 1 つのスクリプトでプログラムを作成することができるプログラムに限定(5) Scratch3.0 の 拡 張 機 能 を 作 っ て み よ う -Japanese

した問題を 7 つ作成した．その問題に対し，正解・不Scratch-Wiki,正解の想定解答を複数用意し検証を行った結果すべて

https://ja.scratch-wiki.info/wiki/Scratch_3.0 の拡

正しく判定を行うことができた．

張機能を作ってみよう(2023 年 6 月 13 日確認)

しかし，今回の研究では，限定された条件下の問題(6) プログラミング能力検定協会

であり，変数を利用するものや 2 つ以上のスクリプトを使うものなどで正しく判定を行うことができるか検証できていない．
児童が短時間で効率的に学びことができる教材として Scratch ドリルシステムの開発し．活用してもらう
ためには，小学生が学ぶべきプログラミング要素を整理し，各要素を段階的に学習できる問題を作成する必要がある．問題の作成にあたっては，実際に小学生に取り組んでもらい，難易度・学習効果・問題の受容性について検証を行う．最終的には Scratch ドリルシス
テムを小学生に使って学習を行ってもらい，プログラミング的思考やプログラミングに関する知識・スキル習得度合いを確認するための方法として有効であるか検証する予定である．

－37－ロ検®

過去問題集

著, 『2022 年度版

ビジュアル言語版

株式会社スプリックス, 東京都，(2022)プ

レベル 1』,