子供向けプログラミング言語Scratch:ブロックの形と数

Scratchにはブロックと呼ばれる命令がたくさん用意されています(日本語版Scratch Wikiによると、Scratch 2.0には、この記事を公開した時点では145個のブロックがあります)。
Scratchプログラミングは、主にブロックをドラッグ&ドロップでつなげていく作業になります。
Scratchブロックは、グループ(日本語版Scratch Wikiでは「カテゴリー」と訳されていますが、このブログでは「グループ」と呼んでいます。同じグループのブロックは同色で統一)と機能(同じ種類の機能のブロックは同じ形で統一)の2つの側面から分類することができます。
この記事では、ブロックの形と各グループのブロック数についてのお話しをします。

【目次】
1.ビジュアルプログラミングとテキストビジュアルプログラミング
1.1.ビジュアルプログラミング
1.2.テキストビジュアルプログラミング
2.ブロックの形と意味
2.1.ハットブロック
2.2.スタックブロック
2.3.真偽ブロック
2.4.値ブロック
2.5.C型ブロック
2.6.キャップブロック
2.7.型変換のルール…キャスト
3.グループ(カテゴリー)ごとのブロックの数
3.1.[動き]グループの数
3.2.[見た目]グループの数
3.3.[音]グループの数
3.4.[ペン]グループの数
3.5.[データ]グループの数
3.6.[イベント]グループの数
3.7.[制御]グループの数
3.8.[調べる]グループの数
3.9.[演算]グループの数
3.10.[その他]グループの数
4.まとめ

1.ビジュアルプログラミングとテキストビジュアルプログラミング

皆様もすでにご存知のことと思いますが、Scratchは、米国のマサチューセッツ工科大学(MIT)の生涯幼稚園グループ(ライフロングキンダーガーテングループ)が、8才~16才を対象とした教育用のプログラミング言語として開発したものです。
なお、Scratchは、年齢に関係なく、誰でも無料で使用することが可能です。

1.1.ビジュアルプログラミング

Scratchは子供が使うプログラミング言語として開発されたため、簡単に操作できるように命令は図で用意され、図をドラッグ&ドロップして組み合わせることを中心とした操作でプログラミングする、ビジュアルプログラミングという形式が採用されています。
Scratchの命令の図は、ブロックといいます。

1.2.テキストビジュアルプログラミング

ちなみに、他の多くのプログラミング言語のように、命令のすべてをテキスト(=文字)で入力してプログラミングする形式をテキストプログラミングと言います。
傾向として、子供向けのプログラミング言語は、ビジュアルプログラミング言語であることが多いようです。
子供が入力操作に手間取る可能性を極力少なくして、プログラミングの本質を学ぶことに集中できるようにするためだと思われます。

2.ブロックの形と意味

Scratchブロックは、図として形で分類することができます。
ブロックのそれぞれの形ごとに共通する意味や使い方、機能があるので、それを覚えておくと、プログラミングが楽になります。

Scratchのバージョンやリビジョンが上がるごとにブロックが増えたり減ったりすることがありますが、増えた場合でも、新しいブロックの使い方はその形から類推することができます。
ScratchコミュニティーサイトScratch Wikiやフォーラムなどでは、現在存在していないブロックのリクエストの声が上がっていたり、追加を検討しているらしい記述があったりするので、今後もブロックは増えたり減ったりすることが予想されます。
そのため、形に共通する意味や使い方、機能を是非、覚えておくことをお勧めします。

Scratchブロックの形には、ハットブロックスタックブロック真偽ブロック値ブロックC型ブロックキャップブロックの6種類があります。
Scratch2.0の、この記事を公開した時点(IT企画研究所の各ブログ記事には、URLに最初の公開日情報を織り込んでいます)でIT企画研究所が確認した各ブロックの数は、ハットブロック11個、スタックブロック78個(日本語版Scratch Wikiでは77個となっています)、真偽ブロック13個、値ブロック36個(日本語版Scratch Wikiでは37個となっています)、C型ブロック5個、キャップブロック2個の計145個です。

