第71回ICTE情報教育セミナーin東京

共通教科「情報」におけるプログラミングの位置づけ

大阪電気通信大学 兼宗進先生

vol.2 経験のない先生でも使いこなせるプログラミング言語「ドリトル」を授業で活用

私の研究室で作っている「ドリトル」(※)という、日本語で書くプログラム言語を使った授業事例を、高校でプログラミングをどのように教えるのかという例としてご紹介したいと思います。

※1 http://dolittle.eplang.jp/

 

そもそも自分でプログラム言語を作ろうと思ったのは16年ほど前になります。当時、普通の言語を使っていると、プログラムの楽しさというものを伝えるのがなかなか難しい、という気持ちがあり、いいものがないのであれば自分で作ろうと、Javaで開発をしました。

 

そのとき意識していたのは、ドリトルでは難しいプログラムももちろん書けるのですが、「経験のない先生方が、初めて1時間プログラミングで授業をやってみようと考えたときに、ほとんど予習なしに使えるもの」というコンセプトです。そして、先生にも生徒にも、「いい授業だった」「面白かった」という達成感が生まれるものを目標に考えていきました。おかげさまで、いろいろ使ってくださった先生方が、授業の資料を提供してくださっています。「情報科学を楽しく学ぼう」というホームページ(※2)にいくつか公開していますので、ご覧ください。

※2 http://www.eplang.jp/

 

 

こちらはドリトルの画面になります。プログラムを書く画面と実行結果を書く画面があります。これは小樽潮陵高校の生徒さんの作品を実行した画面です。

これから、初めての授業で行なってほしいドリトルの授業例をご説明します。

 

 


 

基本的には1時間目の授業では生徒にはあえて資料を配らずに、「先生が画面で1行打つから、皆さんもマネして同じように1行打ってください」という形で進めていきます。1行打っただけでは画面には何もないですが、実行するとキャラクターが出てきます。これは、カメで、英語ではタートルですが、「先生は例えば『かめた』って名前にするけれども、君たちは好きな名前を付けていいよ」と言うと、子どもたちは自分の名前やニックネームなどの好きな名前を付けます。この段階では、プログラムの説明は一切しません。プログラムを教えようとしても、最初からプログラムに興味を持っている子はクラスにほとんどいませんし、プログラムを学びたい気持ちもゼロですから、全くうまくいきません。そこで、体験させて感じとってもらうことを意識させるようにします。

 

次に、キャラクターが出てきても動かないと面白くないので、「動くボタンを作ってみよう」と生徒に伝えます。ただ、ボタンの絵は出てきますが、押しても動きません。先ほどご説明したように、ここでは先生はプログラムの説明はしなくてもよいのですが、コンピュータというものの性質を説明してほしいのです。「コンピュータというのは、ボタンは作れても、押したらどう動いてほしいか、という君たちの気持ちを汲みとることはできない。だから、押したらとうするのかは教えてあげなければいけないんだよ」ということを説明します。

 

昔のパックマンのように、落ちているものを拾ってくゲームができますが、そこに行くまでだいたい11行ぐらい打つことになります。生徒は、最初はキーボードに慣れていないため、記号の入力が大変です。イコールは何とかなりますが、開きカッコ、閉じカッコなどはなかなか正確に入れられません。行末の句点の「。」を抜かしたりもします。コンピュータの言語には決まった文法がありますので、それに気付いていくのも勉強です。生徒が間違えやすいところは、エラーメッセージとして「プログラムのこの目印の辺りに何か抜けていませんか」といったヒントを、できるだけ出すようにしています。

ドリトルを使えば簡単にアニメーションのようなプログラムができます。とても手軽だと思います。

 

「先生、動きません!」に対応しやすい。授業で使うための配慮

教育に適したプログラム言語は何かということをいろいろ考えてみました。私がCやJavaなどを高校で授業をするとしたら、1人ではクラス全員はとてもさばけません。大学生であっても無理です。なぜかというと、これらの言語で最初の「こんにちは」という1行を出すのに、10行ぐらい入力しなければいけませんが、10行全てを1文字も間違えずに正しく打てる子はいませんので、あちこちで「動きません」「エラーになりました」と手が挙がるわけです。そうすると、TAのような授業アシスタントを走り回らせて対応することが必要になります。

 

