特集:Scratchを使ってみる

Contents

Scratchで始めるプログラミング

JAVA, PHP, Perl, Python, JavaScript, BASIC, C++,…
今挙げたのは、全てプログラミング言語の名前です。 現に、今みなさんが見ているこのホームページだって、このうちのいくつかのプログラミング言語を使って、動かしています。

でも、こんなにたくさんあるプログラミング言語の中から、どれを選べばいいのか…迷いますね。それに、プログラミング言語って、

def fibonacci():a=0;b=1while 1:yeild aa,b=b,a+barr=[]f=fibonacci()for i in range(50):a=next(f)arr.append(a)

といった感じで、とっつきにくい感じがしますよね。

しかし、これはどうでしょう?
これも、プログラムです。しかも、先ほどのプログラムと同じ動作をするプログラムです。
スクラッチによるプログラム例ずいぶんとっつきやすくなりましたね。なによりも、表記が基本的に日本語です。 これなら、小学生にも指導しやすいと思いませんか。 また、このプログラミング言語の最大の特徴が、「ブロック型」であることです。 上の英語だらけのプログラムを見ればよく分かりますが、 プログラムは、基本的には、そのプログラミング言語特有の文法や構文を習得して、 全てテキストとして、キーボードで打ち込むことになります。
しかし、これは、もともと用意されたブロックを並べていくだけでプログラミングができてしまいます。 入力が必要なのは、設定値や変数名ぐらいです。

 

Scratchは、使える構文が初めから示されている。

プログラミングを学習する上で大変なのは、たくさんの構文や既に開発されている便利なライブラリーを調べたり、覚えたりすることです。しかし、Scratchは、基本的には、できることが限られている分、事前に覚えないといけないことは、非常に少なくなっている上、すべてブロックの形で用意されています。

また、教育用に開発されたScratchは、初めから、絵を動かしたりする機能を備えていますので、用意されているブロックを積み重ねていくだけで、描画やアニメーションといった、実際にはかなり大変なプログラムも簡単に体験することが可能になっています。

プログラミングの楽しさをすべての子供たちに

画面上のキャラクターやパソコンにつないだ機器を、自分の思い描いたとおりにプログラムで動かすという体験は、子どもたちにとって、とても刺激的なものになるに違いありません。ブロックを積み重ねるというパズル的な遊びの感覚で、高度なプログラミングまで可能なScratchが、子供たちにとってプログラミングを身近な存在にしてくれる強力なツールになるということに疑う余地はありません。

 

 

Contents

Scratchをインストールしてみる

ScratchはMITメディアラボが開発し、無償で提供されている教育用プログラミング開発環境です。Web上のOnline版とパソコン内にインストールするOffline版(オフラインエディター)がありますが、ここでは、Offline版をパソコン内にインストールする方法についてお話しします。
注1:2019年1月にScratch3.0 が公開されましたが、ここでは、起動方法が簡単で、汎用性に富むScratch2.0についてご説明します。Scratch3.0 については、「Scratchでプレゼン作成」のページをご覧ください。
注2:Web上のOnline版は、Scratch3.0のみです。Scratch2.0は、下記の要領で、オフラインエディターをインストールしてお使いください。
注3:本ページに掲載しているダウンロード用のScratchファイル(.sb2)は、すべてScratch2.0で作成したものですが、Scratch3.0でも、読み込みは可能ですので、Web上のOnline版(Scratch3.0)でもお使いいただけます。Web上のOnline版を使用する場合は、まず、日本語化し(ツールバー左方にある地球儀マークをクリックして日本語を選択してください。)、「ファイル」「コンピュータから読み込む」と手順を進め、ダウンロードしたファイルを選択して、プログラムを展開してください。
なお、Web上のOnline版は、2019年1月時点ではInternet Explorerに対応していません。Microsoft EdgeまたはChromeをお使いください。

