事例88

ソフトウェア開発環境(Visual Studio)を活用したプログラミングによる問題解決

~中学校技術・家庭科の発展学習 筑波大学附属駒場中学校の「テーマ学習」

次期学習指導要領でプログラミングが必修化されるにあたっては、生徒の能力レベルや学校のICT環境に合わせて、どのような言語を使って目標をどこに置くのか、という各校独自の授業設計が求められます。さらに最近は、家庭やプログラミング教室などでプログラミングの経験のある人も増えつつあり、全員が初学者という前提で授業を行うことが難しくなっています。そのため、個々の生徒のレベルや進度にある程度対応できるような配慮も必要です。

 

プログラミングは外国語学習と同様に、興味や関心を持つ生徒は自分でどんどん学びを深めていくことができます。また、プログラムを書くスキル自体に加えて、論理的に問題を解決したり効率的にものごとを動かしたりするための手順を考えるという思考の方法を学ぶ場でもあります。

 

今回は、全国有数の進学校の筑波大学附属駒場中学の「テーマ学習」(全17時間)で行われた、「ソフトウェア開発環境(Visual Studio)を活用したプログラミングによる問題解決」の授業を見学し、担当の渡邉隆昌先生に、学ぶ力の高い生徒に対して、パソコン部のような部活ではなく、授業の場でどのような活動が可能なのかについてお話をうかがいました。

 

「総合的な学習の時間」でプログラミングの発展学習

左から 渡邉先生、杉田さん
左から 渡邉先生、杉田さん

筑波大学附属駒場中学校の中学3年「テーマ学習」は、「総合的な学習の時間」の一環として行われます。授業は年間で17時間、土曜日に2~4時間ずつまとめて実施されます。この「ソフトウェア開発環境(Visual Studio)を活用したプログラミングによる問題解決」は文部科学省の「情報教育推進校(IE-School)」(※)に採択されています。授業は渡邉先生が主導し、プログラミングの専門家である杉田和久氏((有)テック・ステート取締役)が技術面から包括的な支援を行うとともに、場面ごとにプロの仕事の現場のエピソード等を紹介しています。

 

※平成28年度 情報通信技術を活用した教育振興事業「情報教育推進校(IE-School)調査研究」、

   同29年度 次世代の教育情報化推進事業「情報教育の推進等に関する調査研究」

 

「テーマ学習」は中学3年生の生徒(123名)が8つのテーマから興味のあるものを選択します。この授業は、機材の数の関係で、応募者30名(第2希望を含めると40名以上)から選考された10名で行われました。この10人は、プログラミングに興味はありますが、ほぼ初学者です。

授業は、全員にSurface Proを貸与し、タブレット型PCを最大限に活用する形で行われました。

第1・2時限で、Microsoft Office365やSurface Pro、SharePoint、Visual Studio(以下VS)などの基本的な使い方、Visual Basic(以下VB)での簡単なプログラムの書き方を学びます。

 

 

その後、VBを使って

・『実機(ライントレースカー)によるプログラミング学習』(第3~9時限)

・『ゲームを開発・改善する学習』(第10~13時限)

・『VBA(Visual Basic for Applications)を活用した文書処理の効率化の学習』(第14~17時限)

の三つの大きなテーマを通して、プログラミング的な思考による問題解決へのアプローチの方法を身に付けることを目指します。

 

写真提供 渡邉先生
写真提供 渡邉先生

また、この授業ではSharePointで授業のポータルサイトを構築し、ハンドアウトなどの文書の共有や、掲示板機能で感想やアンケートの記入などを行いました。生徒達は、クラスや授業、部活、文化祭などの活動でG-Suite for EducationやGoogle Classroomなど様々なファイルや情報の共有サービスを使いこなしていますが、今回はMicrosoft Office365のサービスであるSharePointを経験しました。

 

 

 

