• 戸田市の地域課題をハッキングで解決する!?

はじめに

Code for TODA 事務局 山中邦久

Code for TODAの活動は、子供たちのプログラミング学習推進、マッピングで街を知る、ITの力で防災やまちづくりのアイデア、ITの力で行政と連携といった目的で行われています。
その中で、現在、戸田市のオープンデータ活用でのアプリ開発にトライする「アイデアソン」「ハッカソン」に取り組み、昨年度は経産省関連で既にご案内のようなイベントを実施してきました。また、今年も秋に先行自治体として戸田市と協働して「ハッカソン」を企画しています。
そこで、まだまだ定着していないこの言葉を一般の市民の皆様にもご理解いただけるようにという意図と、「市民のアイデアソン・ハッカソン」という言葉の考え方といった新しい取り組みへ向けての方向性を一緒に考えられればと思います。まだコンセンサスを得られたものではありませんので、ご意見をお寄せいただければと思います。より面白い街づくりのために参考になれば幸いです。

※以前の「子供のためのプログラミング学習」については、この記事の最後に移動しています。

「市民のアイデアソン」

アイデアソンとは、アイデア(Idea)とマラソン(Marathon) を合わせた造語のことで、その流れなどは12月の「アイデアソン開催について」の項で説明していますので省きますが、元々は出版やソフト開発、製造などでも広がってきた「プロシューマ―」(プロダクト=作る側+コンシュウマー=消費者 が共同してアイデアを出す)型のモノづくりの流れで、プログラマーやSEといった同質の人間たちの発想の限界を超える、多種多様な意見や発想を大事にしようという動きだと思います。
むしろ、IT業界では会社内で企画のプレゼンを、その場でプロトタイプを作り上げる「ハッカソン」(<hack(ハック)+marathon(マラソン)からの造語>ソフトウエア開発者が、一定期間集中的にプログラムの開発やサービスの考案するやり方)が先にあったのだろうと思います。
ですから、社内の開発環境やアイデアから抽出された「要求定義」などがしっかりしていて具体的な成果も目に見えることができました。

しかし、市民活動としての「アイデアソン」は、もっと広い、多様な意見を集めるワークショップとして広まっていて、そのクロージングをどう製品や成果物に作りこむか。市民活動としてのアイデアソンからハッカソンへの流れはいまひとつ確立されているとは言い難いのではないでしょうか。
ですから、「市民のアイデアソン」はハッカソンに結び付かなくとも、つまりアイデアソンの完成度はそれほど高くなくても、いい効果を生んでいるとも評価できるのです。

いかえると、アイデアソンは、主に3つの目的で開催されると考えられます。
第一に企業などで開かれる新サービス・製品検討。新しい技術や、蓄積されたデータ(オープンデータ・企業内データなど)を活用した新サービス・新製品のアイデアを導出するための会議。
第二に、社会問題や地域の課題解決のため、特定の組織や人々が抱える課題に対する解決策のアイデアを導出するワークショップ。
そして、三番目には、そうしたイベントを地域や行政との協働で行うことで教育・組織変革を促進する。つまり、組織内で行われるアイデアソンでは限界があるところをもっとオープンな形にすることによって、硬直、マンネリ化した人々のアイデア出しのトレーニングや、多様な人々との共創活動にむけた体験のために行われるもの、というとらえ方もできると考えられます。

ですから、市民のアイデアソンには場違いなと渋る人々も参加させて、体験させることによって「協働」や「ワークショップ」、自分の関係する身近な課題を考えることでのコミュニケーション力アップの効果が、多様な参加者であればあるほど大きいと言えないでしょうか。そこが企業などが「ハッカソン」からスタートした「アイデアソン」が多いのに比べて、まずは広く参加を募る市民活動としてのイベント型アイデアソンだと思っています。

「イベントとしてのハッカソン」

8月の定例会ではCode for TODAとしてのイベントとしての「ハッカソン」の定義づけともなるミニ・ハッカソンを行いました。ここでの結論は、Facebookでの報告に次のようにまとめられています。

ハッカソンイベントの説明、運営のポイント、ミニハッカソンを行いました。…

ハッカソン=日曜大工+マラソンとして、ゴールを設けて、アドリブで変更を加えモックアップを行い、このようなアプリを作りますとプレゼンをして会を終える。
ハッカソンは商用目的でなく、アプリ作成の体験会が目的。
プログラムができる方は、技術向上であったり、普段作ることができない方向性のプログラムを作ることができる。
コーディングしない方は、データを使えるように加工したり、課題解決のための話をする。また、発表資料の作成を行う。
ハッカソンの作成物は
仕様を確認し、全体を見通せるデモ
発表時にどのように手を入れたら、最終製品になるかプレゼンをする資料
ということになります。
コンセプト→基本デザイン→モックアップ→データ収集及び反映→デモができるまでの実装