注4:Scratchは、MITメディア・ラボのライフロング・キンダーガーテン・グループの協力により、Scratch財団が進めているプロジェクトです。https://scratch.mit.edu から自由に入手できます。

 

まず、Scratch公式サイト(Scratch2.0 ダウンロードページ)から「Scratch 2.0 オフラインエディター」の最新版を入手します。(なお、Scratch 2.0 オフラインエディターをインストールするためには、「Adobe AIR」が既にインストールされている必要があります。Adobe AIRがインストールされていない場合は、同ダウンロードページのリンクからこれを入手して、事前にインストールしておいてください。)

あとは、ダウンロードしたインストーラー「Scratch-***.exe」(***は、バージョン番号)をダブルクリックして、インストールしてください。(管理者権限を求められます。)

 

Scratch 2.0 オフラインエディターの日本語化

スクラッチ日本語化Scratch 2.0 オフラインエディターをインストールすると、初めは英語表記になっているので、日本語化する必要があります。

日本語化は簡単にできます。図にあるように、ツールバーの「地球」マークをクリックすると、使用する言語を選択できるようになりますので、「日本語」または「にほんご」をクリックすると、表記が日本語表記に変わります。

 

 

Scratch 2.0 オフラインエディターの画面構成

スクラッチ画面説明

ステージ

「スプライト」(キャラクター)の動きを表示する部分です。 ここに表示されているスプライトは、ドラッグして自由に場所を動かすことができます。
また、下の背景のボックスを使って、背景を付けることもできます。背景の切り替えはプログラムでできます。

スプライトリスト

「スプライト」は、ステージで動かすキャラクターです。右にある「スクリプトエリア」でつくったプログラムの指示で様々な動作をさせることができます。
「新しいスプライト」を使って、複数のスプライトを用意することができます。スプライトはネコ以外にもたくさんあります。「コスチューム」を変化させることで、移動以外にも、スプライトにアニメーション効果を持たせることができます。
Scratchは、スプライトにプログラムを持たせるという考え方で、プログラムするので、複数のスプライトを使用する場合は、それぞれのスプライトにプログラムを持たせます。

ブロックパレット

ブロックパレットには、Scratchで使えるプログラムの部品が「ブロック」の形で用意されています。
ブロックは、「動き」「見た目」など、10種類の項目に分けて格納されています。プログラムするときは、この項目を切り替えながら、必要なブロックを右の「スクリプトエリア」にドラッグして並べていくことになります。
また、ブロックパレットの上部には、「コスチューム」や「音」のタブがあります。コスチュームタブをクリックすると、表示が「コスチュームエディター」に切り替わり、スプライトの絵柄を編集したり、新たなコスチュームを追加したりできます。なお、音のタブをクリックすると、録音もできるようになるので、用意された音以外にも、スプライトにセリフをしゃべらせることができるようになります。

スクリプトエリア

「スクリプト」は「台本」という意味です。ここで、使用するスプライトごとに台本(プログラム)を与えて、台本どおりの動きをさせるということになります。
また、ブロックパレットの「イベント」にある「メッセージ」を使うことによって、複数のスプライトや背景のプログラムを連携して動作させることができるので、たくさんのスプライトを使うような複雑なプログラムも簡単に作成することができます。

Contents

Scratchプログラムを読むことから始めよう

プログラム学習をするとき、まずぶつかる壁が「なにができるの?」という疑問と、「どうやって作るの?どうやって動かすの??」という不安です。ですから、指導の際に必要なのは、そういった疑問を希望に変え、不安を期待に昇華させることです。では、どのような魔法を使うと、そのようなことができるようでしょうか。

答えは、簡単です。短い例を見せるだけでいいのです。もちろん、見せるだけではいけません。重要なのは、書かれたプログラムを自分の力で読み、こう動くんだろうなと想像させることです。

幸いなことに、Scratchは難しい構文はほとんど使われていないうえ、ブロックを並べているだけなので、プログラムを読むのは非常に簡単です。
そして、初めてプログラムを見る子どもに教えるべきルールはたった一つだけです。