Scratch Wikiに書かれている数と、ある時点で実際に数えた数との間に多少違いが出てしまっているのは、次のような理由が考えられます。
Scratch Wikiの更新や日本語版Scratch Wikiの翻訳/更新のタイミングと、Scratchのリビジョンなどそれ自身の更新のタイミング、外部の拡張機能のバージョンアップのタイミングなどが異なっていたり、数える対象(拡張機能のどのバージョンまでにするかなど)がタイミングにより変わっていたりなどです。

それでは、個々の形について、見ていきます。

2.1.ハットブロック

形と機能:
ハットブロックの形の例として、[イベント]グループの[緑の旗がクリックされたとき]ブロックを見てみます。

ハットブロックの例:[イベント]グループの[緑の旗がクリックされたとき]ブロック
ハットブロックの例:[イベント]グループの[緑の旗がクリックされたとき]ブロック

ハットブロックは、その名の通りつば広帽子の形をしています。
このブロックは、上部に山型の膨らみがあるため、他のブロックの下に付けることができず、したがって、ハットブロックはスクリプトの先頭にのみ使用するブロックであることがわかります。

ハットブロックはスクリプトの先頭に置くブロックであり、スクリプト起動のきっかけ(トリガー)となるイベントごとに用意されていて、イベントが発生したときに、そのスクリプト実行を開始させるためのブロックです。

なお、Scratchスクリプトの動く仕組みに関するキーワードである“イベント駆動型プログラミング”については、IT企画研究所のブログ記事「イベント駆動型プログラミングについて:子供向けプログラミング言語Scratchのプログラムパラダイム」をご覧ください。

分布と個数:
LEGO WeDo2.0の拡張機能分2個を除いて、Scratchにはハットブロックが計11個あります。
ハットブロックのグループごとの分布は、[イベント]グループに6個、[制御]グループに1個、[その他]グループのPicoBoardの拡張機能に2個、LEGO WeDo1.0の拡張機能に2個、LEGO WeDo2.0の拡張機能に2個となっています。

2.2.スタックブロック

形と機能:
スタックブロックの形の例として、[動き]グループの[〇歩動かす]ブロックを見てみます。

スタックブロックの例:[動き]グループの[〇歩動かす]ブロック
スタックブロックの例:[動き]グループの[〇歩動かす]ブロック

スタックブロックは、形状別に見たとき、一番多い形のブロックで、役割としても、スクリプトを形成する上で基本となるブロックです。
スタックブロックは上下に凹凸があるので、上下に他のスタックブロックやC型ブロック、上部にのみハットブロック、下部にのみキャップブロックを付けることができます。
また、C型ブロックの内側に位置付けることもできます。

なお、ブロック内の丸型には、基本的には数値になるものを入れます。
○の部分に入れることができる数値とは、直接半角で入力する数字、変数、数値を値に持つブロックなど数値として扱うことができるものです。
詳細については、2.7.をご参照ください。

分布と個数:
LEGO WeDo2.0の拡張機能分7個を除いて、Scratchにはスタックブロックが計78個あります(日本語版Scratch Wikiには77個と書いてありますが、この時点にこの条件で数えたら78個でした)。
スタックブロックのグループごとの分布は、[動き]グループに14個、[見た目]グループに18個、[音]グループに11個、[ペン]グループに11個、[データ]グループに10個、[イベント]グループに2個、[制御]グループに3個、[調べる]グループに4個、[その他]グループのLEGO WeDo1.0の拡張機能に5個、LEGO WeDo2.0の拡張機能に7個となっています。

2.3.真偽ブロック

形と機能:
真偽ブロックの形の例として、[演算]グループの[(六角形)<(六角形)]ブロックを見てみます。

真偽ブロックの例:[演算]グループの[(六角形)<(六角形)]ブロック
真偽ブロックの例:[演算]グループの[(六角形)<(六角形)]ブロック

真偽ブロックは、六角形のブロックです。
このブロックは、(正しい、成り立つなど)ならばtrueという文字列、(正しくない、成り立たないなど)ならばfalseという文字列の値を持ちます。