また、ミニハッカソンでは、オープンデータの可視化を行いました。
日経ビジュアルデータを参考に、ビュジュアライゼーションをしやすくするツールの紹介
Excel拡張ツールのE2D3
Carto.com Tableau Google Chart など
これらを用いて戸田市のオープンデータを活用して、2チーム5人と4人でミニハッカソンを行い、それぞれ発表しました。

現状での私たちが1日とかで企画するイベントとしての「ハッカソン=日曜大工的作業+マラソン」として、それぞれの参加者のスキルに合わせて、データー集計やプログラミングを行うことで、「アイデアソン」での実際のアプリづくりを目指したプレゼン資料を完成させるということでコンセンサスが得られたといえるでしょう。

「アイデアソン」がいつもの固定されたプログラマーなどのプロダクト側の人間というより、広く多様な老若男女の市民の意見を収集することで、市民側のニーズやシーズを拾い集めるイベントとすると、今回の「ハッカソン」はそれをもう少し実用化できる範囲でアプリ開発のプレゼンとして意見集約する機会ととらえようということだと思います。また、市民参加の協力でデータをもっと豊かな実用的な写真や現地情報を加えることで、プロとタイプの完成版や試験可能な成果として検証もできるようなイベントに発展することもできるのかも知れません。

「成果としてのハッカソン」

結論から言えば、「市民のアイデアソン」と一般的にいう「ハッカソン」とは必ずしも直線的につながっていない場合があるのはやむを得ないのだと思います。もちろん、市民活動としてのオープンソースの意義や天才的なプログラマーがボランティアで参画することで短期間に成果物を生むこともあり得ますが、行政が期待するほど簡単に製品やサービスが成果物として生み出されるとは思えません。

ただ、従来の市民を集めた意見交換、懇話会、市民委員会での議論やアイデアを、今度は庁内の委員会で要求仕様をまとめるのに1,2年かかり、行政内部で業者を選定して実際に作り始めて、完成した時には陳腐化しているといった時間的ロスや費用対効果面を考えても、スピード感や地元の現場と寄り添っての開発といったアイデアソン→ハッカソン型のメリットはこれからの手法としては欠かせないものになるのではないでしょうか。
同時に、アイデアソンの第三の効果同様、地域にそうした人材、担い手を育成していくことも含めて、未来を変えていく大きな力になるのだろうと信じています。

そして、自分たちが作り上げたアプリやシステムは市民自らが使うことで、より広範囲に活用、普及する効果が出ると思います。

「ハッカソンの課題とメリット」

ハッカソンとアイデアソンの大きな違いは、アイデアでは多様な、突拍子もない意見も大いに歓迎だとしても、ハッカソンは実は地道なプログラミングの作業が伴います。また、ハッカソン のテーマによってツールや環境設定は異なりますが、登録や設定に時間がかかるものについては事前ミーティングでの説明が必須となります。簡単に1日程度のイベントで成功する方が珍しいのではないでしょうか。

少し専門的な話にもなりますが、地域のプログラマーやSEがどのくらいいるのか。環境はどう構築するのか。当日までにグループやチーム編成はできるのか。
例えば OpenSocial は検証のために SNS の Sandbox の登録を必要で、その登録に 2 ~ 3 日かかる場合があります。ハッカソン 当日参加では登録ができないと1 日が無駄です。
そのためには事前ミーティングやSNS連絡が必要です。さらにそうしたグループで開発をするには、コードをシェアし、バージョン管理を行うためのリポジトリを用意し、その使い方を全員が理解しておく必要があります。反対にリポジトリを用意すれば、ハッカソン の終了後も開発を続けることができます。ハッカソンを入り口にチームでの開発継続で完成版を作ることもできる訳です。

そして、テスト用にアイデアソンの一般市民に実用してもらい、さらにフィードバックしての完成度や実用性の高いものにできるというメリットが生まれます。例えば空っぽのコーディングだけでなく、出来上がると同時にコンテンツが充実した、市民の使い勝手がよく実用性のあるサービスが実現します。今のようにどこかで勝手に作ってでは広まるものも広まりません。PTAや市民団体に協力してもらい、使うためのイベントすら作れるでしょう。こうして一気に市民が使えるアプリ普及が実現することで、より様々なメリットが考えられます。

