プログラミング教育入門(2/3)


新学習指導要領では小学校第5年生の算数の図形において,「必要な場面においてコンピュータなどを適切に活用すること」と記載されていて,正多角形を作図にするときには,正確に繰り返し作業を行う必要があり,この点でプログラミングを活用することが考えられます.このため,多くの先生はすでにプログラムで正多角形を描くことを体験済みだと思いますが,正多角形の作図のプログラムにもいろいろなレベルがあり,また発展的な学習も考えらられるため,ここでは正多角形の作図のプログラムを学習していきます.



最初は正三角形を描くことを考えましょう.正三角形をペンで描くときのペンの動きを考えてみてください.ペンを走らせて,進む方向を変える.またペンを走らせて,進む方向を変える.これを繰り返すことで正三角形を描くことができます.正三角形の性質から,進む距離は同じで,方向を変えるときの角度も同じことがわかります.つまり同じことを正確に繰り返すことで正三角形を描くことができます,同じことを正確に繰り返す作業はコンピュータが得意とする作業です.コンピュータの便利さを体感していただきたいと思います.



最初は繰り返しを使わずに愚直に進んで,回転,進んで,回転というプログラムを作ってみましょう.いきなり高度なプログラムを作ろうとせず,簡単なものから作っていき,徐々に高度なプログラムに改造していくことが重要です.では,お手本のプログラムを確認してください.
お手本プログラム:https://scratch.mit.edu/projects/356114957/
猫が前に進んで向きを変え,また前に進んで向きを変える.進む度,向きを変える度,少し停止していることも見てとれます.
ここで新たに利用するブロックは,「15度回す」と「ペンを下ろす」と「全部消す」です.
「15度回す」はスプライトの向きを15度回転します.時計回りと反時計回りがあります.
「ペンを下ろす」はスプライトの軌跡を描きたいときに使います.ペンを下ろした後,スプライトが動いた部分に色を付けてくれます.なお,軌跡を描きたくないときには「ペンを上げる」ブロックを使うと,スプライトが動いても軌跡が描かれないようになります.
「全部消す」はペンで描いた線を消すブロックで,最初にこのブロックを呼び出すことで,前に描いたものをきれいに消すことができます.



拡張機能を利用するには,拡張機能を呼び出す必要があります.左下の「拡張機能を追加」のボタンから,「ペン」を追加してください.これにより,「ペン」のブロックが表示されるようになります.
それでは準備ができたので,正三角形を描くプログラムを考えてみてください.



スライドの通りのプログラムができあがったのではないでしょうか.だた,このプログラムは同じ処理が何度も書かれていて,スッキリしたプログラムとは言えません.3回だったからこそ,同じ処理を3度書くことができましたが,100回だったらどうでしょう.こういうときは繰り返しを用いるとよいです.次は,繰り返しのブロックを用いて,プログラムを改良しましょう.



お手本プログラムの実行結果は先ほどと同じです.実行結果は変わりませんが,プログラムは異なります.答えが一つではない例になっています.
お手本プログラム:https://scratch.mit.edu/projects/355825339/
新たに利用するブロックは「10回繰り返す」です.このブロックで囲んだブロックが10回繰り返されます.どのブロックを繰り返したいのか,何回繰り返したいのか考えて,プログラムを改良してください.なお,使わなくなるブロックもあります.



スライドの左側に解答例を示します.だいぶシンプルになりましたよね.
さて,続いて,他の正多角形を描くことを考えましょう.正方形を描くときは,何度回転して何回繰り返すのでしょうか.では正五角形なら?試行錯誤して,スライドの右の表を埋めていき,共通の性質を見出しましょう.
注意深くみると辺の数と回転する角度を掛け算するといつも360になることに気づくと思います.そうすると,正n角形を描くなら,回転する角度は(360/n)度で,繰り返しはn回繰り返すとよいことがわかります.



お手本のプログラムを確認してください.
お手本プログラム:https://scratch.mit.edu/projects/430854294/
プログラムを実行すると「正何角形を描く?」という質問が表示され,入力フォームが表示されます.ここに半角の数字を入力すると,入力した数字の正多角形が描かれます.
新たに利用するブロックは,「あなたの名前は何ですかと聞いて待つ」と「答え」.「〇/〇」のブロックです.
プログラムの利用者(ユーザ)から必要なデータを入力してもらうときには,「あなたの名前は何ですかと聞いて待つ」のブロックを使います.質問内容は書き換えが可能ですので,書き換えて利用しましょう.入力された結果は「答え」という変数に保存されます.「答え」ブロックを使うことによりユーザからの入力に応じたプログラムを作ることができます.
「〇/〇」のブロックは割り算を表します.プログラムの世界では割り算は「÷」ではなく「/」で表されることを覚えておきましょう.計算結果が戻ってきますので,それを用いて処理を進めましょう.
ちょっと難しいですが,どのようなプログラムを作るといいか考えてみてください.



