ソニー・グローバルエデュケーションは8日、ロボット・プログラミング教育分野の子供向け学習キット「KOOV」(クーブ)を発表した。学校教材や教育玩具を手掛けるアーテックと共同開発し、2016年夏に商品化する予定。「KOOV」は、自由な形を作れる透明ブロックと電子基板に、作った形をロボットとして動かすプログラムで構成されるロボット教育キット。ロボットやプログラミングなど、ものづくりを習得する創造力を具現化したものという。開発は、児童向けのロボット教材やプログラミング教室なども展開するアーテックと共同で行なう。両社はロボット、プログラミング教育の事業拡大に向けた活動を進める。
2016年03月08日ビズリーチはこのほど、同社が運営する求人検索エンジン「スタンバイ」において、「プログラミング言語別 平均年収ランキング」を発表した。同ランキングは、スタンバイに掲載されている正社員の情報のうち、各プログラミング言語が含まれる求人情報の給与金額の平均値を集計したもの。同ランキングにおいて、トップとなったのは「Python」で651万円だった。Pythonは機械学習用の定番ライブラリが豊富なため、機械学習エンジニア」や「ロボット向けアプリケーション開発」といった求人が多く見受けられたという。海外に比べて日本では人気がなかったPythonだが、第3次AI(人工知能)ブームを受け、需要が高まっているとしている。第2位は「Perl」で633万円だった。正規表現などの強力なテキスト処理が可能な「Perl」はWebのフロントエンドからサーバサイドまで幅広く求人があり、安定した地位を築いているという。第3位以降は、上から順に「Ruby」(606万円)、「C言語」(597万円)、Javascript」(555万円)となっている。
2016年02月29日Goプロジェクトチームは2月17日(米国時間)、「Go 1.6 is released|The Go Blog」において、プログラミング言語Goの最新安定版にして7つ目のリリースとなる「Go 1.6」の公開を伝えた。パフォーマンスやコンパイル時間は1つ前のバージョンとほぼ同じとされている。Go 1.5から漸進的に改善や機能追加の取り組んだバージョンに仕上がっている。「Go 1.6」の大きな変更点の1つはnet/httpパッケージにおけるHTTP/2サポートだ。Go 1.6からはHTTP/2のサポートが機能がデフォルトで有効化されている。サーバサイドで利用する機能においてもクライアント再度で利用する機能においてもHTTP/2およびHTTPS/2の機能を利用できる。「Go 1.6」では、1つ前のバージョンであるGo 1.5で実験的に導入されたベンダディレクトリ機能がデフォルトで有効になっており、vendorの指定を含んだソースコードはデフォルトの設定のままでコンパイルできるようになっている。これまでcgoを使ってきた場合は「Go 1.6」に注意する必要がある。というのも、Go 1.6ではGoとCの間でポインタを共有するときのルールが変更されたからだ。新たなデザインではガベージコレクタが動作するGoとCが確実に動作するようになったため、実行時のチェックなどを実施する必要が生じている。このため、変更がもたらすクラッシュを避けるためにコードを変更する必要がある。
2016年02月22日ライフイズテックは2月3日から5日までの間、品川女子学院中学校と聖光学院中学校の生徒を対象に、プログラミング・IT講座「Life is Tech !×Microsoft品川女子学院・聖光学院スペシャルキャンプ」を実施している。なお、会場や機材提供として日本マイクロソフトが協力している。ライフイズテックでは、中学生・高校生を対象としたITキャンプ/スクールや、学校向けの特別講座、教員向けプログラミング教育教材の無償提供プログラム「Tech for Teachers」などを企画・運営している。今回、品川女子学院中学校と聖光学院中学校の約100名の生徒を対象に、アプリ開発や、Webデザイン、ゲーム開発、映像編集などが学べる講座を実施。最新のIT技術を学ぶことで、生徒たちの「創造する力」と「つくる技術」の習得を目指しているという。また、同社は3月20日から4月5日の期間、全国8都道府県11大学を会場に、中高生向けにITキャンプを開催する。今後も学校向けの特別講座や、教員向けプログラミング教育教材の無償提供プログラム「Tech for Teachers」など、学校教育の中でITを学べる取り組みを進めていくという。
2016年02月03日ギブリーは2月1日、全国の学生エンジニアが開発したポートフォリオ(作品)アプリケーションを、現役エンジニアが評価する、オンライン型プログラミングコンテスト「SPRINT by codecheck」を開始した。エントリー期間は2月21日まで。codecheckは2月1日に正式リリースを開始したサービスで、エンジニア向けのさまざまなプロジェクト型テストを提供し、スキルをチェックできるプラットフォームだ。同サービス活用の第1弾が、2017年度卒業予定の学生が対象の「SPRINT by codecheck」となる。コンテストに応募する際の手順は、2月21日までに、ギブリーのプログラミングスキルチェック「codecheck」に登録し、codecheck上に公開されている試験を受験し、オリジナルのアプリケーションの 開発・提出を行うというもの。2月22日から2月29日の間にスポンサー企業のエンジニアが参加者のコードビューを行い、素晴らしいコードや面白いと感じたアプリケーションに対して投票する。評価が高かった上位50名は、3月5日に開催されるMEETUPイベントに招待。スポンサー企業のエンジニアが集まる中、LT形式で自分のアプリを発表する機会が設けられる。スポンサー企業は、NTTコミュニケーションズ、オロ、ソニー、DMM.comラボ、富士ゼロックス、LINEなど10社。パートナー企業としてセールスフォース・ドットコムが参加している。
2016年02月03日ディスカバリーチャンネルとディスコは1月14日、大学生・大学院生などを対象としたプログラミングコンテスト「DISCO presents ディスカバリーチャンネル プログラミング コンテスト」を開催することを発表した。同コンテストは、参加者の得意なコンピュータ言語(Java、C++、Python、Perl、Rudyなど)を使って、課題をいかに素早く正確に解けるかを競い合うもので、優勝者には賞金10万円と副賞として希望する上限30万円までのPCが贈呈される。参加対象者は、大学生、大学院生、高等専門学校生、短大生、専門学校生。ディスカバリーチャンネル特設Webサイトから応募受付が可能。開催日程は、まずWeb予選が1月30日(土)21時00分~21時30分(90分間)に行われる。競技開催と同時に複数の問題が提示され、制限時間内に多く得点した人が上位となるルール。なお、得点が同じ場合はより早く解いた人が上位になる。本戦には、Web予選参加者の中から選出された100名が参加できる。選考内訳は、2017年度卒業見込み者から上位80名程度、2018年度以降卒業見込み者から上位20名程度を予定。本戦は、2月20日(土)9時30分~17時35分にディスコ本社(東京都大田区)で開催される。本戦の競技時間は120分間だが、同日にメディアアーティスト・筑波大学助教である落合陽一氏の特別講演「プロコンと研究表現」やディスコ社内ツアー、表彰式などが予定されている。落合陽一氏は、1987年生まれのメディアアーティスト・筑波大学助教 デジタルネイチャー研究室主宰。デジタルとアナログを組み合わせた新しい作品を生み出すことから「現代の魔法使い」とも称されている。経済産業省「Innovative Technologies賞」に選ばれたほか、2015年には「World Technology Award」の「IT Hardware部門」を受賞するなど、国内外での受賞歴を持つ。
2016年01月15日ffab0は1月12日、プログラミング学習アプリ「Pocket Programming - Ruby/Rails編 - 」のiPhone版をApp Store上で配信開始したと発表した。価格は360円(買い切り型)。推奨端末はiOS 8.0以降。「Pocket Programming」は、世界75カ国語以上で利用されているプログラミング学習アプリ。2015年にAndroidアプリとして「Ruby/Rails編」「Android/Java編」をリリースしている。この度、Pocket ProgrammingシリーズのiPhoneアプリ第1弾として、「Ruby/Rails編」を配信開始した。Pocket Programimingは、チュートリアル動画や初心者向けの本でプログラミングに触れてみて、「プログラミングって楽しそうだな」と思えてきた初心者を対象としている。無駄な横文字などの難しい言葉は避け、重要な点に集中して理解できるような説明や、すぐに必要でない知識はあえて捨て、独り立ちできるようになるまでの知識に特化するなど、気軽に楽しみながら学べるアプリとなっている。問題は4択のクイズ式になっており、1日10問を4週間続けることで力がつく設計。1日ごとに得点が表示され、間違った箇所は解説と共にポイントを振り返られる。1週間を終えると、独自のアルゴリズムで苦手分野を分析し、アドバイスと参考になる本やWebサイトが紹介され、重点的に学ぶこともできる。なお、近日中にApp Storeにて「Pocket Programming - Android/Java編 -」の配信や、Swift/Xcode編など、他言語展開も予定されているほか、他の初心者用プログラミングサービスなどとの連携も含め、広くプログラミング学習のプラットフォームを構築していく考えだ。
2016年01月14日アップルは10日、12月7日から13日までのコンピュータサイエンス教育週間に合わせ、コンピュータプログラミングの基礎を学べる無料のジュニア向けワークショップ「Hour of Code(コーディングの時間)」をApple Store各店で実施した。本稿ではApple Store, Omotesandoで開催されたワークショップの様子をお届けする。Hour of Codeは、コンピュータサイエンス教育普及を推進するNPO団体であるCode.orgが提唱している運動で、180カ国以上の生徒数千万人が参加している。Hour of Codeのイベントは誰でもどこでも開催することができ、この運動を以前より支援したきたアップルは、世界規模でスペシャルイベントを実施している。今回のワークショップは6歳以上を対象に実施され、筆者が取材した回には、学校の授業を終えた小学生8名が参加した。ワークショップは、用意されたチュートリアルを進めることで、誰もがプログラミングの基本を1時間で習得できるような内容になっている。開始に先立って、参加者全員でビデオを視聴。ビル・ゲイツやマーク・ザッカーバーグらが登場するこのビデオはYou Tubeでも見ることができる。ビデオを見終わると続いて、Apple Storeのスタッフから、注釈が。コードを書くことは、エンジニアだけがする事ではなく、皆に関係あることなのだというイントロダクションののち、各々で自己紹介。名前と将来の夢をお互いに伝え合う。その将来なりたい自分の姿と、先ほどの、コードを書くことは皆に関係あるよという話をつなげ、スタッフは、電子レンジなど身の回りにあるものもプログラムが動いていると丁寧な解説をしてくれた。そしていよいよiPad miniを使ってチュートリアルを動かしていく。今回は映画『スター・ウォーズ/フォースの覚醒』に登場する球型のドロイド・BB-8を実際に動かしてみるというものだ。前作『スター・ウォーズ エピソード3/シスの復讐』が公開されたのは10年前だから、子供たちは知らないのではないかと思ったのだが、CMとタイアップをガンガン展開してるからか、意外と「知ってるー」という声が多かった。BB-8はコンピュータでコントロールされているという設定もあり、この課題に登場させるのにピッタリのキャラクターだ。映画の登場人物であるレイという女性と一緒にBB-8が部品を集めていくという動作を実行させるのだが、プログラムの構築は命令が書かれたブロックをつなぎ合わせて行っていく。「前方に移動します。」「左に曲がる」「右に回転」といった基本的な動きが書かれたブロックを組み合わせて作業を進めるのだが、要領よく進められる子もいればそうでない子もいる。わが子が上手くこなせてない様子を見て、お父さんお母さんが助太刀に入ろうとするのだが「自分でやる!」と、解決法を自ら探ろうとする子が多かったのが印象的だ。スタッフも補助に入るが、こうしなさいと指示するのではなく「何回右に動いたらいいのかな?」といったようにヒントを与えるにとどめ、思考することに重きを置いていたところは高く評価したい。これは競争ではないから、何問解けたから偉いということではないし、それよりも、思考方法を鍛錬することのほうが重要なのだ。また、協力を仰ぐのに、その日その場で会った隣の子に声をかけるという姿も印象に残った。一緒に同じ作業をすることで、同じテーブルに座った子供たちの間で連帯感が生まれているようにも見えた。約1時間のワークショップが終了すると、修了証が授与され、作業で使ったアップルのイヤフォン「EarPods」がプレゼントされた。最後にゲストとしてバックルームからSpheroより発売されたBB-8が登場。iPadからコントロールして皆で楽しんだ。なお、ワークショップで採用されたチュートリアルはこちらから利用することができるので、興味があれば一度試して頂きたい。
2015年12月11日エムアウトグループのギノは12月8日、IT/Webエンジニアに特化したプログラミング転職サイト「paiza」にて、恋愛プログラミングゲーム「paiza オンラインハッカソンVol.7 プログラミングで彼女をつくる」を公開したことを発表した。開催期間は、2015年12月8日12時00分から2016年1月13日23時59分まで。今回の「paiza オンラインハッカソンVol.7 プログラミングで彼女をつくる」は、同社が開催するオンラインハッカソンの第7弾となる。シリーズ初の恋愛シミュレーションゲームの要素を取り入れたほか、2015年12月3日にオープンソース化された米Appleのプログラミング言語「Swift」にも対応している。プログラミング問題を解くことで、顔のパーツや洋服、髪型といったアイテムを取得でき、彼女を自分好みに着せ替えることができる。それと同時に親密度もアップし、彼女の表情やセリフ、称号にも変化が現れ、2人の仲が深まっていくゲームシステムを搭載している。また、易しい問題で取得できるノーマルアイテムから高難易度のレアアイテムまでを多数用意することで、プログラミング初心者から上級者までの幅広いユーザーが、楽しみながらプログラミングスキルを高められる仕様となっている。対応言語は、Swift、C、C++、C#、Objective-C、Java、Perl、Python(2.x系)、Python(3.x系)、Ruby、PHP、Scala、Go、Haskell、Erlang、Bash、R、JavaScript、CoffeeScript、Cobol、VB、F#、Clojure、D。
2015年12月09日モンテッソーリ教育は、シュタイナー法と並び「世界2大幼児教育法」と称される教育法です。根底にあるのは、子どもの「敏感期」がどういうものかを知り(→知る)、子どもをきちんと観察し(→見守る)、子どもに適切に声がけ、働きかけをする(→ときどき助ける)という子育てメソッド。欧米で実績のある手段なのだそうです。『知る、見守る、ときどき助けるモンテッソーリ流「自分でできる子」の育て方』(神成美輝著、百枝義雄監修)は、そんなモンテッソーリ教育を子育てに取り入れるためのコツを紹介した書籍。3章「『観察→発見→見守る』から始まる、今すぐできる10のこと」から、要点を引き出してみましょう。■1:観察する観察の目的は、子どもの「興味の中心」を見つけること。たとえば電車の名前をおぼえるのが好きだった子は、そこから、駅、地図、そこで働く人など、興味を広げていくもの。つまり子どもの興味の中心さえ見つけることができれば、そこから広がりを得ることができるということです。そこで、まずは子どもがなにに本当に興味があるのか、じっくり観察してみることが大切だと著者はいいます。■2:自由に選択させる「~しなさい」と親が決めたことをさせるだけでは、子どももやる気を失うもの。そうではなく、大切なのは「選択肢」を与え、判断力を育むこと。具体的には、小さいうちは「2択」。大きくなるにつれ、選択肢の数を増やしていくといいそうです。選択するという行動は、考える力につながるもの。なにかの困難にぶつかったときにも、「どうすればいいのだろう」と考えることができるようになるわけです。■3:見守り、挑戦させる子どもの方から「手伝って」「助けて」というサインを見せるまでは、大人はじっと待った方がいいのだと著者はいいます。なぜなら失敗をして、新たなやり方を見つける、もう一回最初からやってみるというようなことを繰り返すことによって、子どもは自分でいちばんいい方法を見つけ出すことができるから。「教えない教え」によって、やる気と自信、気づきの機会を与えるべきだということです。だからこそ、子どもの方から「手伝って」「助けて」のサインを見せるまでは、大人はじっと待った方がいいのだと著者はいいます。■4:ゆっくり見せる子どもにとって、大人の動きは早送りのDVDを見ているようなもの。普通のスピードでなにかを教えたとしても、まったくついていくことができないのだそうです。また子どもは、手と耳を同時に働かせることが苦手。口で説明をしながらなにかを教えても、混乱するばかりだといいます。子どもの動き方を教えるときには、(1)子どもがわかるように、ゆっくり見せる。(2)見せるときと聴かせるときを区別する。言葉での説明を同時にしない。ということを意識すべき。■5:子どもを待つ大人から見て、子どものペースが「のんびり」に見えたとしても、子どもは大人が思っている以上に考えているもの。順番を守ったり、習慣にこだわったりするなど、子どものなかには「厳しい秩序」があるので、そう簡単には進められないということです。そこで待ち時間は、「考える力」が伸びる時間であると心得ることが大切。■6:察するのをやめるお茶がほしいと目で訴えれば、なにもいわなくても用意してあげるなど、子どもの気持ちを察して先回りして動くことが多いのが大人。でも「察してしまう」ことが、意思を自分で伝える訓練の妨げになっているとか。知らんぷりをすることも、「伝える力」を伸ばすものであるということ。■7:ルールを設ける自由のなかに、ルールを持たせることも大切。きちんとルールがあり、それを破ると楽しめなかったり、トラブルになったりするということが学べるわけです。大切なのは、ルールをきちんと伝え、あとは見守ること。■8:オーバーにほめない子どもがなにかを「できた」と伝えてきたとき、大人は「やった~。すごいね~」とオーバーにほめてしまいがち。しかし子どもは何度も失敗してようやくできるようになったので、「これだけ練習したんだから、できて当たり前」「そんなにすごくはない」と思っているのだとか。しかし子どもは、「ほめられる」より「認められたい」もの。そこで、オーバーにほめずに、認めてあげることが大切だといいます。■9:共感する1歳半~3歳くらいまでの子どもは、なんでも「イヤイヤ」というイヤイヤ期。そんなときの対処法のひとつは、「イヤなのね。でも、いまから○○するからお片づけしよう」というように、“やりたくない気持ち”を受け入れることが大切。うれしいことも、イヤなことも共感することで、子どもとの心の距離がぐっと近くなり、「チャレンジ精神」が向上するそうです。■10:失敗させる子どもは失敗しながら多くのことを学ぶもの。だからこそ、間違っているときに教えてしまうのではなく、あえて失敗を「見せる」勇気が学力向上につながるのだと著者はいいます。*これらはほんの一例で、他にも「知る、見守る、ときどき助ける」ためにおぼえておきたいことが満載。子育てに四苦八苦している方は必読です。(文/書評家・印南敦史)【参考】※神成美輝(2015)『知る、見守る、ときどき助けるモンテッソーリ流「自分でできる子」の育て方』日本実業出版社
2015年12月05日米Appleは12月3日(現地時間)、プログラミング言語「Swift」をオープンソースソフトウエアとして公開した。Swift.orgのWebサイトを開設、オープンソースのSwiftプロジェクトを開始した。同社は今年6月にWWDC15の基調講演でSwift 2を発表し、Swiftをオープンソース化する計画を明かした。Swiftは「Swiftコンパイラ」、REPLを含む「LLDB」、「Swift標準ライブラリ」といった複数のプロジェクトで構成されており、さらに3日に「Coreライブラリ」プロジェクトと「Swiftパッケージマネージャー」プロジェクトが追加された。Swiftプロジェクトの拠点となるのがSwift.orgである。全てのソースコードがホストされているGitHubサイトなどリソースへのリンクがまとめられ、メーリングリストやSwift開発環境を整えるための情報ページなどコミュニティを支援する場になっている。また、WWDC15で予告していたようにLinux用のポートもリリースした。現時点で対応するアーキテクチャはx86-64のみで、Ubuntu向けのバイナリも用意されている。Swiftチームは「ポート作業はまだ進行中だが、テストしてもらえるようになったことに満足している」と述べている。SwiftはObject-Cとの相互運用を特徴とするが、Swift on LinuxはObjective-Cランタイムに依存しないように設計されており、Objective-Cがなくともコアライブラリを利用できる。そのため、Swift言語および標準ライブラリはAppleプラットフォームとほぼ共通の実装とAPIになるものの、ふるまいが異なる点もある。Appleはまた、2016年春にリリースする予定の「Swift 2.2」と同年秋にリリースする計画の「Swift 3.0」に関する情報も公開した。Swift 2.2は、バグ修正とQoIの向上を目的としたマイナーアップデートになる。Swift 3は、Swift言語と標準ライブラリのバイナリインターフェイスを安定させるために一部で大幅な変更が行われる。たとえば、APIデザインガイドラインに従って標準ライブラリとコアライブラリがアップデートされる。
2015年12月04日レゴ エデュケーションと日本マイクロソフトは27日、小中高生を対象に、クラウドを活用したプログラミング教育カリキュラムの提供を開始した。今後、全国の教育機関と連携して展開する予定。提供されるカリキュラムは、世界80カ国5万以上、日本でも6000以上の教育機関で採用されている、教育用ロボットキット「レゴ マインドストーム EV3」を用いて、クラウドやIoT、データ分析の初歩を楽しく学べるプログラミング入門教材。教育版レゴ マインドストーム EV3の基礎プログラムを発展させ、開発ツール「Microsoft Visual Studio」を使用したプログラミングによるロボット操作から、センサによる外部データの収集、クラウドサービス「Microsoft Azure」上であらかじめ準備されたIoTや分析サービス機能を用いて、データ収集、保存、分析、活用といったIoTの基本的な仕組みを遊びながら学べる教材として、2014年10月に販売代理店であるアフレルと共に開発した。同カリキュラムの実証実験は、すでに芝浦工業大學中学高等学校、お茶の水女子大学附属高等学校、東京大学教育学部附属中等教育学校、鳥羽商船高等専門学校など、複数の学校で実施されている。今後、それらの実験結果を反映させた小中高生向けのワークショップを、NPO法人CANVASの協力を得て、今後1年間で参加学生数1万人を目標に全国規模で展開していく。さらに、個人エンジニアや学生などが、同カリキュラムを活用したワークショップを開催するための支援策として、日本マイクロソフトが提供するセルフオンライントレーニングサービス「Microsoft Virtual Academy」などを通じて、年間約500名のトレーナーを育成する予定だ。
2015年10月28日「自分で考える力を養う」ことが教育の目標として掲げられ、欧米の教育が脚光を浴びています。そのための効果的な学習について、フランスやアメリカの例を取って、以下にまとめてみました。他人からの学びこそが、すべての基礎自分で考える力を養うためにまず重要なことは、「他人から学ぶ」こと。自分で考えるためには材料が必要であり、そのほとんどは他人から生み出される知識です。ごくごく一部の天才的なひらめきを除いて、新たなアイデアや発想、イノベーションのほとんどは、先人による知識の蓄積から学んだことが土台にあるといいます。そのため、アメリカの大学では学生に専攻分野で必読書となるものを徹底的に読み込ませ、論文を書かせます。週に1,000ページぐらい読むのは当たり前で、ほぼ毎週、何本も論文を書きます。読んで、書いて、読んで、書いてを繰り返すことで、先人が蓄積した知識を十二分に吸収し、それについて考え抜いた後で、ようやく自分で新たなアイデアを生み出すことができるようになると考えるからです。フランスでも同様に、大学への入学資格となるバカロレアは論述試験となりますが、これまで学んできたことを基にして自分の考えを理論的に展開する力が問われます。特に哲学の試験では、教科書をはじめ、数々の哲学書に書かれている内容を上手く整理し、最後に自分の考えを述べるようにしないと、高得点は得られないといわれています。実際に書いてみることが最良のトレーニング学びを基に自分の考えを深化させる上で最も確実な方法は、「書くこと」。自分の頭の中だけで整理してまとめることができる人も中にはいますが、ほとんどの人は、書いているうちに思考が深まり、考えがまとまるようです。書き始めると、論旨の展開や表現にも配慮するようになります。書くからには自己満足で終わらず、相手に理解して納得してもらいたいもの。特に、試験で高得点を得ようと思うと、学んだことを単に列記するだけではなく、重要な点をしっかりハイライトし、説得的に述べることがマストです。アメリカやフランスをはじめ、欧米の学校の試験は、ほとんどが論述式です。正しい回答を得ることよりも、それに到達するプロセス、つまり思考のプロセスを見ることが重要だと考えるからです。世の中には回答のない問題が山積みです。正しい答えが存在しない中、自分で回答を導き出すには、思考のプロセスが試されます。そして、最終的に正しい考えとして世の中の人々に受け入れられるためには、周囲が納得してくれるよう自分で説得していかねばらないからです。このように見ていくと、読書などを通じて、まずは「他人の考えについて学ぶこと」が重要であり、それを踏まえて、「自分の考えを説得的に述べることができるようになること」こそ、教育の集大成であり、「考える力を養う」ことであるということがわかります。(タベ真美)
2015年10月10日「U-22プログラミング・コンテスト」を主催するU-22プログラミング・コンテスト実行委員会は10月6日、10月4日に秋葉原UDXで行われた最終審査において、入選作品16作品についての各賞受賞を決定したと発表した。同コンテストは、優れた才能を持ったイノベイティブなIT人材の発掘と育成などを目的として、1980年より経済産業省の主催で開催されてきたが、2014年からは同コンテストの主旨に賛同・協賛する企業から構成された「U-22プログラミング・コンテスト実行委員会」が主催している。各賞の受賞者は以下のとおり。経済産業大臣賞経済産業省商務情報政策局長賞スポンサー企業賞/サイボウズ賞スポンサー企業賞/豆蔵ホールディングス賞スポンサー企業賞/PCA Dream21賞スポンサー企業賞/usefule賞スポンサー企業賞/オービックビジネスコンサルタント賞スポンサー企業賞/さくらインターネット賞スポンサー企業賞/フォーラムエイト賞CSAJ会長賞
2015年10月05日米GitHubは9月22日(現地時間)、プログラミング教育支援ツール「Classroom for GitHub」をリリースしたことを発表した。同ツールは、コンピュータ科学教育の改善を目標に掲げた「GitHub Education」という取り組み内の1プロジェクトという位置づけで、リポジトリの作成や、受講者がたくさんいるクラスのアクセス管理など、煩雑になりがちな教育現場における管理作業を簡易化し、教育現場を効率化するために開発されたもの。教師は課題を簡単に作成し、プライベートな招待用URLを通じて学生に課題用コードを配布することができる。また、リポジトリ作成とアクセス管理を自動的に行うことが可能で、生徒も課題提出を簡単に行えるようになる。このほか、教育機関や教師がサイトから申請すれば、通常では有料なプライベートリポジトリを、無料で作成することも可能。オプションとして、課題の参考用コードを付けて、学生ごと、あるいはグループごとに提供できる。また、同僚の講師や助手を講座の管理者に追加登録して、課題の作成や管理を代行してもらうことも可能となっている。
2015年09月25日小学生向けプログラミング教育事業を行うCA Tech Kidsは9月24日、沖縄県の地元企業2社と共同し、プログラミング学習のための奨学金制度「CA-Frogsキッズプログラマー奨学金」を設立し、奨学生2名を採択したと発表した。「CA-Frogs キッズプログラマー奨学金」は、沖縄のIT人材を育成・輩出するためのプログラミング学習奨学金制度。CA Tech Kidsのほか、シーエー・アドバンス、レキサス、沖縄県内の中学生~大学生をシリコンバレーへ派遣し次世代リーダーの育成を目指す教育プログラム「Ryukyufrogs」との四者共同で実施する。今回、奨学生として採択されたのは、上原匠人君(金城小学校5年生)と譜久原理樹人君(宜野湾小学校5年生)。2名は小学生向けプログラミングスクール「Tech Kids School」沖縄那覇校にて、半年間・計約100時間のプログラミング学習を行う予定。開発ツール「Xcode」を使ったiPhoneアプリ開発や、HTMLやJavaScriptを用いたWebアプリ開発を学び、12月には奨学生自身が企画・開発したオリジナルの作品をプレゼンテーションする発表会を行うという。学習に係る諸費用はシーエー・アドバンスおよびレキサスが負担し、奨学生は無償で学習することができる。将来的には、同プログラムで学習した奨学生を、「Ryukyufrogs」を通じてシリコンバレーに派遣し、高度なリーダー育成につなげていきたい考えだ。
2015年09月24日「プログラミング体験会 in 秩父」が9月13日、恵明学園 かみたの幼稚園で開催された。このプログラミング体験会はクラウドファンディング「READYFOR?」において6月26日より資金調達を実施、8月5日に19名の支援により目標金額の40万円を達成したことにより、実施されたもの。「プログラミング体験会 in 秩父」運営にはサイバーエージェントの関連会社でプログラミングスクールを運営するCA Tech Kidsが参加。9名の専門スタッフによる指導のもと進められた。集まった子供たちは幼稚園児から中学生まで約60名。プログラミング体験が初めてとなる子供たちは、3種類の選択コースからひとつを選び、学習用プログラミング言語「スクラッチ」でネコを追いかける追跡ゲームを作成したり、開発ツール「Xcode」で「おみくじアプリ」を作成、またHTML5、CSS、JavaScriptなどのプログラミング言語を用いてインターネット上で動く忍者が変身するアプリを開発するなど真剣に取り組み、プログラミングへの関心を高めていった。同体験会は、主催者エアリアル代表の高野健一郎氏による「未来がある秩父の山の中でもインターネット環境さえあればプログラミングは出来る。秩父からベンチャー企業や優秀なプログラマーが育ってくれたら子供たちの将来がもっと有望になるのではないか? 今後秩父にプログラミング教育が根付いていくよう努力したい」という思いによって開催されたという。
2015年09月17日ffab0は9月2日、初心者のためのプログラミング学習アプリ「Pocket Programming」のAndroid版を、Google Play上で配信開始したことを発表した。同アプリは、一問一答形式の問題を解くことで基礎知識が身につく、1日10問・全4週間の学習プログラムとなっており、チュートリアルなどで「プログラミングとは何なのか」を学び、その知識を実践で使える力にするための学習ツールという位置付けとなる。動画を見る、チュートリアルを真似するといった受動的な学習スタイルとは異なった能動的な学習スタイルを提供することに加え、独自のアルゴリズムで学習者の苦手分野を分析し、その改善方法の提案までをサポートするという。プログラミングを学習する際にはパソコン必須のケースが多いが、同アプリを使うことで、スマホだけでプログラミングを勉強できる。推奨端末はAndroid4.0以降(一部非推奨端末あり)、価格は300円/ダウンロードとなる。同社は、10月にグローバル版Pocket Programmingをリリースする準備を進めているとしている。
2015年09月03日ギノは9月1日、同社が運営するプログラミング転職サイト「paiza」にて、IT/Webエンジニアを対象としたマンガ形式のオンラインハッカソン「paiza オンラインハッカソンVol.6 女子高生プログラマーの大バトル ~コボール文明の逆襲~」を開始したと発表した。同イベントは、プログラミング問題の成否によりストーリーが分岐するオンラインマンガ形式で行われる。期間は9月1日12:00~10月6日25:59までとなっており、対応言語は、C、C++、C#、Objective-C、Java、Perl、Python(2.x系)、Python(3.x系)、Ruby、PHP、Scala、Go、Haskell、Erlang、Bash、R、JavaScript、CoffeeScript、Cobol、VB、F#、Clojure、Dの計23言語。「揖保乃糸」特級品18束セットや「カルピス」詰め合わせ5本セットといったプレゼントも用意されている。またこれに併せて、9月26日に開催される松江Ruby会議07の協賛イベントとして「え、妻が松江? 回文作成プログラミングコンテスト」が同時開催される。同コンテストはより高度なアルゴリズム系の問題でプログラミング技術を競い合うもの。Rubyで回答した参加者のなかから上位者のコードが、松江Ruby会議07の際に松江テルサ別館にて発表されるという。
2015年09月01日米GitHubは8月20日、ソフトウェア開発共有Webサービス「GitHub」上においてのプログラミング言語の人気ランキングを集計し、その結果を発表した。結果は下記のグラフのとおり。同グラフは、Liguistというプロジェクトが認識する言語をランキングしたもの。GitHubが開始した2008年度から、フォークを除き、公開・非公開の両レポジトリで使用されているプログラミング言語の全世界での相対的な人気度を時系列で表している。2008年から2015年にかけてJavaが大きな伸びを示しているが、同社はこの成長の大きな要因を「Androidの人気の向上と、ビジネスやエンタープライズレベルでのバージョンコントロールの需要の高まりが大きく関連しているのではないか」としている。
2015年08月20日Progateは8月19日、同社が開発運営するオンラインプログラミング学習サービス「Progate」にて、「Ruby on Rails 初級編」を無料で一般公開したと発表した。「Ruby on Railsコース」は初級・中級・上級の3部構成となっており、学習しながらSNSサイトを構築していくことができる。初級編ではRuby on Railsの基礎を学び、SNSサイトなどのWebアプリケーションの基本部分を構築する。利用料は無料で、学習時間の目安は5時間となっている。なお同社は、初級編リリースに続き、8月下旬に「中級編」、9月中旬に「上級編」をリリース予定だという。その後は「サーバー構築」や「バージョン管理」といった、実際にWebアプリケーションを開発する際に必要となることの多い知識を学べるレッスンを開発していくとしている。
2015年08月19日セールスフォース・ドットコムは8月19日、コミュニティや非営利活動の支援に取り組むセールスフォース・ドットコム ファンデーションが、NPO法人日本教育再興連盟と福島県飯館村教育委員会の主催する「つぼみプロジェクト ~夏のスタディツアー2015」において、福島県飯館村の子どもたち向けにプログラミング教育のワークショップを提供すると発表した。セールスフォース・ドットコム ファンデーションは、同プロジェクトに参加する飯館村の小学生約20名をセールスフォース・ドットコム東京本社オフィスに招待し、STEM教育(Science、Technology、Engineering、Mathematicsの分野を統合した理数系教育)として、子どもたち向けにマンツーマンのプログラミングのワークショップを行い、テクノロジーによる社会課題の解決について考えるきっかけを提供する。また、社員との交流やオフィスの見学を通じて、子どもたちが将来就業することをイメージできるようにサポートする。福島県飯館村では、原発事故の影響で住民の就業率が低下したこともあり、子供たちが将来就業することのイメージを持ちづらくなることが懸念されている。支援は、同プロジェクトをとおして、子供たちに将来の仕事について考えるきっかけを与えることを目的としているという。
2015年08月19日個別指導型のオンライン・プログラミングスクール「CodeCamp」を運営するコードキャンプは8月3日、現役学生を対象とした「CodeCamp for Students」を同日から9月30日の夏休み期間限定で開講したと発表した。CodeCampは、全国どこからでもプログラミングのマンツーマン・レッスンを受けることができる個別指導型のオンライン・プログラミングスクール。ユーザーひとりひとりのレベルや目的に合った、現役エンジニアによる1対1レッスンが行われている。今回同社が開講したCodeCamp for Studentsには2つのコースが用意されている。独力でWebサービスを開発したいユーザーやエンジニアになりたいユーザーを対象とした「マスターコース for Students」では、HTML5/CSS3、JavaScript/jQuery、PHP/MySQLを学ぶことができる。また、自分のWebサイトを作りたいユーザーや、プログラミングについて理解したいユーザーを対象とした「スタンダードコース for Students」では、HTML5/CSS3、JavaScript/jQueryを学ぶことができる。受講料は「マスターコース for Students」が19万8,000円で、特典を利用することで最大4万8,720円の割引となる。また、「スタンダードコース for Students」の受講料は、9万8,000円。特典を利用することで、最大3万4,720円の割引となる。入学金はそれぞれ1万円となっている(すべて税別価格)。これらのコースは、25歳以下の現役学生が対象となり、申込みの際に学生証の提示が必要となる。
2015年08月03日ギノは7月30日、ITエンジニアに特化したプログラミング転職サイト「paiza」にて、ITエンジニアを志す学生向けの就職を支援するサービス「paiza 新卒」を8月1日より開始することを発表した。「paiza 新卒」はエントリーシートの代わりにpaizaが用意したプログラミング問題を解くことで、書類選考なしで面接へ進める就職支援サービス。スキルチェックで企業指定のランクが取れれば、エントリーシートを書かずに面接へ行ける。また、優秀な人材は企業からのスカウトを受けることもある。paizaでは、従来より「プログラミングスキルチェック」にてプログラミング問題を解いたITエンジニアのスキルを6ランクに分け、求人企業が指定したランク以上を取得できていれば、書類選考なしで必ず面接に進めるという転職支援サービスを運営してきた。同社は「paiza 新卒」でもその仕組みを活かして、通常の採用プロセスでは見つけにくい技術力の優れた学生を発掘することで、ITエンジニアを目指す学生が、より有利に就職活動を進められるようサポートしていく考えだ。同サービスの展開により、今後1年以内に、学生登録者数を現在の5,000人から、20,000人に増やしていくことを目指していくという。
2015年07月30日武蔵野銀行は23日、顧客の様々な教育資金ニーズに対応するため「教育サポートキャンペーン」を開始した。○一定の条件を満たすと通常標準金利から年1.40%の金利を差し引きする「教育サポートキャンペーン」は、2016年4月30日までのキャンペーン期間中に「むさしの教育ローン」または「プレミアム教育ローン」を申込みをした顧客(申し込み方法の条件あり)が、一定の条件を満たした場合、通常標準金利から年1.40%の金利を差し引きするとしている。今後も武蔵野銀行は、顧客へのより一層のサービス向上に努めていくとしている。
2015年07月27日誠文堂新光社が発行する科学雑誌『子供の科学』は7月1日より、小中学生向けのプログラミングコンテストを実施している。『子供の科学』では、これまでにMITメディアラボが開発した教育用プログラミングツール「Scratch」でゲームをつくる連載記事を実施するとともに、小学生向けのプログラミング教室「Tech Kids School」と協力して読者向けのプログラミング教室を展開してきた。同コンテストは、記事や教室を通してプログラミングを学ぶ子供たちの力を発揮する場として企画されたもので、オリジナルゲームの制作テクニックを競う「ゲーム部門」と、ゲーム・動画・ツールなど何でも応募可能なアイデア勝負の「自由創作部門」の2部門を実施。自由創作部門では、『子供の科学』誌に登場するさまざまな人気キャラクター(サイトにてダウンロード)を使って制作することが条件となっている。作品の募集は、9月13日まで。Windows(Windows 7以上)、Mac(OS X ver10.8(MountainLion)以上)、GNU/Linux、Android、iOS環境で動作すれば、どの言語で制作してもよい。応募された作品は、テクノロジー(技術力)・デザイン(芸術性)・アイデア(独創性)を基準に、『子供の科学』編集部とTech Kids Schoolによる審査が行われる。最優秀賞および優秀賞の受賞者にはオリジナルプレゼントが用意されているほか、作品を雑誌およびコカねっと上で発表、受賞イベントを開催予定だという。
2015年07月27日英BBCは7月7日(現地時間)、2015 Make it Digitalイニシアチブの一環としてコーディング教育向けボードコンピュータ「BBC micro:bit」を提供するプロジェクトの詳細を明らかにした。英国ではプログラマー不足が深刻化しており、若い世代にデジタルスキルを身につけさせ、テクノロジ分野における次世代のパイオニアを育成するためにBBCはmicro:bitの提供に乗り出した。まずは最大100万台を英国内のYear 7(中学1年)の11歳~12歳に無償配布し、2015年後半には販売も開始する。micro:bitの開発・提供は以下の11組織を含む29のパートナーシップによって実現した。ARM: mbedハードウエア、SDK、コンパイラサービスBarclays: 製品流通elements14: 部品調達、製造管理Freescale: センサ、USBコントローラLancaster University: ランタイムMicrosoft: TouchDevelopツール、サービスホスティングNordic Semiconductor: プロセッサSamsung: AndroidアプリScienceScope: iOSアプリTechnology Will Save Us: デザインThe Wellcome Trust: 教育関係者向けサポートmicro:bitは5×4センチ (重さ:8グラム) のコンパクトなボードに、ARM Cortex M0 CPU (32-bit)、3軸の加速度センサ、デジタルコンパス、Bluetooth Smart、Micro-USBコントローラ、Five Ring I/O、5×5に配列された赤色LED、プログラマブル・ボタン×2などを備える。JavaScript、Python、C++、MicrosoftのTouchDevelop言語、ビジュアル言語BlocksなどをサポートするWebベースのエディタを使ってプログラミングし、クラウドでコンパイルしたプログラムをmicro:bitにダウンロードする。Webベースの開発環境はスマートフォンやタブレットでも使用でき、Bluetooth Smart Technologyに対応しているモバイルデバイスからはBluetooth経由で直接micro:bitにフラッシュできる。プログラムされたmicro:bitは単4型電池×2を電源に単独で動作するほか、USBやBluetoothでノートPCやRaspberry Pi、スマートフォン、タブレットなどに接続して外部デバイスとして機能させられる(Tetheredモード)。たとえばセンサーデバイスとして使用したり、音楽やビデオの操作デバイス(再生/一時停止/停止など)として使用できる。Tetheredモードではインターネットに接続できるため、IoT(Internet of Things)オブジェクトのように使うことも可能だ。
2015年07月08日Pythonに限らず、多くのプログラミング言語には「関数(Function)」という概念があります。関数は特定の機能を「呼び出す」ために使われます。たとえば今までの回で利用していたprint()も関数のひとつで、()の中に入れた変数や定数を出力するという処理を呼び出します。今回はこの関数と、コードを整理するための「モジュール」について扱います。○関数でしか実現できないことプログラムは必ず、キーボード入力やファイルの読み込みといった「外からの情報の入力」と、ディスプレイやスピーカー出力といった「外への情報の出力」を必要としています。入出力のないプログラムも作れますが、動かしても「プログラムの外の世界」に何も影響がないので、CPUとメモリを無駄に消費するという目的以外には使えません。変数や条件分岐といった制御はあくまでもデータを処理するための手段でしかなく、プログラムの外とやりとりするためには関数が必須です。先に説明した画面への文字出力を行うprint関数もその一例です。プログラムが読みやすくなる「関数を使わなくても書けるコード」も、うまく関数を使うことでより良いコードになります。関数を使うとプログラムが読みやすくなるというメリットもあります。例をあげて説明してみます。絶対値を得ようと思った場合、以下のようにif文で条件分岐させることで実現が可能です。x = -5if(x<0):x = x * -1print(x)2、3行目を見てもらうとわかりますが、「もしxが0より小さければ、xに-1をかける」という処理をしており、絶対値を得ているということが読み取れますね。同じ処理を、絶対値を得る関数abs()を使って書くと、以下のようになります。x = abs(-5)print(x)前者と後者は同じことを実現していますが、どちらのほうがわかりやすいと思いますか。圧倒的に後者ですよね。関数も、突き詰めると中は処理の塊です。ただ、関数の名前はその「処理の要約」なので、どういう実装で処理が実現されているのかは関数の利用者に隠蔽されており、たとえばabs()では、「どうやって絶対値を求めるか」を理解していなくても、絶対値をパッと得ることができます。人間の思考能力には限界があるので、ゴチャゴチャとした実装を見せられるよりは、関数名という要約を見せられたほうが、何をやっているか判断しやすくなります。同じコードを何度も書かなくてすむプログラムを書いていると、同じ処理を何度も使うという場面が多々あります。たとえば「2つの数字の絶対値を比較する」というプログラムを作る場合、関数を使わないと以下のように絶対値を得るコードが2回出現する冗長なものとなります。x = 5y = -10if(x<0):x = x * -1if(y<0):y = y * -1print(’abs x > abs y ?’)print(x > y)xとyの絶対値を得る処理はほとんど同じなのにもかかわらず、2回書いていますね。2回程度なら書いてもいいような気もしますが、これが5回、10回となればどんどん面倒になっていきます。先のコードを、関数を使って書き直すと以下のようになります。x = 5y = -10x = abs(x)y = abs(y)print(’abs x > abs y ?’)print(x > y)冗長な要素が省かれてずいぶんと読みやすくなったのではないでしょうか。今回はabsのような簡単な関数でしたが、これがたとえば100行以上必要なアルゴリズムだったら、関数で冗長性を減らすことによる多大な恩恵を得られます。また、同じコードを何度も書いていて、そのなかに「バグ」があることがわかった場合、すべての場所に修正を施す必要があります。一方、関数で同じ処理をまとめていると、理想的には一箇所のみの修正となります。これはプログラムの「保守性(メンテナンス性)」を向上させるというメリットがあります。○関数の宣言と使い方関数のメリットがわかったところで、関数をどのように作って利用するかを具体的に説明していきます。以下の図を見てください。これが関数の基本的な概念です。関数は入力を受け取り、それを加工して出力する。基本的にはこれだけです。入力と出力はそれぞれなくてもかまわず、入力がない場合は関数の宣言の引数(入力の宣言)をなくし、出力が不要な場合はreturn文(出力の宣言)をなくします。具体的には以下のように関数を定義します。# 引数がない関数def my_func1():return 0# 返り値がない関数def my_func2(x):x = x * -1関数をどう呼び出すかについては今までさんざん利用したのでなんとなくわかると思いますが、宣言した引数に対応する箇所に入力値を入れることで呼び出します。ひとつ目の変数は引数がないので、呼び出し時に()に何も入れていないものの、後者は引数をとるので()に値を与えています。print(my_func1()) # 0 と表示されるprint(my_func2(5)) # None と表示される簡単ですね。ほかに知っておくべきこととしては、引数は複数指定できますが、return文は一度しか実行されないというルールがあることです。これも具体例を示しましょう。def my_func3(x, y):print(’A’)if(x > y):return xprint(’B’)return yprint(my_func3(5,1))# A# 5print(my_func3(2,4))# A# B# 4上記関数では入力値を2つとっています。コンマで区切られた引数の数のぶんだけ入力を受け付けるという簡単なルールです。そして、内部では2つのreturn文が確認できます。注目して欲しいのはx < yの条件を満たす場合はprint(’B’)が実行されていないということです。return文はいくつあっても構わないのですが、returnされたあとの関数の処理は一切無視されます。ほかには「デフォルト引数」や「可変長引数」といった関数の書き方もあるのですが、ここでは紹介を控えます。演習で問題を出すので、余力がある場合は自分で調べて書き方を覚えてください。○global宣言関数内の処理の実装は、関数の定義の中で完結すべきです。その関数を実行することで、その関数の外の変数などの値を変更すべきではありません。この思想は守るべきですが、時と場合により守らないほうが、良いコードが書ける場合もあります。関数内でのglobal宣言もそのひとつです。さっそくですが次のコードを見てください。x = 5def add():x += 1print(x)add()print(x)このプログラムを実行するとどのようになると思いますか。addという関数がxに1をインクリメントするので、56と出力してくれそうなところですが、実際はエラーが出てしまいます。Traceback (most recent call last):File "/Users/yuichi/Desktop/hello.py", line 7, in <module>add()File "/Users/yuichi/Desktop/hello.py", line 4, in addx += 1UnboundLocalError: local variable ’x’ referenced before assignment上記エラーを見ると、関数の中で「変数xに値が与えられる前に参照した」というような内容となっています。結論から言いますと、プログラム1行目のxと関数内のxは別物です。そのため関数内のxを使おうとしたところ、エラーが出てしまったのです。どうしても1行目の変数xを関数内で使いたい場合は、関数を以下のように書き換えます。x = 5def add():global xx += 1こうすることで、関数の外で定義された変数xを関数の中で利用することができるようになります。難しい話となってしまうのですが、関数などを動かすことで「期待される範囲を超えた外の世界に影響がおよぶ」ことを「副作用」といいます。この副作用を減らすことがきれいなコードを書くコツですので、意識してみるといいかもしれません。たとえば上記プログラムだったら、globalを使うよりx = 5def add(x):x += 1return xprint(x)x = add(x)print(x)と書くほうがいいです。「同じ入力値を入れたら、同じ出力値を返す」というのが一般的には理想的な関数だと思ってもらえればOKです。○モジュールPythonのプログラムは書けば書くほど大きくなります。数百行のコードでしたらひとつのファイルにすべて書いてしまえますが、何千行にもなってくるとコードを複数のファイルに分けたほうが管理がしやすいです。これは日常生活の整理整頓とまったく同じです。たとえば洋服ダンスがあるとすると、それを使いやすく使うためには下着、シャツ、ズボンといった種類ごとに引き出しを分けて使いますよね。ひとつの大きなダンボール箱にすべての服をつっこんでしまうとどこに何があるかわからなくなり、なおかつ服もきれいに管理できずにシワシワになってしまいます。プログラムのファイルを分けないと、後者のような乱雑な服の管理法に近い形でコードを書くことになります。ひとつの大きなファイルのなかにさまざまなコードをゴチャゴチャと書くのでどこで何をやっているのかわからなくなってきます。一方、特定の処理ごとにファイルを分けて「このファイルはXXの処理」「このファイルはYYの処理」などと整理すると、XXの処理を追加したり修正したりする際にすぐに場所がわかります。Pythonでは「ファイルに分けられた各プログラム」のことをモジュールと呼んでいます。ここではこのモジュールを使ったり、作ったりする方法について学びます。モジュールの利用モジュールを自分で作ることも可能ですが、まずはPythonが提供してくれているモジュールを利用することからはじめていきましょう。モジュールを利用するには「import宣言」が必要です。たとえば、数学処理がまとめられたmathモジュールを利用するには以下のようにします。# import モジュール名import mathこのようにimportをすると、mathモジュールに入っている関数などが利用できるようになります。たとえばmathモジュールの切り捨て関数を使うには以下のようにします。>>> import math>>> math.floor(5.5)5.0モジュール内の関数を呼び出すには"モジュール名.関数()"としますが、毎回毎回これを書くのが面倒であれば、適当な名前の変数に代入してしまってもかまいません。>>> import math>>> floor = math.floor>>> floor(5.5)5.0fromを使うことで、モジュール内の関数をモジュール名なしで呼び出すことも可能になります。# from モジュール名 import 関数名>>> from math import floor>>> floor(5.5)5.0モジュール内の関数すべてをモジュール名なしで呼び出すには以下のようにワイルドカードを使います。ただ、このような乱雑なモジュールの利用法はコードの安全性を保つためにも推奨できません。>>> from math import *今回はすでにpythonから提供されているモジュールを読み込みましたが、自分で作成したモジュールもまったく同じ方法で読み込めます。モジュールの作成モジュールの作成は簡単です。本連載の最初に説明したように.pyという拡張子をつけたファイルにpythonのコードを書くだけです。ここではモジュールmy_util.pyを作成し、それをmain.pyから呼び出す例を示します。my_util.pydef say_hello():print(’hello!’)def say_python():print(’python!’)main.pyimport my_utilmy_util.say_hello()my_util.say_python()実行結果hello!python!特別に難しいことはありませんね。モジュールを書くにあたって注意すべきすることは、それが再利用可能か似た処理のみをまとめているかというあたりです。たとえば標準ライブラリで提供されていない特殊な数値計算が必要なら、その計算のためのモジュールを作ってもよいでしょう。ただ、そこに特殊な文字列処理であったり、ネットワークの処理も書くというのは誤った設計です(もちろん時と場合によりますが)。また、そのモジュールを誰しもが簡単に使えるようにすることが理想です。実際は複雑なプログラムを分割するためだけにモジュール化することも多いのですが、それでも「使いやすい」ように書くことを心がけておくといいかもしれませんね。自作モジュールのテスト余談となりますが、モジュールのテストについて記載します。複数のファイルを使ったプログラムを起動するとき、それらのファイルは大きく分けて起動する起点となるファイル (python xxx.py で指定されるファイル)起動されたファイルがimportするモジュールのファイルに分かれます。すべてのファイルは前者にも後者にもなりえるのですが、前者の場合のみだけ実行したい特別な処理がある場合はif(__name__ == ’__main__’):処理とすると、上記の「処理」はモジュールとして読み込んだ場合は実行されません。たとえば先程のmy_util.pyを以下のように変更します。def say_hello():print(’hello!’)def say_python():print(’python!’)if(__name__ == ’__main__’):print(’my_util.py: loaded as script file’)else:print(’my_util.py: loaded as module file’)そしてこれを、直接呼び出してみます。% python my_util.pymy_util.py: loaded as script fileif文の条件がTrueとなり、Trueの際の処理が実行されていますね。次に、先ほど作ったmain.py経由でmy_util.pyを使ってみます。% python main.pymy_util.py: loaded as module filehello!python!今度はif文のelse節が実行されていますね。通常、直接起動されないモジュールを作る際、そのif(__name__ == ’__main__’)の中にモジュールをテストするような処理を書いておくと、プログラムの保守性が増します。覚えておくと便利かもしれません。演習1絶対値を返す関数my_absを作成して下さい。この関数内では標準ライブラリなどで提供されているabs関数などは使わないでください。演習2引数で与えた数だけフィボナッチ数を配列で返す関数my_fiboを作成してください。フィボナッチ数については調べればすぐにわかるはずです。演習3演習1、2で作成した関数もしくは自分で適当に作成した関数をモジュール化し、それを別ファイルから利用してみてください。import文、from文の両方を使ってみてください。※解答はこちらをご覧ください。Pythonのプログラムを起動する際にオプションとしていろいろなパラメータを与える「コマンドライン引数」と呼ばれる手法があります。次回はコマンドライン引数の扱い方について学びます。また、プログラムに対してキーボードで入力を行う標準入力についても学びます。
2015年07月06日プログラミング教育の必要性について議論が盛り上がっている昨今、Life is Tech! やCA Tech Kidsなどプログラミング教室を事業として行う企業も増えてきた。その一方で、総務省の調査結果をみると、プログラミング教室の開催地は都市部に集中しており、地方での開催例は未だ少ない現状もうかがえる。こうした状況のなか、地方からプログラミング教育を盛り上げるべく、Rubyの開発者 まつもとゆきひろ氏が在住する島根県松江市を中心に活動を行っているのが、「Rubyプログラミング少年団」だ。Rubyプログラミング少年団は、毎月第3日曜日の「しまね家庭の日」にあわせて小学3年生以上の児童を対象に1日プログラミング体験教室を開催している。「親と子どもの会話を大切に」という「しまね家庭の日」のコンセプトに沿って、子どもと保護者にそれぞれ1台ずつ用意されたコンピュータを使用し、親子でコミュニケーションをとりながら進めていく形式になっている。プログラミングの作業に用いるのは、小型シングルボードコンピュータ「Raspberry Pi 2」とビジュアルプログラミングツール「Smalruby」。Smalrubyは、ブロックを組み合わせていくことで簡単にゲームやアニメーションを作成できるもので、ボタンひとつでプログラムをRubyコードに変換して確認することが可能だ。1日体験教室には小学3年生の児童も参加していたが、スタッフのサポートを受けながら、オリジナルのゲームを作成することができていた。Rubyプログラミング少年団の代表を務める高尾宏治氏は、自分の子どもにプログラミングを教えたいという思いをきっかけに、2014年2月からSmalrubyの開発を行ってきた。それまでのプログラミング教室では、中学生に向けてRubyのソースコードを“写経”するような講義を行っていたが、Smalrubyによって、対象が小学生まで広がり、また子どもたちが自分で考えたオリジナルのプログラムを作れるようになったため、よりプログラミングの楽しさを伝えることができるようになったという。「都会では、保護者が積極的にプログラミング教室への参加を促しているが、地方では子どもがコンピュータやインターネットを利用することに対して抵抗がある保護者が多く、プログラミング自体にもあまり興味を持っていないように感じている」という高尾氏。親子でのプログラミング体験教室への参加を勧めているのは、保護者に実際にプログラミングを経験してもらうことで、子どもとインターネット社会との関わり方について理解してほしいという狙いがあるためだ。また、1日体験教室でプログラミングに興味をもち、もっと勉強してみたいと思った児童のために、ステップアップのための「プログラミング道場」という月に1回行われる無料のプログラミング教室も用意されている。最近、徐々にプログラミング道場への参加希望者が増えてきており、現在は10名の小学生がスタッフに手伝ってもらいながらそれぞれ自分の考えたゲームを開発している。高尾氏は、「将来的には“スポーツ少年団”のプログラミング版にしていきたい」としている。スポーツ少年団とは、運営元の日本体育協会によると「子どもたちがスポーツを楽しみ、野外・文化・社会活動などを通じて協調性や創造性を養い、社会のルールや思いやりのこころを学ぶ」もの。全国大会やプロを目指すというよりは、スポーツをとおして子どもたちの健全な心を育てて行くことを目的としている。プログラミング教育には、次世代のIT人材育成を期待されている面もあるが、Rubyプログラミング少年団としては、まずプログラミングの楽しさを知ってもらい、コンピュータやネットリテラシーを身につけた子どもたちを増やしていくことを主眼に置いている。今後は鳥取にも拠点を広げて行く予定で、「いずれは日本全国の各地域に展開していきたい。地方でプログラミングを教えてみたいと思っている方は、ぜひ問い合わせていただければ」(高尾氏)。今年の秋にも、NPOとしてプログラミング少年団を法人化し、その土台を固めていく考えだ。
2015年06月29日第5回は「型と変数」の後編です。前回の記事を読まれていないかたは先にこちらをご覧ください。○文字列型プログラミングでは、テキストデータを扱うことが非常に多いです。そのため、テキストデータを扱う「文字列型」を使いこなせるようになることが重要です。数字はそのまま書けば認識されていましたが、文字列は「特別な記号」でテキストを囲むことではじめて、Pythonで解釈できるようになります。今まで特にことわりなくシングルクオテーション「’」を使っていましたが、それもその特別な記号のうちのひとつです。たとえば、text = ’abcdefg’のように使います。テキストも数値と同じように演算することができます。先に示したように「+」で結合もできますし、あまり知られていませんが「*」で同じ文字列を繰り返すこともできます。>>> text = ’hello’ + ’ python’>>> print(text)hello python>>> text = ’hello’ * 3>>> print(text)hellohellohello文字列をコードで作成するやりかたは以下の3つです。シングルクオテーションで囲む「’」という記号がシングルクオテーションです。シングルクオテーションで囲むのが、Pythonで最も一般的な文字列の宣言です。空白文字もそのまま含めることができます。>>> text = ’hello python’>>> print(text)hello pythonタブや改行といった特殊な文字はエスケープ処理をすることで加えることができます。たとえば改行は、"\n"と表現されます。英語キーボードの半角の\(バックスラッシュ)と日本語キーボードの¥は同じ意味なので、\n(バックスラッシュは半角)も改行の意味を持ちます。>>> print(’hello \n python’)hellopythonわかりやすいように\nの前後に空白をいれましたが、改行させたいだけの場合は空白は不要です。’hello\npython’と書けば改行コードが入ります。ダブルクオテーションで囲むダブルクオテーションは「"」記号のことです。これで囲むとシングルクオテーションと同様に、文字列として認識されます。ほかのプログラミング言語だとダブルクオテーションのほうがよく使われるので、Pythonでもこちらを好んで使う人がいます。シングルクオテーションとダブルクオテーションの使い分けは特に決まったものはないのですが、「シングルクオテーションをダブルクオテーションで囲むと文字として扱われる」というルールがあるので、文字列の中にシングルクオテーションを使いたい場合はダブルクオテーションを使うと便利かもしれません。>>> print("it’s nice!!")it’s nice!!>>> print(’it\’s nice!!’)it’s nice!!2つめの例のようにエスケープ記号を使うことで、シングルクオテーションの中でシングルクオテーションを使うこともできます。ダブルクオテーションでシングルクオテーションを囲むのと同じように、シングルクオテーションでダブルクオテーションを囲むこともできます。その効果はまったく同じで、ダブルクオテーションをエスケープせずに文字列で使うことができるというものです。トリプルクオテーションで囲む最後にトリプルクオテーションを紹介します。これはテキストをシングルクオテーションかダブルクオテーション3つで囲むというものです。トリプルクオテーションで囲まれると、その中身が見たままにテキストとして表示されます。>>> text = ’’’it’s nice!!’’’>>> print(text)it’s nice!!プロンプトでは使えませんが、ファイルにプログラムを書き込む場合は、改行も含めてひとつのテキストにすることが可能です。たとえば以下をPythonのプログラムファイルに書き、text = ’’’hellopython’’’print(text)それを実行するとhellopythonが返されます。ちなみにトリプルクオテーションは文字列の宣言としての利用よりも、複数行のプログラムをコメントアウトするときに使われることが多いかもしれません。たとえば以下のような例があげられます。処理1’’’処理2-1処理3-1’’’処理2-2処理3-2処理4処理2,3の動きを変更したいと思ったので、昔の処理「2-1,3-1」を文字列にしてしまうことで実行されないようにして、新しく「処理2-2,3-2」を書いたものです。改良やバグ探しの場面では「昔の処理は実行させたくないのだけれども、消したくはない」ということが多く発生するので、そのようなときにトリプルクオテーションが便利です。また、関数やクラスの前に「それが何をやっているか」ということをトリプルクオテーションで表明することもよくあります。なお、CやJavaでいうところの範囲指定のコメントアウト「/** コメントアウト **/」はPythonでは使えないので注意してください。文字列型の操作文字列の操作については後の連載で詳細を扱いますので、ここでは簡単な説明にとどめておきます。演算子の利用は先に話したとおりです。>>> ’hello’ + ’python’’hellopython’>>> a = ’hello’>>> a += ’python’>>> print(a)’hellopython’これに加えて関数を使う方法もあります。たとえば数値などの「文字列でない型」を文字列型にするにはstr関数を使います。この関数で囲ったすべての型は文字列に変換されます。>>> str(5)’5’>>> str(5.5)’5.5’この関数は文字列に「文字列以外の型」を結合する際によく使われます。この変換をしないとエラーになる場合が多々あります。たとえば、以下の1行目の「文字列 + 数値」はエラーとなりますが、2行目は「文字列 + 文字列」なので問題ありません。>>> ’hello’ + 5Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: cannot concatenate ’str’ and ’int’ objects>>> ’hello’ + str(5)’hello5’文字列に対するより複雑な操作は「文字列から関数を呼び出す」ことで行います。なぜこのような書きかたをするかについては連載後半で扱いますが、とりあえずは "文字列.関数()" とすることで文字列に対する操作をすると覚えておいてください。文字列を格納した変数に対して "変数.関数()" としても同じです。>>> a = ’Hello Python’# ’Py’ が ’Hello Python’ の前から何番目にあるか。0からカウント。>>> a.find(’Py’)6# ’Hello Python’ を小文字にする>>> a.lower()’hello python’# ’Hello Python’ を空白 ’ ’ で分割する>>> a.split(’ ’)[’Hello’, ’Python’]# ’Hello Python’ のなかにある文字列 ’Hell’ を取り除く>>> a.strip(’Hell’)’o Python’○Bool型Boolは別名「真偽値」とも呼ばれる型です。真偽値という名前を聞くとなんだか難しそうに思えるかもしれませんが、要するにYES/NOに相当する「True/False」という「正か非」の2値しかない単純な型です。Pythonのプログラム中で "True" と "False" は特別なキーワードとして扱われます。それぞれその言葉のとおりに、YES/NOとしてPythonに解釈されるのです。このようなキーワードのことを「予約語」と呼び、予約語は変数名や関数名に使うことはできません。Boolは「比較演算子」と呼ばれる記号で2つの値を比較した際に返されます。例として数字の大小を比較してみます。>>> 10 > 5True>>> 10 < 5False>>> a = 10 > 5>>> aTrue特に難しいことはありませんね。「10は5より大きい -> True(YES)」とされていますし、「10は5より小さい -> False(NO)」とされています。Boolを変数に格納することも当然できます。比較演算子の一覧を以下に記載します。and、or、notがCやJavaと異なりますが、それ以外はほぼ同じです。以下に例を書いてみます。>>> ’hello’ == ’world’False>>> ’hello’ != ’world’True>>> a = ’hello’>>> b = ’hell’ + ’o’>>> a == bTrue>>> not TrueFalse>>> True and FalseFalse>>> True or FalseTrueほかには返り値がBool値である関数もよく利用されます。Bool型は次回以降で扱う「ifやfor」といった制御文で利用されることが多いため、これもマスターが必須な型です。条件分岐のif文では、たとえば変数aがTrueなら処理Aを実行し、Falseなら処理Bをするといった使い方をします。具体的にBoolをどのように書くかは制御文を学ぶ際に理解できると思いますので、今回はここで解説を切り上げます。リストリスト(List)が今回紹介する最後の型です。言葉からわかるようにデータを「リスト」状に複数個並べたような型です。今までの数値や文字列、Boolに比べると使いどころがよくわからないかもしれないので、まずは例を示します。たとえば生徒のテストの点数を管理するアプリケーションを書くとします。リストを使わずに3人の生徒の平均点を求めようとすると、以下のようなコードが書けます。student1 = 68student2 = 81student3 = 49average = (student1 + student2 + student3) / 3print(average)生徒ごとに変数を作って、そこから平均値を求めています。それほど難しくはありませんね。ただ、上記のプログラムには問題があります。たとえば生徒の数が4人になった場合などに修正する箇所が多くなってしまうことです。生徒が40人だと変更はもっと大変です。このような問題は、リストを使うことでかなり解消できます。リストは「リストというデータの中に複数のデータを格納できる」という型ですので、「生徒達の点数」というデータに「具体的な各生徒の点数」を格納します。results = [68, 81, 49]average = sum(results)/len(results)print(average)1行目では「生徒たちの点数」というリストを作成しています。見ればわかると思いますが、リストは [] の記号のなかにコンマ区切りでデータを羅列することで作成されます。2行目にあるsum()はリスト内にあるデータの合計値を算出する関数で、len()はリストに格納されるデータの数を返す関数です。ここでは平均値を求めるために「生徒の点数の合計値/生徒の人数」としています。2番目のコードは生徒一人ひとりの点数ごとに変数を作成していないので、「複数の生徒たちの点数の格納」も簡単ですし、なにより平均値の算出方法が生徒の数に依存していません。このようにリストを使うことで「ひとつのグループに属するデータ」を便利に扱うことができます。リストの概念を以下に記します。リストの操作リストがどのようなものかわかっていただけたかと思いますので、操作方法について例を交えながら説明していきます。リストの作成は以下のように [] 記号でリストの要素を囲むことで実現できます。>>> a = []>>> b = [1, 2, 3]>>> c = [1, "2", False][] の中に何も入れない場合は空のリストを作成します。注意が必要なのは3行目のように「リストの中にはさまざまなデータが入れられる」ということです。基本的には同じ型しか入れられないCやJavaの配列やリストとは違うので注意してください。次にリストの「要素」を取り出したり、書き換えたりする方法を示します。先の b = [1,2,3] では要素数が3つあるリストを作成していて、その中身は1、2、3となっています。この中身を取り出すためにはリスト内の「x番目の要素を指定」する必要があります。そのためには、リスト名[要素の番号]とします。ただ、気をつけなければいけないのは、指定する順序は1からではなく0からということです。たとえば、以下のように使います。b = [1,2,3]print(b[0]) # -> 1print(b[2]) # -> 3b[1] = 5print(b[1]) # -> 5ちなみに、この「x番目」ということを「インデックス番号」と呼びます。b[2]は、「リストbのインデックス番号が2の要素」という意味になります。次にリストにデータを追加する方法です。追加するといっても「リスト末尾への追加」と「リストの途中への追加」でやりかたが異なります。これには文字列型の説明でお伝えした「変数名.関数()」という操作方法を使います。>>> b = [1,2,3]>>> b.append(4) # 末尾への追加>>> print(b)[1, 2, 3, 4]>>> b.insert(1,10) # 1番目の要素に10を追加>>> print(b)[1, 10, 2, 3, 4]追加とくれば削除です。削除にはremove関数を使います。>>> b = [1,2,3]>>> b.remove(1)>>> print(b)[2, 3]ほかにもさまざまな操作がありますが、あえてひとつだけあげるのであればリスト長の取得です。リスト範囲外へのアクセスはエラーになってしまうので、リスト長を超えたアクセスをしないためにもリスト長をどうやって取得するかを知っておく必要があります。>>> b = [1,2,3]>>> b[3]Traceback (most recent call last):File "<stdin>", line 1, in <module>IndexError: list index out of range>>> len(b)3つまり、len(配列)で配列長を得て、要素へのアクセスは「配列長 - 1」番目までとすればよいのです。これら以外のリストの使い方については、まず上記をマスターしてからでよいと思いますので、解説はいったんここで終えます。配列とリストこのセクションではCやJavaの「配列」とPythonのリストを比較します。そのため、配列をそもそも知らない方は、飛ばしてもらってかまいません。まず簡単に両者のイメージ図を記載します。左側の配列は「メモリ」上に連番でデータを格納するスペースを用意するのに対して、右側の「リスト」は複数のデータ間を順序を持って結びつけることで実現されています。Pythonのリストは、CやJavaのVectorやListに相当する型です。Pythonのリストはまるで配列のように利用されますが、CやJava の配列とは大きく異なります。たとえば純粋な配列では、「要素(配列やリストの中にあるデータ。Elementとも呼ぶ)」の間に新しいデータを挟み込むことはできません。そのため、配列に入っている要素を詰め替えるなどしてデータを追加します。一方、リストはN-1番目の要素とN番目の要素の間に新しいデータを挟み込むことができます。配列ではメモリ上に要素を連番で格納するためのスペースを用意するのに対し、リストは以下の図のようにバラバラに用意された要素間を順に結びつけることで実現されているためです。Javaの配列のコードを確認してみます。int a[] = {0, 1, 2};System.out.println(a[1]); // 2番目の要素の値を取得 -> 1System.out.println(a.length); // a の配列長を取得 -> 3a[1] = 10;a[3] = 3; // Error1行目では要素数3のint型の配列の変数を宣言し、それに代入しています。前記事でお伝えしたように、Javaの変数には型があるのでしたね。a[x]とすると配列aのx番目の要素にアクセスできます。そして、a.lengthとすることで配列長が取得できます。4行目では配列の2番目の要素に値を代入しています。ただ、5行目では配列長3の4番目の要素に値を代入しようとしているのでエラーとなってしまいます。次にPythonのリストを使ってみます。Pythonの変数には型がないので、特に型を指定していない変数aに[0, 1, 2]という3要素のリストをそのまま代入しています。2行目ではリストの中身を確認しています。そして3行目では配列長を取得しています。a = [0, 1, 2]print(a[1]) # 2番目の要素の値を取得 -> 1print(len(a)) # a の配列長を取得 -> 3a[1] = 10;a.append(3)print(len(3)) # 4異なるのは5行目です。配列は配列長を超えて要素を代入することができませんが、リストはリスト長を伸ばすことができます。Pythonではリストをまるで配列のように使いますが、両者はあくまでも別物という認識を持っておく必要があります。演習1文字列 ’ hello ’ から前後の空白をすべて取り除いてください。演習2以下の図のCとDおよび2つの円をくっつけた領域をAとBを用いて表現してください。次回は制御構造について扱います。今回取り扱ったBoolやリストは制御構造に大きく関わるので、不安な人はもう一度資料を読み直すなどしておいてください。
2015年06月22日