※今回は、『着陸ゲームを開発・改善する学習』(第10・11時限)と、『VBAを活用する学習』(第14~17時限)を見学しました。『実機(ライントレースカー)によるプログラミング学習』とカリキュラム全体の流れについては、渡邉先生のインタビューの中で詳しく説明していただきます。

 

様々なデータを処理し、コンピュータを限界まで使いこなすプログラムへの挑戦 ~物理パラメータとアルゴリズムの改良に着目した着陸ゲームの開発

 (2017年11月18日・筑波大学附属駒場中・高等学校教育研究会)

 

前回の授業までで、生徒達はVBを使ったライントレースカーの操縦プログラム作りを通して順次・分岐・反復の処理の活用方法を学んできました。今回はその次の段階として、画面完結のゲーム作りを行います。

 

題材は「着陸ゲーム」です。スタートボタンをクリックすることで着陸船が降下し始め、点火ボタンを押すと着陸船が減速(上昇)します。タイミングを見ながら点火ボタンを押し、滑らかに着地させることを目指します。うまく着地できると、スコアが表示されますが、失敗すると爆発した着陸船が出てきて、ゲームオーバーとなります。このゲームのもとになるプログラムは、杉田さんがVBで作成したものです。

 

ゲームで使われている降下と上昇は、物理的なモデルに基づいて高度や位置を正確に算出しているのではなく、適当な係数を用いて、画面の中での動きの収まり具合で決定しています。また、エンジンが「点火」された場合の推進力も、同様に画面の中で決定します。これらの変数(物理パラメータ)を変更することで、ゲームの難易度が変わり、自分だけのゲームを開発することが可能になります。

 

また、マウスによる入力が含まれるので、イベントドリブン型のプログラムの特徴である「Timer」の概念も生まれます。さらに、障害物を入れたり、スコアに燃費をプラスしたり、といった工夫も可能になります。

 

まずは、このゲームで実際に遊んでみるところから始まります。単純なゲームですが、最初はなかなか滑らかな着地ができません。何とか着地ができると、今度はハイスコアの出し方の工夫が始まります。ほぼ全員が「ゲームは大好き」というだけあって、夢中になって取り組んでいます。単に逆噴射をかけるだけでなく、落下までのタイミングをとるために、いったん最大限に上昇させたり、Surfaceの画面を縦にして距離をかせいだり、と様々な攻略法でスコアの出方を確認し、条件を変えることでゲームがより複雑になっていくことを実感していました。

 

その後は、ハンドアウトの実践課題に従って、プログラムを書いていきます。渡邉先生がVBの画面をスクリーンに映し、手順を順番に説明していきます。生徒達の手元には説明資料のコピーも渡されているので、スクリーンは見ないで自分で進めている人もいます。要所要所で渡邉先生から、Timerの意味や変数の決め方などの説明が入ります。また杉田さんからは、効率のよいプログラムを書くための注意点や、動きを面白くするための工夫など、現場の視点からエピソードやコツが紹介されました。

 

コードの意味を考えながら打つ=プログラムを機械と対話するための「言語」ととらえる

プログラムは、サンプルコードをコピーするのではなく1行ずつ打っていきます。コードをただ書き写すだけでなく、渡邉先生や杉田さんがポイントとなる語や、行ごと・ブロックごとの意味を説明されるので、自然にプログラムを言語としてとらえて書いていくことになります。大文字・小文字の違いやスペル違い、スペースの抜けもエラーになることはわかっているため、慎重に取り組んでいます。話を聞いた生徒からも、「間違った言葉だと思い通りに動いてくれないのは、人間と同じだと思います」という声が聞かれました。

 

授業のペースはかなり速く感じられましたが、生徒達はエラーが出ても自分で資料を見直したり、周りの人に聞いたりしながら、確実についてきています。10行ほどのスモールステップで進んでいくので修正がしやすいことに加えて、生徒自身がエラーの時にどこをチェックしたらよいかということを理解しているため、自分達で間違いを見つけて直していくことができます。

 