プログラムは上から順に一行ずつ読む

すごろくプログラムは「すごろく遊び」とよく似ています。

(サイコロを振る)⇒(出た目の数だけ進む)⇒(止まったマスがゴールかどうかを調べる)⇒(止まったマスに書かれた命令に従った行動をする)⇒(止まったマスがゴールかどうかを見る)⇒(ゴールだったらやめる、そうでなければ、「サイコロを振る」に戻る)

このように、すごろくは決まった手順通りに「処理」「判断」「反復」を実行するという動作をします。そして、そのルールは絶対であり、これに反しては、すごろく遊びは成り立ちません。
実際、プログラムもそういった性格を持っています。いかなるバグを含んでいようと、ひとたび実行を始めると、プログラムに書かれた処理を上から順にたどりながら、そこに書かれた制御文どおりの動きをしていきます。

もし、指導する子供たちが低学年であれば、プログラミング指導の導入として、すごろく遊びをすることも有効でしょう。そういった、ルールに従って手順通りに進めていくという遊びの体験が、生徒のプログラムを読むというスキルに直結していくことは、間違いありません。

では、実際にScratchプログラムを見てみましょう。

 

事例1 正方形を描くプログラム

(Scratchファイルダウンロード)

スクラッチ_デモンストレーション

ブロックのかたまりが8つあります。つまり、この例では、ネコに8つのプログラムを与えていることになります。1, 5, 6, 7 は、それぞれ1つのブロックしかありませんが、これもすべて立派なプログラムです。

まず、実行の仕方ですが、各ブロックのどこでもいいですから、クリックするだけです。


まず、プログラム 1 をクリックしてみましょう。
ネコが右に動きましたね。

ここで子どもたちに覚えてもらいたいのは、クリックすると、ブロックに書かれた命令通りに、ネコが動くということです。


続いて、プログラム 2 をクリックするのですが、ここからは、子どもたちに何が起こるか想像させながら、進めていきましょう。
「ペンを下ろし→ 100 歩右に動き→ペンを上げる」…簡単ですね。まさしく、その通りに動くのを確認させてください。
実際の指導の際には、子どもたちに実演させてみると、実感がわくと思います。

また、ここでは、なぜ「ペンを上げる」がプログラムの最後にくっついているのかを考えさせるのも大切です。実際、生徒に実演させる際に、「ペンを上げる」がなければどうなるか確かめさせるとおもしろでしょう。
こうして、子どもたちは「バグ」が単なるミスではなく、想定不足も大いに原因になるといいうことを知ることになるでしょう。


プログラム 2 では、線を引くことになりますが、当然これは試し引きなので、消したくなります。じゃあと言うことで、線を消すのですが、これもプログラムで実行します。
「ペン」ブロックで描画したものを消すプログラムは、Scratchでは既に用意されています。プログラム 5 の「消す」ブロックです。
これをクリックして、実際に描いたものが消えることを確認させましょう。


また、プログラム 7 の、「1 秒で x 座標を -100 に、y 座標を 100 に変える」も試してみましょう。
このプログラムでは、設定する値が 3 つあります。自分の設定した値で、いろいろな動きが実現できることを体験させてみましょう。
また、「座標」という言葉が出てきますが、対象が数直線に慣れているならば、座標に初めて触れる子供たちに指導者が与えなければならない情報は、座標が平面上の位置を表す言葉だということだけです。時間的に余裕があれば、メルカトール図法で描かれた世界地図(ここで使用する地図は経度緯度0が真ん中にある大西洋中心の地図が良いでしょう。)を用いて、2 つの値の組合せで平面上の点の位置を表すことができるという考え方が自然であることを実感させましょう。

座標の説明