解答例はスライドの左側のようになります.答えが正n角形のnに該当しますので,回転する角度は「360/答え」になり,繰り返しは「答え」回繰り返せばよいことになります.これで正何角形でも描けるようになりました.
では,コンピュータのよさを活用して,正10角形や正20角形を描いてみてください.描いてみるとわかるのですが,1辺の長さは変わりませんから辺の数が増えるとどんどん図形が大きくなり,Scratchの実行画面からはみ出してしまいます.同じように描画にかかる時間も増えてしまいます.そこで,実用的にはスライドの右側のプログラムのように,移動する距離や待ち時間を「答え」で割るとよいです.こうしておけば,図形の大きさも描画にかかる時間もほぼ同じになります.
さて,全部で3つのレベルのプログラムを作りました.児童それぞれのレベルに合わせてどこまで作らせるか決定すれば,個に応じた学習になると考えられます.また最後のプログラムは,児童自身に作らせることも可能ですが,完成したプログラムを配布して実行してもらうだけでも十分よい学習になると考えられます.定規やコンパスでは正100角形を描くことはできませんが,コンピュータなら正確に繰り返しを行い正100角形を描いてくれます.描いてみるとわかりますが正100角形は見た目では円に見えます.正多角形と円につながりができれば,深い学習になると思います.



正多角形を描くプログラムの動きをみて,似たような動きをするものが連想できないでしょうか.遊びで作ったプログラムですが以下のプログラムを実行してみてください.前のプログラムのように正多角形を描いたあと,猫をクリックしてみてください.
プログラム:https://scratch.mit.edu/projects/556409386/
わかりましたか?お掃除ロボットの動きと似てると思いませんか.プログラムの観点でみると,正多角形を描くプログラムはお掃除ロボットの動きを再現するプログラムと同レベルです.正多角形の学習のついでに,お掃除ロボットについても学んでしまいましょう.



まずお手本のプログラムをみてください.
お手本プログラム:https://scratch.mit.edu/projects/556418880/
プログラムを実行するとお掃除ロボットが動き出します.何度か実行するとわかりますが,実行するたびに動き出す方向が異なります.お掃除ロボットはまっすぐ進み,端に着いたら跳ね返ります.またお掃除ロボットが動いた部分は床の色(緑色)に塗られ,ゴミが片付けられたようにみえます.



まずお掃除ロボットの初期設定(位置,向き,大きさの設定)をしましょう.実行するたびに向きが変わるのは,乱数を用いて向きを決めているからです.乱数というのはサイコロの目のように次に出る目が予測できない数のことで,コンピュータ上では乱数によく似た性質をもつ疑似乱数が使われます.Scratchには疑似乱数を発生されるブロックが用意されていて,簡単に乱数を利用することができます.
お手本プログラム:https://scratch.mit.edu/projects/559135579/
新たに使うブロックは「x座標を0,y座標を0にする」と「大きさを100%にする」,「1から10までの乱数」です.
「x座標を0,y座標を0にする」というブロックはスプライトの位置を決めるときに利用するブロックです.指定した座標にスプライトが移動します.ここでは,座標を(x,y)=(0,0)に設定しましょう.
「大きさを100%にする」はスプライトの大きさを変更するためのブロックです.ここでは40%に設定してください.
「1から10までの乱数」は呼び出されると1から10までの数字の1つが返ってくるというブロックです.1から10の範囲は自由に変更することができます.角度は1度から360度までの値が取りうるので,1から360までの乱数を発生させて,その向きに向くようにプログラミングしましょう.



スプライトと背景は以下からダウンロードしてください.
スプライト:お掃除ロボット
背景:背景
これら二つのファイルはそれぞれScratchにプログラムにアップロードしましょう.
右下にある「スプライトを選ぶ」の「スプライトをアップロード」を選んで,お掃除ロボットのスプライトをアップロードしてください.
続けて,やはり右下にある「背景を選ぶ」の「背景をアップロード」から背景のファイルをアップロードしてください.
画面下側の猫のスプライトのところに「ゴミ箱マーク」があるので,それをクリックして,猫のスプライトは消去してください.