一般に、真偽を表すデータ型をBoolean(ブーリアン)型ブール型、または、論理型などと言います。
真偽ブロックは、Scratchの値を持つブロックです。

Scratch型変換のルールキャスト、または、キャスティングとも言います)で、値がtrueになるものは、数値が必要な部分で使用されると数値の1として使われ、値がfalseになるものは、数値が必要な部分で使用されると数値の0として使われます。
その他、の値に関する詳細については、2.7.もご参照ください。

真偽ブロックは上下に凹凸がないので、単独でスクリプトの一行になることはなく、他のブロックスロットと呼ばれる□や〇、六角形のへこみなどに、はめて使用します。
真偽ブロックの典型的な使い方は、[制御]グループのブロックの中の六角形のスロットにはめる使い方です。

例えば、[演算]グループの[(六角形)<(六角形)]ブロックに、変数aが2より小さいかどうかを調べるために、左の六角形に変数aをはめ、右の六角形に2を直接入力します。

真偽ブロックの例2
真偽ブロックの例2

上記を使って他のブロックとも組み合わせて、変数aに1を代入してから、もし、変数aが2より小さかったら「Hello!」と2秒言うスクリプトを作ります。
まず、以下のようなスクリプトを作り、

真偽ブロックを使ったスクリプトの例1
真偽ブロックを使ったスクリプトの例1

[制御]グループの[もし(六角形)なら]ブロックの六角形のへこみのスロットに、先の変数aが2より小さいかどうかを調べる[演算]グループの[(六角形)<(六角形)]ブロックをはめ込みます。

真偽ブロックを使ったスクリプトの例2
真偽ブロックを使ったスクリプトの例2
真偽ブロックを使ったスクリプトの例3
真偽ブロックを使ったスクリプトの例3

このスクリプトでは、aに1を代入した直後に、aが2より小さいか確認しているため、明らかにaは2より小さいので(なぜなら、aは1)、[もし(六角形)なら]ブロックがC型の内側に抱えている[見た目]グループの[□と〇秒言う]ブロックが実行されることになります(今回は対象のスプライトが「Hello!」と2秒言います)。

真偽ブロックで気を付けることは、次の2つです。
・真偽ブロックは、六角形のスロット以外に、四角形(白抜き、文字型のスロット)や丸型(数値のスロット)のスロットにも、はめることができる
・真偽ブロックは、ならばtrueならばfalseの文字列の値をもち、数値のスロットにはめた場合は、trueならば1、falseならば0の数値として使われる

の結果がいろいろな使われ方をする例として、猫のスプライトに以下のスクリプトを作ったプロジェクトの例(真偽ブロックの値の例のプロジェクト)をご覧ください。

真偽ブロックを使ったスクリプトの例 完成版
真偽ブロックを使ったスクリプトの例 完成版

なお、ブロック内の四角形には、基本的には文字列になるものを入れますが、数値になるものを入れることも、の値になるものを入れることも可能です。
詳細については、2.7.をご参照ください。

真偽ブロックの値の例のプロジェクトを以下に埋め込みました。
緑の旗をクリックして、直接ここから実行してみることができます。

真偽ブロックの値の例のプロジェクトを実行してみた動画は、こちらからご覧いただけます。

分布と個数:
LEGO WeDo2.0の拡張機能分1個を除いて、Scratchには真偽ブロックが計13個あります。
真偽ブロックのグループごとの分布は、[データ]グループのリストに1個、[調べる]グループに5個、[演算]グループに6個、[その他]グループのPicoBoardの拡張機能に1個、LEGO WeDo2.0の拡張機能に1個となっています。

2.4.値ブロック

形と機能:
値ブロックの形の例として、[演算]グループの[〇+〇]ブロックを見てみます。

値ブロックの例:[演算]グループの[〇+〇]ブロック
値ブロックの例:[演算]グループの[〇+〇]ブロック

値ブロックは、楕円形のブロックです。
このブロックは、値を持ちます。
値に関する詳細については、2.7.もご参照ください。

