Scratch(スクラッチ)とは?子供向けプログラミング言語で大人がゲームを作ってみた

テキスト: 平田提

Scratch(スクラッチ)とは、子供向けのプログラミング言語・ツールのこと。
MIT(マサチューセッツ工科大学)メディアラボ・ライフロングキンダーガーテングループが開発し、現在では世界各国のプログラミング教育の現場で利用されています。

今回はなぜScratchがここまでSTEAM教育(※)の現場で利用されているのか知るべく、文系の大人である私がScratchでゲームを作って学んでみることにしました。

プログラミングについて、知らない人はこちらの記事を参考にしてみてください。

※STEAM教育:Science(科学)、 Technology(技術)、 Engineering(工学)、Mathematics(数学)、Arts(アートまたはリベラルアーツ)を統合した教育。

Scratchとは?子供向けのプログラミング言語

Scratchとは?

Scratchは、主に8~16才の子供向けに開発された無料のプログラミング言語・ツール。PCやタブレットからブラウザ上で動かせるだけでなく、ソフトをダウンロードしてインストールすればオフライン環境でも利用が可能です。
現在は世界150カ国以上のユーザーに使われており、日本語でも利用できます。

Scratchの特徴(1)「コーディング不要」

プログラミングとは、コンピュータが動くためのプログラム(指示書き)を作ること全般を指します。プログラムはコンピュータが理解できる「プログラミング言語」の文法に従って書かれる必要があり、この「プログラミング言語で書く」ことを「コーディング」といいます。

プログラムが動くかどうかを確かめるには、ほとんどの場合コーディングが必要です。しかしScratchはコーディング不要でプログラミングが学べるように作られています。Web画面上の「ブロック」をドラッグ&ドロップして組み合わせるだけでインタラクティブなプロジェクト(ストーリーやゲーム)を作ることができます。

Scratch画面

▲左側のメニューに並んでいるのがブロック。これを中央のエリアにドラッグ&ドロップして、パズルのように組み合わせるとプログラムが動く。右側のメニューではプログラムのプレビューが確認でき、「スプライト」(画面では「太陽」)に動きや条件を指定できる。

Scratchの特徴(2)「プロジェクトをシェア」

Scratchは「おしゃべりするアニメを作ろう」「ピンポンゲームを作ろう」など、チュートリアルが充実しています。説明動画に沿ってブロックを組み合わせていけば簡単にプロジェクトを作ることができるため、まったくの素人であっても達成感を得られ、プログラミングにはまっていくのです。開発者によれば子供が「コードを学ぶ」「コードで学ぶ」が設計思想にあるそう(『ライフロング・キンダーガーテン 創造的思考力を育む4つの原則』より)。

作成したプロジェクトは公開/非公開が選べ、公開されたものは他のユーザーも見たり遊べたりする他、そのプロジェクトから「リミックス」して別のバージョンを作る機能もあります。

プロジェクトをシェア

次は実際にどんな画面でプロジェクトが作られるのか見てみましょう。

Scratchでブロック崩しゲームを作ってみた

「習うより慣れよ」ということで、実際にScratchでブロック崩しゲームを作ってみました。題して「Galaxy basketball」です。

Scratchでブロック崩しゲームを作ってみた

URL: https://scratch.mit.edu/projects/402232744

※こういった形でURLや埋め込みコードでWebサイト上でもシェアできます。

1.ピンボールゲームをチュートリアルに沿ってつくる

今回は「ピンポンゲームを作ろう」のチュートリアルに沿ってつくっていきました。
最初は「basketball」のスプライト(キャラクターやオブジェクト)に対して以下のようにブロックを組み合わせていきます。
そして動作の指示を作っていきます。
「旗が押されたとき(ゲームの開始されたとき)」「45度に(斜めに)向ける」「ずっと」「15歩ずつ(の速さで)動かす」「もし端についたら、跳ね返る」……
こうすると常にバスケットボールが画面の中を跳ね続けるようになるのです。

プログラミング画面

2.スプライトとゲーム条件をアレンジ