授業の最後に、今回作ったゲームのプログラムを自分なりに工夫するとしたらどうするかを話し合いました。「できるだけ(逆噴射の)エンジンを点火させない方がハイスコアになるようにする」「効果音をつけたい」「点火ボタンの押し過ぎは燃料切れになるようにする」など様々なアイデアが紹介され、次回の授業で実現を目指すことになりました。

 

Visual Basic for Applicationsを活用して文書処理を効率化する~校外学習報告書原稿の編集作業に応用

(2018年1月20日)

ライントレースカーの制御→ゲームの開発と進んできたテーマ学習の最後の課題が、Visual Basic for Applications(以下:VBA)を活用した文書処理の効率化です。この授業では、Wordの文書の文字置換をマクロで実行する手法を学びました。

 

マクロは、よく繰り返す操作を自動化する機能として、Excelで使われることが一般的ですが、生徒達はまだマクロを必要とするほどExcelを使い慣れてはいません。一方で、筑波大学附属駒場中学では、2年生で東京、3年生で東北の「地域研究」(校外学習)を行い、全員のレポートをまとめた約80ページの報告書を作成しています。この報告書用の個々のデータを瞬時に結合したり、表記を揃えたり、目次を作成したり、という作業の効率化を図るための手段としてマクロを学びながら、これがさらにどんな時に応用できるかを考えよう、というのがこの授業の目標です。

 

この授業も、約20のステップの実践課題に沿って進めます。平易な計算問題から入って、文字装飾の変更や文字置換など、それぞれ約10行のコードで書けるものなので、エラーが出ても比較的修正しやすいようです。生徒の中には、自分のPCを持ち込んで、貸与のSurfaceとデュアルスクリーン環境で作業を進め、インターネットでサンプルコードを検索している人もいます。また、今回の課題では、ハンドアウトを先読みして、自分のペースで進めている人も数人いました。

 

この授業でも、打ち込み済みのコードをコピーするのでなく、自分達で一つずつ打っていきます。そして結果を確認し、渡邉先生と杉田さんからそれぞれ解説が入ります。「着陸ゲーム」の時と同様に、言語仕様から入るのでなく、打ち込んで動作を確認させた後に最低限の解説を加えるという形です。

 

プログラムがうまく動くたびに、教室のあちこちから「おお!」という声が漏れていました。仕組みの理解に成功体験が加わって、意欲が高まっていることがわかります。この日は、途中休憩をはさんで、4時間ほぼぶっ続けの授業であったにもかかわらず、席を立ったり休みを取ったりする人はほとんどなく、最後まで集中が途切れることはありませんでした。

 

[受講生の感想] 考える力の高い生徒が初めて出会う思考の経験としてのプログラミングの意味

「ふだん自分が使っているソフトの仕組みがわかるのが面白いと思いました。例えば、僕がよく使うIllustratorは、WordやExcelとは別物のようですが、根本では考え方がつながっていることがわかりました。ソフトを使うためにも、プログラミングを学ぶことの必要性を実感しました。

 

授業でやったものの中でいちばん面白かったのは、やはりライントレースカーを思い通りに動かせたことです」。

 

 

「プログラミングが面白いのは、自分の工夫次第で動きを変えられることです。ライントレースカーではなかなか工夫するところまでいけなかったですが、着陸ゲームを改造した時は、けっこう自分の思ったことができました。他の友達がやっていることを見て、『こんなこともできるのか!』という感動もあり、それがもっとやりたいという気持ちにつながったと思います。プログラミング自体を仕事にするとは思いませんが、『こういう機能がほしい』と思ったり頼まれたりしたら、ある程度できるようになるかも、という手応えはありました」。

 

「プログラミングをやることで、思考そのものが変わったとは思わないですが、考える姿勢は多少変化しました。数学であれば、今までは思い込むと自分で間違いを見つけることが難しかったのですが、論理的に探していくことが多少はできるようになったと思います。ふだん試行錯誤で何かを作っていく場面というは実はほとんどないので、それができたのはよかったと思います」。

 

 