値ブロックは、真偽ブロック同様上下に凹凸がないので、単独でスクリプトの一行になることはなく、他のブロックスロットと呼ばれる□や〇などに、はめて使用します。

なお、ブロック内の丸型には、基本的には数値になるものを入れます。
○の部分に入れることができる数値とは、直接半角で入力する数字、変数、数値を値に持つブロックなど数値として扱うことができるものです。

分布と個数:
LEGO WeDo2.0の拡張機能分2個を除いて、Scratchには値ブロックが計36個あります(日本語版Scratch Wikiには37個と書いてありますが、この時点にこの条件で数えたら36個でした)。
値ブロックのグループごとの分布は、[動き]グループに3個、[見た目]グループに4個、[音]グループに2個、[データ]グループのリストに2個、[調べる]グループに11個、[演算]グループに11個、[その他]グループのPicoBoardの拡張機能に1個、[その他]グループのLEGO WeDo1.0の拡張機能に2個、LEGO WeDo2.0の拡張機能に2個となっています。

2.5.C型ブロック

形と機能:
C型ブロックの形の例として、[制御]グループの[もし(六角形)なら]ブロックを見てみます。

C型ブロックの例:[制御]グループの[もし(六角形)なら]ブロック
C型ブロックの例:[制御]グループの[もし(六角形)なら]ブロック

C型ブロックは、アルファベットのC のような形をした部分を持つブロックです(中にはCのような形をした部分を2つ同時に縦に持つ、アルファベットのEのような形をしたブロックもありますが、それもC型ブロックになります。)。
C型ブロックは、最上部と最下部に凹凸があるので、上下にスタックブロックや他のC型ブロック、上部にのみハットブロック、下部にのみキャップブロックを付けることができます。
また、C型ブロックの内側に他のブロックの並びを位置付けることもでき、それがC型ブロックであってもOKです。

C型ブロックは、そのブロック内上部に書かれた条件によって、C型で囲った内側のブロックの並びを実行します。
C型ブロックには、選択構造(分岐構造、または、条件構造)ブロックと、反復構造(繰り返し構造)ブロックの、大きく分けて2種類があります。
[制御]グループの[もし(六角形)なら]ブロックのように、C型ブロックの中でもスロットの内容を条件として条件判定を含むブロックでは、スロットは六角形のへこみの形のスロットになっていて、そのスロット真偽ブロックをはめて使用します。

分布と個数:
ScratchにはC型ブロックが計5個あります。
C型ブロックのグループごとの分布は、[制御]グループに5個のみです。

2.6.キャップブロック

形と機能:
キャップブロックの形の例として、[制御]グループの[■を止める]ブロックを見てみます。

キャップブロックの例:[制御]グループの[■を止める]ブロック
キャップブロックの例:[制御]グループの[■を止める]ブロック

キャップブロックは、その名の通りキャップ(凹)の形をしています。
このブロックは、上部のみが凹になっているので、上部にスタックブロックC型ブロックハットブロックを付けることができる一方、下部がフラットなので、これ以上他のブロックを下に付けることができず、したがって、キャップブロックはスクリプトの最後やC型ブロックの内側の最後のブロックであることがわかります。

キャップブロックは、その形とそれによって付けることができる位置からもわかるように、メインルーチンサブルーチンを止める操作を行うブロックです。

分布と個数:
Scratchにはキャップブロックが計2個あります。
キャップブロックのグループごとの分布は、[制御]グループに2個のみです。

2.7.型変換ルール…キャスト

型変換のルールは、以下の表の通りです。

左の型の値の例 文字列型として利用されるとき 数値として利用されるとき
文字列 “abc” “abc” 0
文字列 “123” “123” 123
数値 123 ”123” 123
Booleans “true” 1
Booleans “false” 0
リスト [“a”, “b”, “c”] “abc” 0
リスト [“a”, “b”, “c”, “are the letters”] “a b c are the letters” 0
リスト [1, 2, 3] “123” 123
リスト [1, 22, 3] “1 22 3” 0
リスト [3, “.”, 1, 4] “3.14” 3.14
リスト [] “” 0

