2021年もコロナ禍が継続中。もはやコロナショックといってもいいくらい、生活に、仕事に、経済に多大な影響が出ています。

そんな中、世間では、大きな会場で行われるのが当たり前、人がひしめき合うのが当たり前、という感じだったモーターショーやCES等のショーイベント、学校を始めとして各種の教育やセミナーがオンラインで開催(ウェビナーという新しい言葉が生まれた)されるなど、コロナ前とは形を変えての実施が模索されています。感染を防ぐために従来と同じことができなくなる中、様々な試みが試行されているのは、まさに今、コロナという外敵に対抗して世の中が変わろうとしているということなのだろうなと感じます。人は本当に逞しい。

個人的には、これを機に、現在のVRがさらに進化してVRMMO(注)に準ずる技術開発が進むのではないかな、などとヲタク全開の期待をしてしまったりもするわけですが、間違っても人体に接続機器を埋め込むサイバーパンクのような電脳化や全身サイボーグという方向に進まないことを祈ります。

※注
VR:Virtual Reality。人工的に作られた空間で現実のような体験ができる技術。現在はゴツいVRゴーグルとヘッドフォンの装着により、視覚と聴覚でのみ実用化されている。

VRMMO:Virtual Reality Massively Multiplayer Online。視覚聴覚だけではなく5感すべてで仮想空間に没入し、現実世界と同じような体験ができるとされる空想上の技術。 

さて、話が大幅に逸れましたが、今回のMAAインレクはScratch(スクラッチ)を使ったプログラミング入門が、ウェビナー形式での開催となりました。実施してみて感じたのは、実際に端末を触りながらのウェビナーは、オンラインに向いているということですね。

私が、最初にスクラッチと聞いて、スクラッチ?クジを作るってこと?

…と思ってしまったのは内緒です。 

Scratchとは、れっきとしたプログラミング言語です。

人間がコンピュータに対して行う命令がプログラムなわけですが、コンピュータは、電気信号のオフ/オン(0か1の二進法)しか認識できません。ところが人間は0か1の組み合わせで複雑な命令を作るのは困難です。

プログラミング言語はその橋渡しをするためのもので、人間が理解できる文法でプログラムを作り、それをコンピュータがわかる形に直すことで、コンピュータが命令を実行します。

プログラミング言語は、人間がコンピュータにやってもらいたいことを記した手紙のようなものですね。

ここで、Scratchというプログラミング言語について。

Scratchは、2006年にアメリカのマサチューセッツ工科大学(MIT)のメディアラボで開発されたプログラミング言語で、「文字」で記述するのではなく、あらかじめ用意された命令をブロックのように組み合わせるビジュアルプログラミング言語です。

Scratchという名称は、ディスクジョッキー(DJ)がレコードを手でこするスクラッチングに由来していて、DJが様々な曲を組み合わせたり、そこに様々な効果を付け加えることと関連付けられています。

つまり、DJのようにあらかじめ用意された曲(=ブロック)を組み合わせて加工することで新しい音楽(=プログラム)を創り出すことができるのが、Scratchです。 

Scratchで作れるものは、アニメーション、ゲーム、ストーリー、プレゼンテーションなど画面でキャラクターなどを動かしたり、音を出したりするコンテンツで、Web上で動作するため、パソコンだけではなくスマートフォンやタブレットでも作ることができることが特長の一つになっています。(※一部機種を除く) 

今回のウェビナーは、事務局メンバーである@uehatsuさんが教鞭をとってくださり、説明のためのスライド資料を作っていただくなど、多大な労力をおかけいたしました。
@uehatsuさん、ありがとうございました。

 

さて、Scratchの作成画面はこんな感じになっています。


3VlThd5b940jGCE7SMz8ID6H2jAdi9e1LZaOhdI2

さて、Scratchのウェビナーでは、あらかじめScratchに用意されているネコのデータとブロックを使用して、講師である@uehatsuさんの指導のもと、

    ネコを鳴かせる

    ネコを動かす

    ネコをジャンプさせる

    ネコをジタバタさせる

という4つの動作をプログラミングしていきました。 

Scratchのプログラミングは、「ハットブロック」という「必ず先頭で使う」ブロックの設置から始まります。

こんな形のブロックです。


3hlrz3DuMqrv1ekn8-lioJXjWR5wI9NJTipEUD8W

(ハットブロック「このスプライトが押されたとき」)


ブロックの設置は非常に簡単で、ブロックの一覧(ブロックパレット)から作業領域(コードエリア)の好きな場所にドラッグ&ドロップするだけです。

「ハットブロック」は、「〇〇をしたとき」など、動作をスタートさせるきっかけを指定するブロックです。例えば、「ネコをマウスでクリックしたとき」という指定をすれば、ネコをマウスでクリックすると、画面のネコは、次にプログラムした通りの動きを始めます。

具体的な操作としては、「このスプライトが押されたとき」というブロックを設置します。