続いて「パドル(棒)」にbasketballが当たったら「180度回す(跳ね返す)」「得点を1ずつ変える」などとブロックを追加します。
ただボールを跳ねさせているだけだと終わりが見えないので、下記の条件に当てはまるとゲームが終了するように設定しました。こうなると、ピンボールゲームからブロック崩しゲームに変化しています。
・28個のブロック(スプライト)を全部消すとクリア
・得点が0になるとゲームオーバー
・パドルでボールを打つ度に得点が1点加算
・「ライン(線)」のスプライトにボールを落とすと1点減算
・「starfish(ヒトデ)」のスプライトに当たると得点が5点増えるが、ボールの速度も「2」アップ
・「goalie(キーパー)」のスプライトに当たると得点が20点減り、ボール速度も「10」アップ

ブロックくずしの設計

いきなりゲームオーバーになりにくいように、ゲーム開始時点のパドルの位置(座標)も決めました。
以上の内容でゲームが完成。所要時間はだいたい1~2時間だったかと思います。作成中にところどころで出てきた疑問は逐一ネットで検索し、なんとか仕上げられました。
ブロック崩しについてはこちらのページを参考にさせていただきました。「クローン」という機能でブロックのスプライトを一定間隔で増やして表示させる仕組みです。

Scratchでプログラミングを試して学んだこと「数学は大事」

プログラミングに数学は大事

今回、Scratchで簡単なものながらゲームをつくってみて感じたのは「プログラミングには数学のセンスがとても大事」ということ。

まとめ(1)条件文は数式に置き換えられる

今回のゲームではどんどん難易度を上げていきたく、特定の条件でボールの速度が変わるようにしたい、と考えました。
最初は「得点が10の倍数になったら速くなる」にしようと思ったのですが、なかなか実現できず「特定のスプライトに触れたとき減点」に変更。
あとあと調べてみると「xの倍数=yをxで割ったときの余りが0」と倍数は計算式で表現できることを知りました。条件文を数式にパッと置き換えられるかどうかは、数学のセンスと経験がいるな、と感じました。文系の私にはなかなか難しかったですね。

まとめ(2)便利な変数は方程式の「xyz」

プログラミング言語を学んでいるとたびたび出てくるのが「変数(へんすう)」。Scratchでは変数を利用するととても便利で、今回のゲームではブロック崩しの描画や「得点」「速度」「count(ブロックの残り数)」のところで使っています。

変数

「変数『得点』を宣言します」「得点の初期値は0です」「もしヒトデに当たったら得点が5増えます」「countが0になったらゲーム終了です」……とこのゲームのプログラムでは書いているわけですが、要は変数って義務教育の数学で習う「方程式・xyz」のことだ……と、この原稿を書いて、今更ながらに気が付きました(笑)。

得点や速度、countはゲームの進行ごとに増えたり減ったり変化。その変数に数値が「代入」されていっているんですね。

まとめ(3)プログラムって数学の証明問題みたいだ

「変数y=1のとき変数xは2である」「x=2が真(false)なら~」などプログラミングに使われる言葉の多くは数学と共通しています。
「=」「+」「*」などの演算子も使用。プログラミングは、数学の証明問題のように、ある意味「解」をコンピュータに求めさせる文を書いているかのようだな、と感じました。
文章を数式に置き換えて論を展開するセンスは、受験以降も、ロジカルシンキング、マーケティングなどビジネスの現場でも役立つものだと思います。Scratchでプログラミングを学びつつ遊んでいくと、論理的思考力も自然と鍛えられていくように思います。

Scratchはプログラミング学習の入口に最適な設計がされている

Scratchで初めてゲームをつくってみて、最初はただボールが跳ねるだけでも面白かったんですが、いじくるうちに「もっと面白いものをつくりたい」と思うようになりました。そして子供の頃から自分が楽しく遊んでいたゲームは、今自分がやったレベルを遥かに凌駕するバランス調整の賜物だったのだ……とも。
こうして「面白いゲームを作りたい」「好きなゲームの面白さを分析する」「どうすれば実現できるか考える」「コードをいじる」というステップが楽しくできるようにScratchはデザインされています。トライアンドエラーがやりやすい仕組みが、Scratchがプログラミング教育現場に採用されている理由なのではと思いました。

気になった方はぜひScratchを試してみてはいかがでしょうか。


プログラミングを学ぶなら、まずは快適なネット環境を整えましょう!
関西在住ならeo光がおすすめ!おトクなキャンペーンはこちらから。

超高速インターネット 速さで選ぶならeo光

※上記掲載の情報は、取材当時のものです。掲載日以降に内容が変更される場合がございますので、あらかじめご了承ください。

関連記事