こうした一連の流れも、私たちCode for TODAの課題でもあるのではないでしょうか。言い換えれば、プログラマではない市民も共にこうした活動を支えることが大切になるのだと思います。特にそうしたトータルな流れのわかった行政や市民に、リーダーやファシリテータになる人材や企画力も、計画から実行の次に、検証してさらに上を目指すという、まさに、PDCAサイクルでの開発が実現するモデルになるのです。それは開かれた行政と市民自らが「協働」でコミュニティを発展させるこれからの地域社会のモデルとして広まるのではないでしょうか。(終)

子供のためのプログラミング入門

Code for TODA 事務局 山中邦久

私たちは活動の大きな柱のひとつに「子供たちのプログラミング入門学習推進」というテーマをもって活動しています。ここではその基本的な考え方と、それを大人たちがどう手助けできるかを考えて、保護者の皆様の「手引き」になればと思います。

Code for TODAのプログラミングの入門講座に関して、はじめに団体としての特徴と考え方を述べておきます。
そもそもこの団体は、ゆるゆるの関係ではありますが、上位にCode for SAITAやJapanがあり、日本だけに限らずアメリカにルーツのあるCode for Americaから影響を受けています。アメリカでは「シビル・ハッカーが行政を変える」を合言葉に、わずかこの4・5年で大きな成果を出してきました。原型はアメリカのCode for Americaの提唱しているオープンガバメント(開かれた行政・政府)を目標にするIT系の人間のNPOだといえます。
参考にその詳しい内容のインタビュー記事を紹介しておきます。

簡単に言えば、ICTの力で21世紀に向けて世の中を変えていこうということですが、もちろん、日本にも広がっている各地の「Code for 地名」はそれぞれの地域ごとの課題をどうとらえ、どう解決するかの手法は各地の組織や団体の任意、自発的な活動によって作られるので、その地域課題や組織を支えようという多くの市民の力によっても変わってくると思います。

そこで戸田では、行政や他の市民活動、NPOなどとの連携や協働はそう簡単には行かないので、まずは未来への子供たちを意識しての「プログラミング学習」の普及や自分たちの地域を「見える化」するマッピング(パーティ)を中心に、ICTやコンピュータ・サイエンスの敷居を低くする目標で活動をすることになりました。
今回、その中の「プログラミング学習」推進に当たって、まずはインストラクタ(メンター)の養成で普及を加速させるために、簡単な研修用ガイドブックを作ることになります。特に今回は、従来のプログラマーやSEなど中心でなく、いままで自らがプログラムを学んだことがない大人向けに、文科省の「プログラミン」というビジアル言語を使ってのマニュアルになります。

現在、国が進める動きの中でも、文科省の学校を中心としたカリキュラムと並行して、各地域に「大人と子どもが共に学ぶ拠点づくり」でプログラミング学習を推進していこうというものがあります。私たちはどちらかというと、今までの「本の読み聞かせ運動」のような小さな地域活動を広めることで、素人のお母さんたち、保護者や学生、市民をインストラクターに「親子で学ぶプログラミング入門」という視点を重視し、側面から学校教育を支援していこうと考えています。ですから、保護者の皆様のご参加を前提にこのマニュアルをまとめました。

 

子どものための「プログラミング入門講座」について

戸田市では教育委員会中心に教育行政が、「英語」と「ファイナンス」に、この「プログラミング」を加えての教育目標という先進的な体制が引かれ、私たちとのコラボレーションにも前向きにご協力をいただき、イベントでは共同で企画したり、「後援」を頂いています。ですが学校教育や現場の教室とはどう協働できるかなど深い意見交換ができている訳ではないので、あくまで私たち市民側の基本的スタンス、考えも公表することで今後の連携を模索する材料にできればと思います。

なぜここへきて世界的にプログラミングが注目されているかといえば、世界の多くの成功者がプログラミングの基本を学んでいること。オバマ大統領はじめ、ビル・ゲイツ、マーク・ザッカーバーグらも推奨していることですが、21世紀後半に向けて、プログラミングを学ぶ過程から「ロジカルシンキング(論理的思考法)」や「問題解決能力の向上」といったメリットが様々な研究成果から判明しているからでしょう。それは次世代の人々にとっては必要不可欠なスキルになるといわれています。

もうひとつは、従来、プログラミングは難解なものというイメージがあり、確かに分厚い解説書や独学に近い実践的訓練に苦しみ、学習達成率も3割ぐらいで挫折した大人も多かったところですが、ここへきて「学習メソッド」の大きな進化があります。簡単で様々な簡易言語や見た目でわかるビジュアル言語など、誰でも楽しく、ゲームや遊び感覚で基礎学習ができるツールが開発されています。しかもインターネットに接続して無料で使える学習ツールもあります。