「この講座と並行して、今C++を自分で勉強しています。プログラミングの醍醐味は、やはり自分が期待した通りの動きができたことの喜びです。デバッグも、いったん休憩して頭を冷やすとちゃんとできるようになるので、さほど苦になりません。

 

プログラミングの基本は順次、条件分岐、ループの3つですが、今まで問題を解く時に無意識にやっていたことが、この場面でこの回数で…という形で明確になってきたと感じます。これは、これからもっと高度な問題を解く時にも使えると思います。また、数学の問題、例えばΣも、プログラミングのコンセプトを通すと意味がわかりやすくなるものがあることがわかりました。

 

いちばん印象に残っているのは1回目の授業です。今までまったくやったことがなかったところから、『こんなことができる』という0から1の進歩はすごく大きかったと思います」。

 

[渡邉先生のお話] 「次の学び」につながる効率的な思考・手順を身に付けるために

「テーマ学習」のカリキュラム設計をされた、渡邉隆昌先生にお話をうかがいました。

 

■今回の一連のカリキュラムをどのように設計されたのか、お教えください。

プログラミングで重要なのは、アルゴリズムと変数だと思います。ですから、あくまで中学校の技術科で行う論理回路とアセンブリ言語の学習の延長としてどういうものが望ましいか、という観点で授業を組みました。

 

カリキュラムの三つの大きな柱として、最初にライントレースカーの計測・制御の学習を行い、次にゲームの開発、最後にVBAで効率化の手法を学ぶということになっています。

 

ライントレースカーを最初に行うのは、生徒が視覚的に理解しやすく、また動きがあるため、スタート時の生徒が興味や関心を持ちやすいからです。この活動で、現実にあるものを命令通りに動かすというプログラムを作るために、順次・分岐・反復の3つの処理を活用し、プログラムの基礎・基本を学びます。

 

次の着陸ゲームでは、画面の中で動きが収まるように変数(物理パラメータ)やアルゴリズムを変更していきます。実機のようにリアルなものを排除して、頭で考えて問題を解決していくプログラムを作る、現実から仮想への転換ということになります。ゲームを教材にするのは、彼らに「プログラミングはそもそも面白いものだ」ということを感じさせたい、という思いがあります。プログラミングの学習は、どうしても計算から入ることになりますが、それだけでは学習としては浅い。実用性や社会への貢献というよりも、生徒達の発想を刺激し、プログラミングの視野を広げるために、ゲームは一つの切り込み方であると思います。

 

そして、最後のVBAを使った文書処理は、ものを動かすのではなく、命令によって対象を変化させるものです。ふだんの作業が効率化できることがわかり、より実用的になります。単純なプログラムであっても、自分で記述して実行することで、より実感が伴ったことでしょう。VBAはこれまで学んできたVBがもとになっているため、生徒は学びやすいと思います。プログラミングの目的は、単純な作業を

効率化することですが、スマートに・楽をして作業をするということは、本校の生徒の性向にも合っていると思います。

 

■技術・家庭科の授業内での『計測・制御』ではどのような授業をされていますか。

テーマ学習とほぼ同時期の技術・家庭科で「情報の技術」の単元を行い、そこで論理回路をみっちり学んでいます。ディジタルIC実験ボードを使って、いわゆる「0・1の世界観」による二進数演算の仕組みと、配線がどのようにつながるかを学びます。これらの内容は、プログラミングの1行ごとの意味を考えることにもつながります。

 

その後、ニーモニックを使って、4bitコンピュータの簡単なプログラムを作ります。LEDの点滅、7セグメントによる数字の表示、ブザー音など、できることは単純ですが、実は難易度としては高級言語(テーマ学習)の学習よりも難しく、また情報科学的な側面を持つ内容です。生徒達は毎年よく考えて、面白い作品を作ってきます。

 