プログラム 6 の、「90 度に向ける」も試してみましょう。しかし、これはクリックしても何も起こりません。なぜなら、今、ネコはもともと 90 度の方向を向いているからです。
このプログラムでは、設定する値が 1 つあります。この設定値をいろいろとかえてみましょう(ドロップダウンリストで、「0」「90」「180」「-90」の 4 つが選択できるようになっていますが、それ以外の数値も入力することができるようになっています)。いかがですか。

Scratchでは、スプライトの向きは、時計でいえば、12時の方向を 0 度の向きと考え、それから時計回りに 360 度で再び12時の方向を向くように設定されています。
ですから、右の方向を向いていれば、「90 度に向いている」し、下を向けば、これは「180度に向いている」ということになるのです。ここでも、自分の設定した値で、いろいろな動きが実現できることを体験させてみましょう。

向きの説明


それでは、再び、ネコによる図形の描画に戻りましょう。

次は、プログラム 3, 4 を飛ばして、プログラム 8 を読ませてみましょう。ここでは、「反復」を示すブロックがあります。ブロックの形状から、子どもたちは、ペンを下ろしたあとに、「100 歩進んで 90 度右回りに回転する」を 4 回繰り返して、繰り返しが終わった時点でペンを上げる、ということを読み取ることができるでしょう。
大切なのは、この一連の動作により、何が起こったかを考えることです。

考えさせたあとで、いきなり確かめにプログラム 8 をクリックしてもいいのですが、この結果がプログラム 3 を 4 回クリックした結果と同じであることも確認させてみましょう。このねらいは、デバッグ時によく行う、「ステップイン」という考え方を理解させることです。実際、プログラムが長くなればなるほど、ステップインをよく行うことになります。長いプログラムも、短いパーツに分けて考えれば、分かりやすくなるということを、ここで理解させるのもよいと思います。

また、プログラム 4 とプログラム 8 を比べることも、指導しておきたいことの一つです。
同じミッションを持ったプログラムでも、書き方は一つではありません。見て分かるように、この 2 つのプログラムは同じ結果を持ちます。しかし、ここで子どもたちに考えてもらいたいのは、どちらがコンピュータに優しいプログラムであるかということです。
コンピュータは文句を言いません。プログラムに書かれている内容に従って、ひたすら黙々と処理を行っていきます。もし、プログラムに無駄や無理が含まれていても、コンピュータは、言われた通り、処理します。しかし、無駄は無駄です。無駄な動きをさせることは、極力避けたいことです。
これも、子どもたちに実際に実演させることで、実感できるはずです。プログラム 4 では、無駄なペンの上げ下ろしが 3 回ずつあります。プログラム 4 とプログラム 8 を同時に実演させて、プログラム 4 のほうが、無駄な処理がある分、時間がかかることに気付かせることは、重要なことです。このことが、効率のよいプログラムの必要性の理解につながっていくはずです。

 

事例2 ネコを壁伝いに走らせるプログラム

(Scratchファイルダウンロード)

壁伝いに走るプログラム

今度のプログラムは、「分岐処理」も含んでいます。「もし~~~ならば~~~そうでなければ~~~」のブロックのところです。事例 1 よりも分かりづらいですが、読めますか。

分かりづらさの原因は、分岐処理の箇所というよりも、端に触れたとき「-20 歩進む」となっていることの必要性の分かりづらさではないでしょうか。

実際、「-20 歩進む」がないほうが、子どもたちはすんなりとプログラムを読み取ることができると思います。よって、指導の際には、まず、この「 - 20 歩進む」をはずしたプログラムを読ませるほうがよいと思います。

「-20 歩進む」がなければ、単純に、10歩ずつ進んでいって、端(壁)にぶつかったら、進行方向に向かって左に直角に曲がって、再び進んでいくということが読み取れると思います。

しかし、勘のいい子どもなら気付くとは思いますが、このプログラムを実行しても、思った通りには動きません。当然ですが、いったん端に触れたら、ネコの形状の関係で、90度回転しても、端に触れたままなので、「10歩進む」に進まないからです。つまり、一度、端(壁)から離れるための「-20 歩進む」なのです。