しかしながら一方で子供用教育言語や教材があふれ、実際には現在進められている学習方法が確立しているとはいえない状況と思います。現場への導入がきちんとしたカリキュラムで広まるのか、安易な導入で混乱するのかもわかりませんが、インターネットの世界同様、世界規模で超ハイスピード、様々なツールやメソッドが開発され、実証実験されているので、現在のところ私たちは「プログラミングって面白い、楽しい」という動機付けができれば成功だと思い、親子で理解できる「ビジュアル・プログラミング言語」を採用しています。

そこで特に低学年や学校などの多人数で学習する言語に、文科省が研究した「プログラミン」を使い、少し学年が上の子や少人数でのステップアップに、世界的に広がりつつあるMIT(マサチューセッツ工科大学)の「スクラッチ」Scratchを採用しています。
文科省の「プログラミン」開発自体がScratchを基本にしているという意味でも、この導入編と実用編といった分け方でいいのではないかと考えています。

それぞれの特徴は、前者がツールやキャラクター、背景などが少なく、命令にも限りがあり、すぐに成果物ができる。それほど個人差が出にくい点で、後者はその欠点を補い、拡張性に優れていて他の言語や表現との連携も可能でかなりの格差が出るという点だと思います。

このメリット、デメリットを考えて、どちらの言語を採用するか、企画するのがいいのではないかと思っています。だから、私たちは公開の短時間のワークショップには敢えて「プログラミン」を採用しています。また、そのほかにいくつかの言語を用いて、プログラミングの面白さを紹介できればと考えています。

それではいよいよ「プログラミング入門」の指導のポイントに移りましょう。

指導する側にとっての基本は、まず「プログラミングって何?」「どんな言語や学習メソッドがあるの?」「具体的なやり方」という3点を抑えておきたいと思います。

 

「プログラミングって何?」

まず基本の第1は、「プログラムとは何か」です。
実は「プログラム」という言葉はもう一般化していて、子供たちでも「どんなときに使う?」と尋ねると「運動会のプログラム」といった答えが返ってきます。
つまり、プログラムとは物事の「順番」であり、「式次第」に合わせた人間や役割の配置、動きを「命令すること」という言葉だということは経験的に理解できるでしょう。それは「順次処理」といったプログラムの大きな特徴でもあります。

次に「プログラミングとは何をすることか」を考えます。
それは読んで字のごとく「プログラム」を「作る」ことです。もう少し詳しくいうと「プログラム」は何かやりたいことなどのアイデアを発案し、設計することであり、それを「作る」=「開発」する作業の2工程に細分化できます。だから私たちCode for~のイベントでは「アイデアソン」「ハッカソン」といった工程がよく作られます。そこから、「アイデアの発案・設計」と「開発」の2つの授業が考えられます。

「アイデアソン」とは「アイデア(発案)+マラソン」の造語で、課題を発見してその解決や実現したいアイデアを練ることですが、授業では「アニメ―ションやゲームを作ろう」というテーマに集中します。どのようなプログラム言語を採用して学ばせても、何かの「アイデア」を「形にする」という設定をゴールにすることが大切です。だから、簡単なチャートをイメージすることです。今回のワークショップでは、アニメでもゲームでもとりあえずの物語の三要素を考えましょう。

 

「アニメーションを作って、動かす」

それは、登場人物(キャラクター)背景、そして、物語(ストーリー、動き)です。はじめは画面の説明ですが、少し慣れた段階で、犬や猫といったキャラクターがどこをどう「動く」かといった、一続きの動きを表現することが、ワークショップの成果となります。
授業展開でも高学年で少しレベルが高いクラスでは、事前に「アイデア」をプレゼンさせ、講座終了時に、自分の思った通りに設計とプログラミングが「完成」したかをプレゼンして検証することができます。
そして、アイデアを「考え」た上で、開発するためにプログラミング言語を順番に並べていく作業が「ハッカソン」(ハッキング+マラソンから生まれた造語)または「プログラミング」ということになります。並べたプログラムを動かして思い通りの動きを確認します。

この流れを普通は特定の「プログラミング言語での文法」として作る訳ですが、少し詳しく言えば、「順次処理」「条件分岐」「繰り返し」の3つを織り交ぜて学ばせることになりますが、「子供のためのプログラミング入門」講座では「文法」を意識することなく、キャラクターの動きに命令を与えることで、マウスひとつで自然にそれをマスターしていきます。

 

「どんなプログラミング言語や学習メソッドがあるの?」