お掃除ロボットの初期設定はできたでしょうか.続けて,お掃除ロボットを動かしていきたいと思います.お掃除ロボットは10秒間動き回るのですが,この動作を実現するには時間を測る必要があります.これにはタイマーの機能を使います.



プログラムを実行すると,「お掃除スタート!」の掛け声が1秒表示された後,お掃除ロボットが動き出します.まだ,掃除はできていませんが,部屋の中をお掃除ロボットが移動します.10秒経つとお掃除ロボットは停止し,「お掃除終わり!」と2秒言って,プログラムが終了します.
お手本プログラム:https://scratch.mit.edu/projects/559163165/
新たに使うブロックは「タイマー」,「タイマーをリセット」,「〇まで繰り返す」,「〇>〇」です.
「タイマー」はタイムを知りたいときに利用します.10秒で動きを止めるには,タイマーの値が10より大きくなるまで繰り返すとよいです.
「タイマーをリセット」は,タイマーの値を0にしたいときに利用します.「お掃除スタート!」といった直後にタイマーを0にするとよいです.
「〇まで繰り返す」のブロックは〇に入る条件が満たされるまで,ずっと繰り返すというブロックで,〇の部分には等式や不等式,スペースキーに触れたや〇色に触れたなどのブロックが入ります.
「〇>〇」のブロックは2つの値の大小関係を調べたいときに利用します.今はタイマーの値が10より大きいかどうか調べる必要がありますよね.



ここまでのプログラムを作ることができたでしょうか.これでお掃除ロボットの動きは完成です.あとは,「ペン」を使って,スプライトが移動した部分に色を塗っていけばよいです.あと少しで完成ですね.がんばっていきましょう.



プログラムを実行するとお掃除ロボットが動き出し,掃除を開始します.ロボットが通った部分は掃除されてゴミがなくなります(床と同じ色に塗られます).
お手本プログラム:https://scratch.mit.edu/projects/556418880/
新たに使うブロックは「ペンの太さを1にする」と「ペンの色を〇にする」です.
「ペンの太さを1にする」ブロックを使えば,ペンの太さを変えることができます.ここではペンの太さは70にしてください.
「ペンの色を〇にする」はペンの色を設定するためのブロックです.〇の部分をクリックすると色を選択することができます.色,鮮やかさ,明るさを設定できますが,ここでは床と同じ緑色にしたいので,一番下にあるスポイトのマークをクリックし,床の緑色を吸い取って,同じ色に設定してください.



無事に完成したでしょうか.できあがってみると意外に短いプログラムであることがわかると思います.なお,最後に「すべてを止める」というブロックをつけておくと行儀のよいプログラムになります.
お掃除ロボットは情報技術が暮らしを豊かにしている具体例であるが,普段それを意識している児童はほとんどいないと思われる.このプログラムを作成することにより,お掃除ロボットがプログラムで動いており,豊かな生活が情報技術に支えられていることに気づくことができれば,プログラミング教育のねらいに即した教育内容になると考えている.



正三角形の作図から始め,発展的内容であるお掃除ロボットのプログラムの作成まで,徐々に難しいプログラムにチャレンジしてきました.すべての児童が難しいプログラムを作る必要はなく,お掃除ロボットのプログラムも,完成したプログラムを動かすだけや改造するだけという利用の仕方もある.全員で作るのは初歩的なプログラムにとどめ,高度なプログラムはプログラムが好きな児童にチャレンジさせるようにすることで,個に応じた教育になると考えらえる.
この章の最後として,なぜお掃除ロボットを題材として選んだのかを解説して終わりとします.例えば,見た目は同じだが,1万円のお掃除ロボットと2万円のお掃除ロボットがあったとしたとします.もし目に見えるものにしか価値を見出せなければ迷わず1万円のお掃除ロボットを購入するでしょう.しかし,お掃除ロボットの価値は物体としてのロボットにあるのではなく,掃除ができることにあるため,どちらのロボットがより掃除がしっかりできるかで,どちらを購入するのか判断すべきです.実際1万円のロボットは同じところばかり掃除してちっともきれいにならないのかもしれません.子どもたちがプログラムなどの目に見えないものの価値に気づき,そういうものの見方を身に付けることができたなら,社会を生き抜く上でこれ以上有益なことはないと感じます.プログラミング教育の究極の目的はイノベーションを起こせる人材の育成にあると思っており,イノベーションは新しい価値を発見することであるので,お掃除ロボットは題材としてとても適していると考えています.

プログラミング教育入門(3/3)に続きます