このように、プログラムを作るときは、各ステップを処理した後、どのような状況になっているかを常に把握しておくことが大切です。特に、条件分岐があるところでは、重要な態度になります。子どもたちには、この事例で、そのことをあわせて理解してもらいたいと思います。

本当に大切なのはアルゴリズムを考えること

今までの指導で、子どもたちは、Scratchプログラムがどう作られているか、どう実行させるかといったことが分かったはずです。特に、プログラミングで基本的な、「反復」「条件分岐」などの流れの制御ができることができることが理解できているはずです。

こうなれば、子どもたちは実際にプログラムを作ってみたくなるはずです。プログラムを作るときに大切なのは、アルゴリズムを考えることです。アルゴリズムとは、目的に対する解法を実施可能な手順として表したものです。プログラムは、そのアルゴリズムをコンピューターが実行可能な形で表現したものです。 アルゴリズムさえしっかり考えられていれば、あとは、それをプログラミングするだけですが、今まで見てきたように、Scratchではプログラミング自体は、非常に簡単にできるようになっています。

それでは、アルゴリズムを考えるという体験の手始めとして、上にあげている例のモディフィケーション(模倣)を考えてみましょう。

 

練習1 正八角形を描くプログラム

正八角形

ここでは、正八角形を描かせることをミッションとします。

プログラミングする力の一つに「パターン認識」があります。今までに経験した問題の中に、同じような問題(パターン)がなかったか、応用できる手法がないかなどと考えることは、プログラミングする上で、重要な態度です。事例1の正方形を描くプログラムを経験した子供たちには、これをモディファイすることが自然な流れとなります。モディフィケーションの際には、どの部分の設定を変更するかを考える必要があり、これは、課題の本質に迫る行為です。本質が分かれば、一般化につながります。活動の中で、一般化を考える子どもが出てくるとおもしろいですね。

ただし、小学生にとっては、八角形という形自体、なじみのない形状です。この問題に当たる前に、正八角形がどのような形で、正方形とはどう違うのか、また、どのような所が同じなのかを観察させたり考えさたりすることが、描画のアルゴリズムを考える行為に繋がるはずです。

 

練習2 リレーをする2匹のネコ

 

 

 

2匹のネコがステージの枠に沿って、リレーをするプログラムを作ることをミッションとします。

この課題では、複数のスプライトにそれぞれプログラムを持たせたうえで連携した動きをさせることを目的にしています。

このミッションを達成する技量があれば、アニメーションを使ったプレゼンテーション作成をScratchで行うことができるようになります。上の正八角形を描画するプログラムほどは、簡単ではありませんが、生徒の創作意欲を高めるためには、是非指導しておきたい内容です。

ポイントは、「メッセージ」です。

「メッセージ」に関するブロックは、イベントブロックの中にある「(メッセージ1)を受け取ったとき」「(メッセージ1)を送る」「(メッセージ1)を送って待つ」の 3 つのブロックです。これらのブロックの(メッセージ1)をクリックすると、新しいメッセージを作ることができます。ここで作ったメッセージを送ったり、受け取ったりすることで、複数のスプライトに連携した動きを与えることができるようになります。

ただし、子どもたちにとっては、初めて「メッセージ」に触れるわけですから、その使い道が理解しづらいということが否めないことです。外周に沿って走るという基本的な動きは、2匹のネコにそれぞれ事例1のプログラムを与えれば実現するわけですから、このミッションをクリアさせるために、事例1のプログラムに加えてどのような事柄が必要なのかを考えさせることが必要になります。この考察により、子どもたちは、「センサー」のようなものの必要性を理解することとなります。この課題でいえば、ネコがもう1匹のネコにタッチするということを感知することがセンサーの役割といえます。そして、センサーで感じ取ったことのやり取りをする橋渡しこそ、「メッセージ」なのです。