アセンブリ言語を学んだあと、BASICを用いた高級言語の学習に移ります。具体的には、数当てゲームを題材としたプログラミングを行って、少しずつプログラムを改良する、考え方を学びます。最後にBASICで、「マウスで線を引く」ようなプログラムを実行させています。「マウスで線を引く」プログラムでも、工夫されたものになっていることに気付きます。最終的にはソフトウェアを活用する時の見方・考え方が変わると思います。

 

今回のテーマ学習は、この基礎、前提があった上での話で、ソフトウェア開発環境(Visual Studio)ではさらにこんなことができる、という位置付けになります。中学校で論理回路とアセンブリ言語をきちんと学ぶことは、非常に意味があると確信しています。

 

■ライントレースカーも、先生方が開発されたものなのですね。

計測・制御の教材としてのライントレースカーには、優れたものがいろいろありますが、私達のねらいはあくまでプログラミング学習ですので、それ以外の部分、例えば車体になど関しては、極力生徒に考えさせない、工夫させないようにしたいということがありました。そのため機械の設計を丁寧に行い、正確に動作するものを製作しています。

 

写真提供 渡邉先生
写真提供 渡邉先生

また、従来のライントレースカーはビジュアルなプログラム環境で動かすものが多いのですが、我々はVisual Studioという、無償の、しかもプロも使う開発環境を活用するということがベースにありましたので、それを具現化するために約10年前から杉田さんや東京農業大学の市川道和先生、日本マイクロソフトの冨沢高明さん、共立電子産業の長者原亨さんと一緒に開発してきました。写真は現在の無線仕様のもので、4代目になります。

 

写真提供 渡邉先生
写真提供 渡邉先生

テーマ学習では10人で行いましたが、技術科の授業で41人のクラスで一人1台動かしてみた時も、問題なくできました。ただし、この時はプログラムを一つずつ打つのではなく、プログラムを貼り付ける形で行いました。プログラムの骨格を提示して、「ここを変えてみよう」という形です。

 

■言語としてVBを使われているのはなぜでしょうか。

VBは教育向けのプログラミング言語で、中学3年生にとって高級言語の入門として使いやすいからです。また、Microsoft Officeと互換性があるので、 Excelや Wordを使うことが多い高校の共通教科情報科へのカリキュラムの引き継ぎがしやすいと思います。さらに、VBAを経験することで、 Excelや Wordなど、学校や生徒に身近なアプリケーションの上でもプログラミングが使えることが実感できます。

 

VBは全角と半角、スペースの有無などでエラーが出やすいものですが、それを修正していくのも学びの一つで、そういった粘り強さは必要だと思います。

 

■今回のカリキュラムの目標はどのように設定されましたか。

文化祭の各クラスのポスター。様々なソフトでデザインしています
文化祭の各クラスのポスター。様々なソフトでデザインしています

今回のカリキュラムでは、ブログラムの書き方よりも、教養教育の一環として、どういうアプローチで結果に迫るかという、より数学的な思考・考え方の学習にポイントを置きました。スキルではなく、考え方、何に使えるかということを考えさせたかったのです。

 

また、VBAの文書処理のところでもお話ししたように、中学校では2年生で東京、3年生で東北地方の地域研究が課されています。報告書のための文書処理だけでなく、クラウドを活用してスケジュール調整をしたり、作業の分担をしたりということも生徒自身が行っています。同様に、毎年行われる文化祭でもこのクラウド環境を最大限使用しています。このように、総合的な学習の時間や特別活動の中で積み上げてきた中学1年・2年の情報活用能力と、同じく積み上げてきたサイエンス・テクノロジーの素地(技術科における科学的な内容)が交わる時期に「中学3年生:情報に関する技術」を位置付けています。中学1年、2年で積み上げてきた情報活用能力は、情報の科学的理解への架け橋となり、その後さらに情報活用能力の視野を広げると考えています。彼らが学力的にも活動面でも本当の意味で飛躍的に伸びるのは、高校2年・3年の時です。中学校段階の役割は、そこまでの土台作りだと思います。

 

 