表は、次の参考サイトの表を日本語表記したものです。
参考サイト:Scratch Wiki…Casting(型変換)

3.グループ(カテゴリー)ごとのブロックの数

3.1.[動き]グループの数

[動き]グループには、ブロックが17個あります。
[動き]グループのブロックの形ごとの分布は、スタックブロックが14個、値ブロックが3個です。

3.2.[見た目]グループの数

[見た目]グループには、ブロックが22個あります。
[見た目]グループのブロックの形ごとの分布は、スタックブロックが18個、値ブロックが4個です。

3.3.[音]グループの数

[音]グループには、ブロックが13個あります。
[音]グループのブロックの形ごとの分布は、スタックブロックが11個、値ブロックが2個です。

3.4.[ペン]グループの数

[ペン]グループには、ブロックが11個あります。
[ペン]グループのブロックの形ごとの分布は、スタックブロックが11個のみです。

3.5.[データ]グループの数

[データ]グループには、ブロックが13個あります。

[データ]グループの変数には、ブロックが4個あります。
[データ]グループの変数のブロックの形ごとの分布は、スタックブロックが4個のみです。

[データ]グループのリストには、ブロックが9個あります。
[データ]グループのリストのブロックの形ごとの分布は、スタックブロックが6個、真偽ブロックが1個、値ブロックが2個です。

3.6.[イベント]グループの数

[イベント]グループには、ブロックが8個あります。
[イベント]グループのブロックの形ごとの分布は、ハットブロックが6個、スタックブロックが2個です。

3.7.[制御]グループの数

[制御]グループには、ブロックが11個あります。
[制御]グループのブロックの形ごとの分布は、ハットブロックが1個、スタックブロックが3個、C型ブロックが5個、キャップブロックが2個です。

3.8.[調べる]グループの数

[調べる]グループには、ブロックが20個あります。
[調べる]グループのブロックの形ごとの分布は、スタックブロックが4個、真偽ブロックが5個、値ブロックが11個です。

3.9.[演算]グループの数

[演算]グループには、ブロックが17個あります。
[演算]グループのブロックの形ごとの分布は、真偽ブロックが6個、値ブロックが11個です。

3.10.[その他]グループの数

[その他]グループには、ブロックが25個あります。

[その他]グループのPicoBoardの拡張機能には、ブロックが4個あります。
[その他]グループのPicoBoardの拡張機能のブロックの形ごとの分布は、ハットブロックが2個、真偽ブロックが1個、値ブロックが1個のみです。

[その他]グループのLEGO WeDo1.0の拡張機能には、ブロックが9個あります。
[その他]グループのLEGO WeDo1.0の拡張機能のブロックの形ごとの分布は、ハットブロックが2個、スタックブロックが5個、値ブロックが2個です。

[その他]グループのLEGO WeDo2.0の拡張機能には、ブロックが12個あります。
[その他]グループのLEGO WeDo2.0の拡張機能のブロックの形ごとの分布は、ハットブロックが2個、スタックブロックが7個、真偽ブロックが1個、値ブロックが2個です。

4.まとめ

Scratchブロックの分布と数は、以下の通りです。

カテゴリー ブロック総数 ハット スタック 真偽 C型 キャップ
動き 17 14 3
見た目 22 18 4
13 11 2
ペン 11 11
データ 変数 4 4
データ リスト 9 6 1 2
イベント 8 6 2
制御 11 1 3 5 2
調べる 20 4 5 11
演算 17 6 11
その他 Pico Board 4 2 1 1
その他 LEGO WeDo1.0 9 2 5 2
145 11 78 13 36 5 2
その他 LEGO WeDo2.0 12 2 7 1 2

表は、次の参考サイトの数値を一部修正してまとめたものです。
参考サイト:日本語版Scratch Wiki…ブロック

また、以下は、この記事の作成で参考にしたその他のサイトです。

参考サイト:日本語版Scratch Wiki…Scratchで特殊な扱いをする値

参考サイト:日本語版Scratch Wiki…真偽ブロック

コメントを残す