ちなみに、2匹のネコに与えるプログラムの一例は次の通りです:

ネコ1のプログラム

ネコ2に与えるプログラム

 

Cat2に与えられたスクリプトが1つであるのに対し、Cat1には、3つのスクリプトが与えられていますが、これは、Cat1にプロジェクト全体の実行開始処理を与えたためです。2つ目の「sキーが押されたら」というイベントブロックから始まるスクリプトが、プロジェクト全体の開始を表すものです。このブロックには、「サブルーチン」の呼び出しという、プログラミングでよく用いる技法を用いています。プログラミングしていると、同じ命令パターンを何度も書く場面が起こります。しかし、何度も同じことを書くのは無駄なことであるうえ、途中で修正があると、何か所も書き直さなければならなくなります。そこで、プログラミングでは、サブルーチンという、命令パターンを用意しておいて、必要な時に呼び出してはめ込むということをします。ここでは、2行目のブロック「Cat1の動き」がサブルーチンを呼び出す命令を出しており、呼び出されるサブルーチンは「定義(Cat1の動き)」となっています。Scratchでは、こういったサブルーチンは、「その他ブロック」の「ブロックを作る」を用いて作成します。

この新しいブロックを作る機能はその他のブロックにカテゴライズされているので、あまり使わないというイメージをもつ方が多いようですが、先ほどのような理由で、実際には多用する機能となります。子どもたちには、早い段階で触れさせておきたい技法のひとつです。

子どもたちが、考えたアルゴリズムに従ってプログラミングする際は、目的に沿った使えるブロックを自分たちで探したり、教えあったりするような、コミュニケーション溢れる活動が見られると思います。

もし、子どもたちが困っているようでしたら、ヒントを与える前に、できているところまででよいので、実行させてみましょう。何が課題かが、見えてくることになるでしょう。なぜ思い通りに動かないのかを考えれば、何が必要かが分かってきます。そういった試行錯誤がプログラミングの経験値を上げていくことになることについて疑問の余地はありません。そして、指導者としてヒントを与えるとすれば、その試行錯誤で新たに得られたアルゴリズムを実現するブロックを示してあげることだと思います。

なお、プログラムの最後の方にある、メッセージを送り、続いて、「このスクリプトを止める」という、2つのブロックからなる動作は、「(メッセージ)を送って待つ」という1つのブロックで実現することができます。プログラムの例示では、「待つ」という意味がつかみづらいので、2つのブロックで表現しましたが、「待つ」は、スクリプトの処理をそこで停止するという意味ですので、「(メッセージ)を送って待つ」のみでも表現できます。このように、ブロックの中には、使い道が分かりづらいものも含まれています。いろいろな例を見せることによって、子どもたちのプログラミング経験値を上げていっていただけたらと思います。

考えを実現するScratch

既にあるプログラムを読解したり、いくつかのプログラミングを体験したりすることで、プログラミングの手法をほぼ身に付けることができるのが、Scratchの特徴です。

あとは、ミッションからアルゴリズムを考え、それをプログラムに乗せていくという経験をいかに多く持たせることができるかということが重要です。また、この記事では触れなかった変数や配列、数値計算など、プログラミングの基本事項を身に付けさせること重要です。これらは、プログラミングでは、これまでやったことを「記憶」しながら動くという、人間の自然な動作に関連します。学習が進んで来れば、当然必要な事柄になっていくでしょう。

同じミッションでも、アルゴリズムは幾通りもあるのが普通です。多くのプログラミング体験を持たせることにより、効率の良さや自然な動きを意識するようになります。そして、そのことが、子どもたちに、プログラミングは自分の個性を発揮することができるものであることを理解することにつながるになります。

自らの考えを実現するプログラミング。それを、Scratchから始めましょう。

 

子どもたちに「普段使いのプログラミング」を身に付けさせるためのページ「Scratchでプレゼン作成」も併せてお読みください。