■御校の生徒の特長はどんなところでしょうか。また、それに合わせて今回のプログラムで工夫されたことはありますか。

本校の生徒は、他人の意見をすごくよく聞きます。他の人の考え方を知って次につなげようとする態度が身に付いているのです。その意味では、プログラミングは幾何の授業と親和性が高いと思います。幾何にはいろいろなアプローチがあるので、ふだんの数学の授業でも、誰かが解き方を一つ出すと、「いやいや、もっと他の方法があるだろう」とワイワイ議論をしています。

 

プログラムも、コード自体は個人で書きますが、他の人が書いたものを見て、改善したり、もっといい書き方を知ったりということにつながります。もともと数学が強い生徒が多い学校ですから、プログラミングも幾何に近いことがわかってくれたらよいと思っています。

 

また、本校の生徒の特長は、この授業に限らずとにかく「内容ありき」です。つまらない内容は見向きもしないですが、逆に「あ、すごい、面白い」と思うと、どんなに難しくても食いついてきます。

 

先ほどの技術科の4bitコンピュータのプログラミングにしても、彼らにとっては知的な面白い遊びなのですね。ですから、彼らの興味を深めていくために、授業の流れを大事にして、原理・原則の部分はおろそかにしないようにしています。そしてこれは私の進め方ですが、皆があまり簡単にできてしまうような課題よりも、全体の10%くらいの人がかなり難しいと感じるくらいの方が、この学校の生徒にはちょうどよいのではないか、と感じています。

 

■高校の情報科の授業に活かせる内容にはどのようなものがあるでしょうか。

先ほども言いましたように、論理回路とアセンブリ言語は、中学校でやっておくべきだと思います。高級言語の学習は、そこがもとになるからです。

 

ゲーム作りは、プログラミング学習にとてもフィットすると思うので、高校でもぜひやるべきだと思っています。使用する言語についてはVBでなくても良いでしょう。入りやすさの点からVBで行いましたが、プログラムの構造やアルゴリズムの基本が理解できれば、C#やJavaなどのプログラム言語に繋げることもできます。VBAについては中学技術科よりも、高校の情報科の授業に組み込む方が向いていると感じました。今回は、中学生段階ではExcelの機能を十分に使いこなせていないという理由からWordVBAで行いました。ただ、それはそれで役に立ちますが、やはりVBAが本当の意味で威力を発揮するのはExcelです。高校ではもう少し長いスパンの中でWord、ExcelでVBAを扱って、最後にはAccessまで持っていける形が理想的だと考えています。

 

[取材を終えて]

2回の授業見学で、生徒の皆さんの集中力と持続力には圧倒される思いでした。今回の受講生は、プログラミングはほぼ初学者で、エラーもたびたび出ていたようでしたが、4時間の連続授業でも飽きたり集中が途切れたりする人は皆無で、自分でバグを見つけて解決できています。ロジックを直感で学び取ることができる一方で、コツコツと積み上げて学ぶことに対しても、良い意味の貪欲さが感じられました。

 

この授業は、渡邉先生と杉田さんのすばらしいチームティーチングによって、プログラムを書く作業が思考のどのステップにつながっているのか、ということを感じ取らせることができていました。目の前の作業の説明だけでなく、全体の中での位置付けや、プロの現場でのTIPSなど、高度化を意識した言葉かけが随時行われ、プログラミングがどのような場面に応用可能か、ということを考えられるきっかけとなっていました。

 

筑波大学附属駒場中学・高校の「パーソナルコンピュータ研究部」(パ研)は情報オリンピックの上位入賞者を輩出し、中学生でもC++などを駆使してゲームのプログラムを書いている人もいます(渡邉先生は「パ研」の顧問です)。そういった飛びぬけた力を持つ生徒もいる中学校3年生の通常授業の中で、計測・制御で何をどこまで学ぶのか、そしてそれを学校全体カリキュラムの中にどのように位置付けるのかを明確に示した、ハイエンドの授業設計を見せていただきました。