プログラミングを学ぶというのは、基本的にプログラム言語を学ぶことです。
ここで「言語」について考えてみましょう。子供たちに教えるときに、世界中で人間と会話するのにどのくらいの言語種類があるのか考えさせると、国や人種で日本語の他に「英語、フランス語、ドイツ語、中国語・・・」とたくさん出てきます。

それではプログラミング言語は誰と会話するものでしょうか?当然、相手はコンピュータという機械(マシン)ということになります。ですから基本的には「マシン語」という、電気的なプラス・マイナスの2進法からできたもので、それをできるだけ人間の言語に近く理解しやすいように作られてきました。いわゆる「ビジュアル化」です。だからよくVB(ビジュアル・ベーシック)を昔習ったという方もいらっしゃいますね。

プログラミングを教える基本的な知識として、どんなプログラミング言語があるかも考えておくと勉強になります。
メジャーなプログラミング言語でも30種類くらいありますが、人間の少数民族のように世界では数千ほどあるといわれています。現代では産業界やロボットなどを動かす「組み込み式プログラム」などやゲームやパソコン、Web上で使われる有名どころだけでも、
Java、PHP、JavaScript、Python、C言語、C++、C#、Perl、HTML、CSSなどなどかなりの数になるでしょう。
そのどの言語を学ぶのがいいのか、は難易度や用途などにより異なり、当然、その学習スタイルも大きく変わってくると思います。

こうした大人向け、エンジニア向けのプログラミング言語に対して、一般の大人や子供向けで、IT関連でなくても「プログラミング的思考」をマスターする目的などで初心者が学習するサービスや教材、アプリが最近流行っています。
ですから子供だから、高齢者だからという年齢ではなく「初心者向けという意味での「プログラミング入門」ととらえることも出来るでしょう。いくつか具体的に紹介すると、

・Scratch(スクラッチ)、・ScratchJr(スクラッチ・ジュニア)
・Programin(プログラミン)、・Hour of Code(アワー・オブ・コード、Code Studio)
・lightbot(ライトボット)・CodeMonkey(コードモンキー)、Viscuit(ビスケット)
・MOONBlock(ムーンブロック)、Tickle(ティックル)、・GLICODE(グリコード)
・ComputerCraftEdu(コンピュータクラフトエデュ)、・Xcode(エックスコード)
・Swift Playgrounds(スィフト・プレイグラウンド)、
・Android Studio(アンドロイド・スタジオ)
・Processing(プロセッシング)  などがあります。(ここでは詳しい内容は割愛します)

この他に、ロボットや組み込み式ハードウェア(物)を組み立てたり、操作することを通してプログラミングを学ぶ教材も出回っていますが、ロボットやハードに費用がかかる点が大きな違いでしょう。代表的な例は、LEGO社の「マインドストリームEV3 」「WeDo2.0」やアーテック社の「ロボティスト」など、これはこれで一方で活況を呈しています。

 

それではいよいよ「具体的なやり方」として、今回は文科省の「プログラミン」の実際に入ります。

プログラミング学習の具体的なやり方

準備:具体的には公民館、地域交流センターや学校の教室などで開かれるワークショップと、小さな事務所や自宅のリビングで行われるゼミナールのような形式が考えられるでしょう。そこでの大きな違いは、ワークショップが単体で1回ごとの「紹介」のようなやり方で、参加人数も指導するインストラクターも多いのに比べて、小さな単位の講座やゼミは少人数で継続的な学習が可能で、時間的余裕があり面白い、高度な作品が完成できるということでしょう。
当然、ワークショップの方がパソコンの台数や無線LANなどの準備が大変で、会場準備、受付から片付けまでなども会場担当者との打ち合わせ、事前準備が大事で、プロジェクターを使うなど会場の広さによっては指導する方の発声や教え方も若干必要になると思いますが、小さなグループでも1人1台のパソコンの準備は必須です。自宅や町会会館など開催される場所によっての細かな準備に関してはその都度ご相談ください。

さて、ここからがテキストでの一通りの進め方の本題に入るのですが、それは次のテキスト(PDF)で予習しつつ、実際の実習・研修会に委ねますので、ここまでお読みいただいて参加希望の皆様にはぜひ個別にご連絡ください。基本テキスト(PDF)

ただ学校などでの「教育」でなく、なぜ「プログラミング学習」と言っているかというと、まさに最近の学校でも採り上げられている「アクティブ・ラーニング(自律的学習法)」を、子供たちの個性や自主性を重視して進めることを優先にということを、最大の基本としてワークショップにしろ、ゼミにしろ参加することが大切だと思います。それではひとまずここまでで。