「ハットブロック」以外のブロックは、「ハットブロック」で指定した開始の合図の後に指定した動作を行わせるためのものです。

プログラムのスタートは、「ネコをマウスでクリックする」ことですが、その次に何をさせるのか、を指定します。

今回の講座で最初にやったのは、「ネコをマウスでクリックしたら、ニャーと鳴かせる」ことでした。操作としては、ブロックパレットの中に「音」というカテゴリーがあるので、その中に用意されている「ニャーの音を鳴らす」ブロックを、最初に設置した「このスプライトが押されたとき」の下にドラッグ&ドロップします。


qHb71g2xX0ByuSJNrDpNDMWQaI4f9tfjVubEnOeW

(ハットブロック「このスプライトが押されたとき」+「ニャーの音を鳴らす」)


こんな感じでブロックが接続されます。 

配置の仕方は非常に簡単で、先に配置したブロックの下付近にドラッグ&ドロップすれば、先に配置したブロックに勝手に接続してくれます。

接続できるブロックを近づけると、背景が一部灰色に変わって、接続できるかどうかがわかる親切設計です。 

こうして作成したプログラムは、猫のイラストをクリックすると、「ニャー」と音が鳴るものになりました。 

実際のウェビナーでは、この後さらに複雑な処理のブロックを追加しつつ、変数を追加したり、条件設定をしたりと、かなり複雑な動作までプログラミングしていきましたが、それを文字だけで表現するには私の文才が足りていないので、省略します。

このウェビナーで実際に作ったプログラムは、下記URLで共有していますので、よろしければご覧ください。

https://scratch.mit.edu/projects/553953993/

 

このように、Scratchでのプログラムは、最初に「ハットブロック」を設置した後、その下にブロックをどんどん接続していくだけ、という非常に簡単なものです。

これだけ聞くと、大したことはできなさそうに感じるかもしれませんが、例えば用意されているブロックでは自分の考えた動きができない、という場合は、ブロックを自分で新しく作ることもでき、プログラム内で動かすキャラクター(図形もキャラクター)を自分で作れるため、非常に奥が深いものになっています。

単純なツールであるがゆえに、作る人のオリジナリティが出せるわけですね。

実際、Scratchのサイトには、たくさんの人が自分で考え出したオリジナリティあふれる作品が投稿されていますので、興味のある方はご参照ください。

 

今回、Scratchを実際に触ってみて感じたのは、単にブロックを組み合わせるだけではなく、制御や変数、条件の定義などを行うことができるため、プログラムの基本的な考え方や仕組みを学習できるものになっている、ということです。

プログラマーではない方は、仕事でプログラムを作ることはなくても、表計算ソフトで四則演算をしたり、関数を使ったり、場合によってはマクロを作ったりすることがあると思いますが、これらも一種のプログラムといえると思います。Scratchは遊びながらこれらの仕組みや考え方、組み合わせ方を学ぶことができるのです。

私も仕事上、関数を使ってデータ集計をするなど、分析のための集計表をよく作りますが、いつまでも私がやっていたのでは後輩が育たないので、しばしば教育係をやるものの、条件に合うデータのみを集計する、という単純な仕組みを教えるだけでも、結構苦労します。 

よくあるのが、教えながらちゃんと集計できるファイルを作った後、彼ら彼女らは、ファイル名を変えて保存したり、シートの名前を変えたり増やしたり、列や行を追加・削除したりと、まぁ普通に作業をしていくわけですが、やり方によっては結果が「#N/A」や「#VALUE!」になったり、計算結果がおかしく(多い、少ない)なってしまうことが多々あります。

そうすると「壊れた~!どないしょ~!直して~!先月まではちゃんと動いてたのに~!」という事態に陥り、「助けて~〇〇えもん~」とばかりに私のところへやってきます(笑)。

エラーをたどっていくと、単純な原因であることがほとんど。入力されている関数を読めば、すぐに原因と対処がわかるようなものです。

これは、どういう仕組みでその関数が結果を計算しているのか、関数式の参照している先がどこなのか、等をちゃんと理解できていないということなので、再度教えていくわけですが、これがなかなかにエンドレスです(笑えねえ)。 

Scratchは、「ブロックを組み合わせる」という遊びの中で、命令と条件を組み合わせる方法を学べるので、彼ら彼女らにScratchで遊んでもらえれば、少しでも理解ができるようになるのかなあ、会社でやってみようかなあ、と思っている次第。 

なんか、関数の話になったあたりから、ちょっと愚痴みたいでしたね、すみません。 

さて、長々と書いてきたScratchプログラミング入門のインレクレポですが、Scratchを学ぶことで、プログラムの仕組みや考え方の基礎が身につけば、日常の仕事、特に表計算ソフトを扱う事務系の仕事にも、きっと役に立つ!多分!ということをまとめとして、締めたいと思います。

乱筆乱文、失礼いたしました。 

追伸:

やってみたら、純粋に面白かったです。

 

記:katahofuzuki