高校で先生が1人で授業をする際、先生が走り回っていては授業が進みません。そこでドリトルでは、上から1行ずつ打っていけばよいことにしました。ですから「先生、動きません」となった場合、問題があるのは一番下の行に決まっています。「一番下の行をよく見てごらん」「先生と自分のプログラムを見比べてごらん」あるいは「友達同士で見比べ合ってごらん」とすると、だいたい直ります。

 

もし、どうしても直らない場合は、「一番下の行を全部消して打ち直してごらん」と言えば、たぶん100%直ると思います。授業にプログラムを組み入れるためには、こういう細かなところまで考えた上で、プログラム言語の側にも工夫をする必要があると考えています。

 

このような体験を通して、プログラムの説明は一切しないけれど、「自分たちが普段遊んでいるゲームの裏側は、実はプログラムで書かれているのだな」ということぐらいは、30分ぐらいの実習でつかめるだろうと思います。みなさまも、できれば1時間ぐらい授業で使ってみていただけばと思います。

 

授業でこれ以上のことをやりたい場合は、先ほどのプログラムを発展させる、もしくは全然違うプログラムを作らせる、という形で授業を展開していくことができます。日本文教出版さんから『IT Literacy Scratch・ドリトル編』という本が発売になりましたので、ご覧になっていただければと思います。ドリトルの部分は北海道小樽潮陵高校の佐々木寛先生が執筆を担当しています。

 

チャットのプログラムを作る授業。通信の仕組みやモラルも教える

次に、焼津市立小川中学校の西ヶ谷浩史先生による、ドリトルの機能を使ってLINEのようなチャットのプログラムを作る授業を紹介します。このプログラムは、何か文字を入力して送信ボタンを押すと、隣の画面にその文字が送信される、というものです。この先生の授業の展開が上手だな、と思うのは、コンピュータ教室に生徒が3列に横に並んでいるのですが、その奇数番目の人は送信部分だけを作りなさい、ということでプリントを配って入力させます。偶数番の人には同様に受信プログラムを作らせて、隣同士でメッセージが一方通行で送られるという仕組みをまず作らせます。

 

次の時間には、「先生は何も説明しませんから、送受信できるように隣同士で教え合ってください」と伝えます。そうすると、言われたとおりに打ち込んだときにはあまり理解していなかった生徒も、説明するために理解をする必要が生まれて、隣同士で一生懸命教え合って、両方向の通信ができるプログラムを作り上げていくという展開をしていました。

 

これは中学校の例ですが、高校でやっても意味のある質の高い授業だと思います。

 

この授業では、続いてプログラムの作品制作を行いました。チャットですから文字しか送れないのですが、ボタンを大きくするとか、複数行のメッセージを表示できるようにするとか、いろいろな友達にメッセージを送れるように、「〇〇君に送るボタン」をたくさん作り始める生徒もいて、かなり盛り上がっていました。

 

見ていて面白かったのは、すぐ近くに送信しているので別に確認しなくてもいいはずなのですが、生徒たちはどうしても見たくなるようです。「届いた?」と、みんな席を立ち始めて、離れたところに自分のメッセージが届いているかを確認して回ることで交流が生まれる。みんながうつむいてパソコンの画面しか見ていない授業ではないのが、とても印象的でした。

 

授業では、1対1のチャットを扱った後、列ごとの複数人のグループチャット、教室全体の大規模チャットに発展させました。今回のプログラムでは、接続するサーバーのIPアドレスを同じにすると何人かでやり取りすることができます。複数人になるといろんなことが生まれてきます。1対1では名前を書かなくてもいいですが、グループ内でメッセージを送る時には、自分の名前が自動で書き込まれるようにすると便利です。そうすると、わざと他人の名前を騙っていたずらのメッセージを書き込む子が出てくることがあります。そんなときは先生も心得ていて、それを黙って見ています。そして、授業の最後に、怒るわけでもなく、「やっぱりこういうふうになるから自分のIDやパスワードはちゃんと管理しないといけないね」という話をするわけです。このように、授業でプログラムだけを教えるのはすごくもったいなくて、プログラムを扱いながら、ネットワークのIPアドレスのような通信の仕組みを教えたり、情報のモラルやセキュリティを教えたりするのは、非常に有効ではないかと思いました。

 

ドリトル+ラズベリーパイ+センサーで計測

次にご紹介するのは神奈川県立柏陽高校の間辺広樹先生の授業です。ドリトルは1台5000円ぐらいのラズベリーパイという小型パソコンでも動くので、そこに光や温度などのいろいろなセンサーを付けて、計測した数値を読み取ってグラフを描くという授業を展開されています。これも面白い事例だと思います。

そのあと、実験的にやってもらったのは、よく教科書に載っているJavaScriptでゲームを作ってもらい、作ったゲームのQRコードを作って自分のスマートホンで読み込んで、家に持ち帰って遊べるという仕組みです。そうすると、作った作品を家族や友達に見せられるので、高校生のモチベーションがすごく上がったということです。

 

個人的には、5年後の中学校、そして6年後の高校での展開に向けて、今のままではプログラム教育のための環境はまだ十分ではないと感じておりまして、新しい研究の一環としていろいろ試作をしています。例えば、今ご紹介したドリトルに加えて、CやJavaScriptなどの言語やデータベースなども、インストールを一切不要にしてブラウザだけでプログラムが作れるようにする、というシステムです。授業で使うためには成績評価が必要になりますので、先生がクラス全員の作品を見られるようにする必要があります。その際、例えばアニメーションを作ったら、動かしてみて「よくできてるね」という評価は行えるわけですが、やはり地味ではあってもいろいろな機能を使ってプログラムをきちんと書いている子も救ってあげたいと思いますので、できればプログラムの自動分析機能を付けて、先生方の成績評価の補助ができたら役に立つのではないか、ということで現在開発を進めています。文科省の方も「クラウドによるプログラミング環境の提供が今後重要だ」と言ってくれていますので、これは必ず実現して公開したいと思っています。

 

情報システムのデータベースを知る授業

最後の事例として、大阪の清教学園高校の武本康宏先生、北辻研人先生、田邊則彦先生の授業を紹介します。この学校には、私の研究室からデータベースを学ぶためのシステムを提供しています。大量のデータから条件を指定すると結果を抽出できることや、実習を通してデータベースが何かということがわかったところで、SQLというプログラム言語を使うと1行でいろいろなデータの変換ができるという体験をします。

 

そして最後にクラスで架空コンビニエンスストアを作って、1人1個の商品を登録しました。自分の好きな実際の商品でもいいですし、架空の商品でも構いません。次の回には、先生が作ってくれたお買い物実習用のワークシートを使い、生徒はレジとお客に分かれて実習しました。お客の方は「この商品とこの商品が欲しい」と〇を付けてレジの生徒に渡すと、レジの子は自分のレジプログラムにバーコード番号を入力するか、何人かに渡しておいたバーコードリーダーで実際のレジのようにバーコードを読み取るということを体験してもらいました。

 

この実習では、いくつか工夫した点があります。先生のスクリーンには売れ筋ランキングを出しました。そうすると、自分の商品にみんなが興味を持ってくれてうれしい、という気持ちが芽生えますから、「どんどん買ってよ!」と盛り上がっていきました。そしてレジのシステムは私たちの方で作って提供したものですが、生徒が「レジプログラム」をクリックすると、画面のプログラム編集欄に実際のPHP言語のプログラムが表示されて、そのプログラムを実行するとレジの画面が表示されるようにしています。それによって、レジのシステムの裏にはプログラムが使われていることに否応なく気付くことができます。あまり先生から説明しなくても、大事なことに自分で気付くことができる展開になっています。

 

コンピュータを使わない情報教育=アンプラグドのすすめ

最後に紹介する話題は、これはどちらかといえばプログラムだけでなくて情報科学全般についての話です。コンピュータに向かい合っていると、どうしてもマウスをいじったり、キーボードを叩いたりといった「作業」になってしまい、頭を使って深く考えさせることが難しくなってしまいます。そこで、じっくり課題と向き合うためには、コンピュータから離れましょう、という活動をしています。英語で「アンプラグド」と呼んでいますが、これは要するに「コンセントを引っこ抜け」という意味です。

 

私のニュージーランドの知り合いが、昔からこれをやっていまして、私が日本語に訳して出版しました(『コンピュータを使わない情報教育 コンピュータ・サイエンス・アンプラグド』イーテキスト研究所)。内容としてはこちらのスライドのようなもので、「二進数」「画像表現」「エラー検出」「並べ替え」「プログラミング」など、情報の科学で扱う内容が扱いやすく書かれています。こちらも先ほどご紹介した「情報科学を楽しく学ぼう」のホームページに素材が載っていますので、ぜひご覧になってみてください。

[参考動画]

Sorting Algorithms  

https://www.youtube.com/watch?v=cVMKXKoGu_Y

 

 

最後のまとめです。プログラムを教えるのはすごく不安だ、という方が多いと思いますが、面白い授業をするやり方はいくらでもありますし、全国のいろいろな先生方が面白い授業をやっていらっしゃるので、それらを情報交換するのがよいと感じています。「プログラミングを教えよう」と考えると失敗しますので、「プログラムを使って」ネットワークを教えよう、ロボットを教えよう、ということを考えていただくと、たぶんうまくいくのではないかと思います。

 

[質疑応答]

〇質問者4:まず、プログラミングを生徒に教える上で、なぜ、プログラミングをやるのかということをどうやって伝えたらいいのか、教員側はどういう意識でいたらいいのかっていうことを教えてください。もう一つが、コードエラーが起きないのでしょうか、ということです。コードを書くプログラミングには、それぞれメリットとかデメリットがあると思いますが、今の段階、もしくはこれから先、高校でプログラミングを扱う上で、どんなふうに考えていったらよいのかについて、お考えをお教えください。

 

〇兼宗先生:なぜ、教えるかは意見が分かれるところだと思います。昨日、小学校のプログラミングをどうするかという有識者会議が始まりましたが、文科省から配られた資料にも、今後、整理が必要なポイントとして、真っ先に出てきていました。「学校教育として実施するプログラミングとは」ということが重要だと思います。

 

個人的な意見を言いますと、プログラミングは算数や数学などのいろいろなものに似ています。日常生活では四則演算さえできれば何の支障もなく生きていけますが、やはり方程式や2次関数ぐらいは知っておかないと、将来の進路や可能性が閉ざされてしまいます。そのような「最低限習得すべき基礎」というものに、プログラムは含まれているのだろうということが一つです。もう一つは、携帯電話をはじめとして、いろいろなIT機器に囲まれて生きていくわけですが、そういう機器はコンピュータで、つまりプログラムで動いています。そのような生活の中で、「プログラムはここまではできるけれども、これ以上はできないから人がやった方がいい」「プログラムに任せてもいいけど、こういう危険がある」ということを肌感覚で理解していることが必要ではないかと思います。このようなことを先生が言葉で説明して伝えるのは難しいと思いますが、自分でプログラムを書けば誰でもわかるというのが、私が考えていることです。

 

あと、いずれは小学校でプログラムを学んだ子どもが中学校や高校に進学してきます。そのときに、最初のプログラムはマウスでブロックを置いていく形式のものがよいと思いますが、ずっと同じでよいかはわかりません。小学校でアニメーションを作ったら、中学校でも高校でも同じ言語でアニメーションを作らせるのは難しいでしょう。小学校と同じことはできないとすると、やはり高校は、文字で書くプログラムに変わっていった方がやりやすのかな、いう気もしています。体育などでも、なわとびやサッカーなどいろいろな運動を体験します。プログラムについてもいろいろな言語や書き方で様々なことを体験させてあげるのがよいと考えています。

 

 

〇質問者5:神奈川県は、今年度から3年間、県内で5校がプログラミング教育をしていこうということになりました。私の学校も指定校になっていて、計画書を書くに当たって非常に悩んだのは、何をもってプログラムかという答えがやはりいろいろたくさんあるという部分です。今日のお話を聞いて、自分は今までコンピュータを活用して問題解決を行う授業をやってきたのですが、そこにプログラミングを活用して問題解決を図る、その中で情報モラルの内容を入れていくとかいうことができるということがわかりました。今後、われわれがやっていくのは、プログラミングを道具として、情報活用の実践力や科学的な理解や情報社会に参加する態度といった情報の3要素を身に付けるような授業設計をしていけばいいのかなと思いましたが、ぜひ先生にご意見をいただけたらと思います。

 

〇兼宗先生:考え方としては、全くその通りです。ただ、プログラムに関しては、高校の先生方の間で、こうやればうまくいくというノウハウの共有がまだ十分に進んでないように感じられます。そのような情報がうまくどこかでまとめられて、情報交換をうまく進めれば十分にやっていける内容になると思います。

 

※第71回ICTE情報教育セミナーin東京(2016年5月14日(土)@早稲田大学)での講演