子どものお稽古ごと、といえば何を思い浮かべますか?水泳、習字、ピアノ……とおなじみのお稽古ごとが並ぶなか、近ごろ脚光を浴びているのが“プログラミング ”です。 『ケイコとマナブ.net』が2016年に行なった「子どもに習わせたいお稽古ごと」調査でも、小学校高学年部門で5位にランクインするほどの人気急上昇ぶり。これは、2020年をめどに、小学校でプログラミングの授業を必修化するという文部科学省の方針を受けての流れなのかもしれません。ただ、まだ小さい子どもを長時間パソコンの前に座らせることに抵抗を感じる大人たちだって少なくないのも事実です。「他の教科学習が疎かになるのでは」「自然に触れるほうが大切では」という声もまだ聞かれます。気になるプログラミングのお稽古、果たしてどんなメリットがあるのでしょうか。今回は、お子さんをプログラミング教室に通わせている方々のコメントを紹介しましょう。●(1)プログラミング教室のメリット『そもそもプログラミングとは、コンピュータに動きを指示することを指します。そしてコンピュータというのは、とっても“物わかりが悪い”物体なんです。きちんと論理だてられ、矛盾や曖昧さのない指示しか理解することができない、頭の固い厄介者なんですよ。プログラミングを学ぶということは、そんな融通の聞かないヤツに、どうすれば自分の思いを伝えられるかを学んでいくこと なんです。つまり、相手をよく理解し、相手に合わせた論理的な文章を組み立てる力を磨くということ。問題解決のための論理的思考力がつくというのはこのことなんですね。わが子もプログラミングを学ぶようになってから、話をする前に一旦考え、理路整然と会話するような姿勢 が見られるようになりましたよ』(40代男性/小学5年男児の父)『プログラミングって、ブロック遊びに近いと思います。幼いころは適当にあるものをつなぎ合わせ、でき上がったものを見て「これ、でんしゃ」「これはビル」といいますよね。でも成長して、ブロック遊びの真髄がわかってくると、まず頭のなかで大体の設計図をつくってから取り組むようになります。例えば「今日はスイッチのあるロケットを作りたい。必要な部品はコレとコレで、まずはコックピットから作ろう」という塩梅です。プログラミングも、最初は手当たり次第メチャクチャにやるので無駄が多い。まさにトライ&エラーの連続です。でも、慣れてくると頭のなかで設計図をくみたててから、言語を操ることができるようになってくるんですよ。この能力は、物事の見通しをたてる という力につながっていると感じます。日常生活でも重要ですよ。例えば目的地があって、定刻にたどり着くにはどうしたらいいか。そんなことがきちんと考えられるようになります』(40代女性/小学3年男児の母)このように、思考力や論理力、見通し力などをつけることができたという声が最も多く挙げられたメリットでした。より身近な局面として、こんなコメントをくれたママさんもいました。『あんまり難しいことは私にも分からないんですけど……単純に、キーボード操作などから教えてもらえるのがよかった かな。家にパソコンがあっても、タッチタイプのしかたなんて子どもに教える機会ないですからね。それと、うちの子の通ってるスクールはプログラミングに入る前に、ネットリテラシーの授業があったのがよかったですね。インターネットとのうまい付き合い方や、情報の取捨選択を子どもなりに考えてくれるようになりました。いま、学校裏サイトとかワンクリック詐欺とか怖いですから……』(30代女性/小学6年女児の母)たしかに、両親ともにタッチタイプができても、わざわざ家庭で時間をとってまでお子さんにそれを教えたりはしませんよね。そういった点から教えてもらえるのも、メリットといえそうです。●(2)プログラミング教室の注意点デメリットとというほどではないものの、注意した方がいい点もあるようです。『スクールで習ってくることが高度すぎて、自宅で子どもに質問されても全く答えられませ ん 。プログラム系のことだけではなく、自然科学についても深く考えるようになってしまったので、正直いって会話が難しくなってきましたね。最近はもっぱら“元理系男子”のパパが話し相手になってくれてます。話は盛り上がっているようですが、私はなんとなく疎外感(苦笑)』(40代女性/中学1年男児の母)パパが理系ならまだいいものの、文系パパだとちょっぴり困ってしまうかもしれませんね。お子さんの質問に家族全員でタジタジ……とならないために、パパやママの知力アップも必要になってくるのかもしれません。もうすこし専門的な意見としては、次のようなものもありました。『どんなプログラミング教材を使っているのかは、入会する前によく調べておいたほうがいいかもしれません。子ども向け教材の中には、実生活への転用性がなく、いくらそれを極めても職業にはならないもの があります。また、できることの限界が浅く、能力が高い子ほど「つまらない」と感じる傾向もあるようです。ご両親に知識がなく、違いがわからないということなら、同僚や知り合いのエンジニアに相談してもいいでしょう』(50代男性/高校1年男児、中学2年男児の父)----------参考になったでしょうか?今の子どもたちは、生まれたときからパソコンやインターネットに囲まれている“デジタルネイティブ世代”。ITの恩恵をただ消費するだけでなく、その仕組みを理解することが生き残りのキーポイントになるともいえます。お子さんの将来が気になるママさん、パパさん。まずは一度体験教室の門を叩いてみてはいかがでしょうか。新たな世界が広がるかもしれませんよ。【参考リンク】・ケイコとマナブ.net | RECRUIT()●文/パピマミ編集部●モデル/REIKO(SORAくん、UTAくん)
2017年02月13日いま、教育現場が大きく変わろうとしています。2020年を目標に、小学校でプログラミングの授業を必修化させようという動きがあるのです。IT関連ビジネスが拡大していくなか、WebエンジニアなどのIT人材の不足が問題になっています。その対策として先日、文部科学省が打ち出した方針です。日本の義務教育にとって大きなターニングポイントになりそうなこの改革。実は、子育て世代のママ・パパたちの耳にはあまり届いていないようです。情報セキュリティメーカーのデジタルアーツ株式会社は、0歳から6歳までの子どもの保護者672名を対象にアンケートをとりました。それによると、この方針について「知らない」と回答した保護者が54.5%にものぼることが明らかになりました。未就学児童の保護者の半数以上が知らない改革が、小学校で行われようとしているのです。●これまでの経緯この方針は、もちろん急に決定したことではありません。まずは、これまでの経緯を簡単におさらいしておきましょう。2012年、中学校の技術家庭科で『プログラムによる計測・制御』が必修になりました。アルゴリズムやフローチャートの書き方を学び、実際にプログラムを組んでロボットを操作するなどの授業が各校で行われています。続く2013年6月には、政府の成長戦略の中に“義務教育段階からのプログラミング教育等のIT教育を推進する ”という内容が盛り込まれました。それを受けた文部科学省が有識者を集めて会議などを行い、2016年4月、小学校でのプログラミング教育必修化を検討する旨が発表されたのです。●賛成or反対? 保護者たちの声子育て中のママ・パパたちはこの改革についてどのように感じているのでしょうか。ここからは賛否の声を紹介していきましょう。●賛成派の声『子育てが一段落ついて、さて改めてオフィスワークを探そうと思っても、パソコンスキルを求められて挫折……そんなことばかりでした。時代によって、仕事に必要なスキルというのは変わってくるはず。将来食いっぱぐれないためにも、先を見越した教育は必要 です』(50代女性/飲食店パート/大学生、高校生のママ)『海外に比べて日本は、IT教育がとても遅れていると感じます。うかうかしていると海外からの移民に、日本人の仕事が奪われてしまうのでは。そうならないためにも、幼いうちから学ばせていくべきでしょう』(30代男性/会社員/中学生のパパ)『反対してる人は“食わず嫌い”なのでは?わが家ではいち早くデジタル教育を取り入れました。プログラミング教室に通わせていますが、とても楽しそうに学んでいますよ。家の端末で復習している姿を見ると、教室で習ってきたことだけでなく、自分なりの手を加えて違うものを作っています。それをオンラインでお友だちと見せあい、評価しあってより面白い作品にしようとしている。とても創造的な学問 なんですよ』(30代女性/自営業/小学生、幼稚園児のママ)●反対派の声『上の子が、中学でプログラミングの授業を受けていますが……先生に知識がなさすぎて、全く意味をなしてません。教育者の質が保証されていない中で必修化するのには反対 ですね』(40代女性/主婦/中学生、小学生のママ)『小学生でしょ。冷淡な機械を前にするよりも、自然に触れてほしいです。論理的思考をつけるばかりが教育じゃないですよね。子どものうちはもっと、空や風、雲、土、草木に対する素朴な興味と畏怖の念を大切にしてほしい』(30代女性/幼稚園児、1歳児のママ)『小学校での教育時間には上限が定められています。つまり、プログラミング学習を導入する分だけ、ほかの学習の時間が削られるということ。これは問題ですよ。僕は特に国語学習が削られるのが不安です。長文を読み書きする力や語彙力などの低下は、ここ数年激しいです。国語はすべての学問の基礎でもあります。プログラミング学習は必修ではなく、課外や部活など教科とは別の形で行うべきでしょう』(50代男性/教員/高校生、中学生、小学生のパパ)----------賛成派、反対派の声を紹介してきました。さて、あなたはどのように考えますか?プログラミングに触れたことがないなら、まず一度お子さんと一緒に経験してみてはいかがでしょう。文部科学省からは子供向けのプログラム作成サイト『プログラミン』がリリースされています。かわいい絵柄で操作もカンタン。文字が拾い読みできる年長児くらいでも、ゲーム感覚でプログラミングを学ぶことができます。もしかしたら、大人顔負けに端末を操作するお子さんの姿を目の当たりにして、これまでと違った感想を持つかもしれませんよ。【参考リンク】・教育の情報化の推進 | 文部科学省()・21世紀型教育に関する0歳から6歳のお子さまを持つ保護者を対象とした認識調査 | デジタルアーツ()・プログラミン | 文部科学省()●文/パピマミ編集部●モデル/前田彩(桃花ちゃん)
2017年01月30日■知育玩具の人気が急上昇! でも定義がわからない!?玩具の選択肢が多様化する中で、いま「知育玩具」の人気が急増中。Amazonが今年6月に実施した意識調査では、なんと70%以上の親が知育・学習玩具に高い関心を抱いていることが判明。玩具を通して、なんらかの能力を身につけて欲しいというニーズが高まる一方で、パズルやブロック、積み木という漠然としたイメージはあるけれど、具体的に「知育玩具とはなんだろう?」と疑問を持つ人が多数……。それもそのはず実は、玩具業界に「知育玩具」についての明確な定義がそもそも存在しないのだとか。言われてみると、確かに「頭がよくなる、知識が身につく」など、ぼんやりとしたイメージしか浮かばないですよね。■日本とアメリカの玩具に対する意識の差日本では「玩具=キャラクター」という印象が強く、それ以外の玩具と出会う機会が少ないのが実態。でもアメリカでは、すべての玩具の中で知育玩具が締める割合が、なんと日本の約2倍。日本では、ブロックなどをイメージする人が多い知育玩具ですが、アメリカではSTEM(Science/科学、Technology/技術、Engineering/工学、Mathematics/数学)と呼ばれる理系の能力を伸ばす玩具に注目が集まっています。■2016年はプログラミング玩具に大注目!STEM系玩具の中でも、とくに流行しているのが「プログラミング玩具」。玩具を通して具体的なプログラミング方法を覚えるのではなく、論理的な思考を鍛えるというのが目的です。日本でも2020年に「プログラミング」を小学校で必修化するという動きがあり、それに伴いプログラミング玩具がますます注目を浴びることは間違いなし。実は2013年頃から子供向けのプログラミング本が発売されたり、文部科学省が手がける「プログラミン」というPC用のコンテンツが登場したりと、日本でも「プログラミング」への注力がじわじわと進んでいるんです。■ロボット型玩具で楽しくプログラミングプログラミング玩具として、世界的に大人気となっているのが「プログラミングロボット ダッシュくん」。スマホに登録した通りの動きをしてくれる愛らしいロボット。おもしろい声を出したり、ひょうきんな動きをしたりと、年齢に合わせた5種類のアプリを通して遊びながら自然とプログラミング能力が身につきます。対象年齢は5歳から。 もう少し低年齢向けとしてオススメなのが「プログラミングロボ コード・A・ピラー」。対象年齢は3歳からで、イモムシの胴体に描かれた矢印を組み合わせ、的を目指して道筋をプログラミングするというもの。キュートな見た目で遊びながら論理的思考が身につくと、アメリカを中心に人気を集めています。■Amazonが初めて「知育・学習玩具大賞」を発表!日本と海外の知育玩具に対する思考がわかったところで、やはり定義は曖昧なまま。欲しいというニーズと、情報不足というギャップを埋めるべくAmazonでは、知的発達につながるものを「知育玩具」、英語や計算スキルなどが身につくものを「学習玩具」と定義づけ。それぞれの玩具について、カスタマーレビューで高い評価を得ているものを選出し、その後、教育心理学者や脳科学者、保育者という専門家の意見を取り入れ、初めて「知育・学習玩具大賞」を発表しました。■Amazon 知育・学習玩具大賞知育玩具部門大賞 「KAPLA カプラ200/KAPLA」学習玩具部門大賞 「世界の国旗かるた/学研」審査員特別賞(秋田喜代美氏)「アソブロック BASICシリーズ スペシャルパック ドラゴン/マーゼンプロダクツ」審査員特別賞(池谷裕二氏) 「サボテンバランスゲーム/プラントイ」審査員特別賞(駒崎弘樹氏) 「ニューブロック たっぷりセット/学研ステイフル」 アイデア賞 「わごむパターンボード/くもん出版」Amazon特別賞1 「プログラミングロボ コード・A・ピラー/フィッシャープライス」 Amazon特別賞2 「ローリーズ・ストーリー・キューブス/The Creativity Hub」知育玩具部門で大賞を受賞したのは、「カプラ200」。同じサイズの木片というシンプルな作りながら、アイデア次第でさまざまな形を作り上げることができます。もとはフランスの玩具ですが、日本では保育園に置いてあることなどをきっかけに広く浸透。とにかく高く積み上げて、崩れたときに「ワー! キャー!」と子どもたちは大興奮! シンプルゆえに、子どもの想像力を広げてくれるのが特長です。 学習玩具部門の大賞は「世界の国旗かるた」。遊びながら国旗や地図が覚えられる、まさに学習玩具の王道的アイテムです。大人でも知らない国旗がたくさんあり、子供とコミュニケーションを取りながら家族で楽しむことができます。 審査員特別賞受賞の中で、とくに注目なのは「サボテンバランスゲーム」。サボテンが倒れないようにサイズの違うパーツを刺していくゲームで、脳研究者オススメの玩具。インテリアとしても活用できるオシャレなデザインも魅力です。脳を刺激するという意味で、子供だけでなく老人ホームなどでも利用されているそうですよ!■知育学習玩具はシンプル×最新技術の二極化今年の「知育学習玩具大賞」において、プログラミング玩具は特別賞の「プログラミングロボ コード・A・ピラー」のみとはいえ、来年以降ますます人気を集めることは必至。これからの時代、玩具を選ぶ際には、積み木など昔ながらのシンプルな玩具と、最新技術を駆使したハイテク玩具を上手に取り入れる必要があるのかもしれません。遊びの中でも、少しでも子供の能力を育てたいという親心。玩具のチカラを借りつつ、親子で楽しくさまざまな能力を育んでいけたら素敵ですね!取材協力/出典Amazon知育・学習玩具大賞HP: Amazonクリスマスプレゼント おもちゃ特集HP:
2016年12月01日2020年より小学生のプログラミング教育必修化が決定しました。2014年にイギリスが5歳からの必修化を決めて以降、この流れは全世界的に起こっていることなのですが、実際のパパとママには疑問に思うところも。今回はパパからの意見も多数集まりました。Q.小学校でのプログラミング教育必修化、どう思う?1.とても良いと思う 21.9%2.良いと思う 34.7%3.あまり良いと思わない 21.4%4.良いと思わない 7.3%5.わからない・どちらとも言えない 14.8%良いと思う派が56.6%、良いと思わない派が28.7%とやや良いと思う派が優勢の結果に。一方で、小学生から本当にやるべきことはもっとあるのではないかという強い反対意見もありました。■プログラミングよりも小学生に教えるべきことがある反対派の人からは、いくらこれからIT社会が進むからといって、小学生にプログラミングが本当に必要なのか?もっと教えるべきことがあるのではないかという意見がありました。「プログラミングよりむしろPC関連の情報機器との上手な付き合い方や、インターネットの危険性や倫理観を教えることが先なのでは。技術だけでは豊かな生活には役立たないと思う」(佐賀県 30代女性)「以前にもあったオンライン学習や英語、そして今回のプログラミングといい政府はどんな人間を育てたいのか。もっとその歳に必要なものは山ほどあると思う」(静岡県 40代男性)「今後、コンピューターが必要なのはわかります。ですがそのプログラミングを必修化にするのはいかがでしょうか?その年齢にあった教育が必要だと思います。人間性、自然界との共存、礼儀などなど挙げたらきりがありません」(東京都 40代男性) ■プログラミングを教えらえる教員はいるのか?現在の小学生教員の中にプログラミングを教えられる人がいるのだろうかという疑問の声もありました。もちろん必修化になると、教員も追加で研修などを受けることになり負担も増えることが目に見えています。「大学で履修したプログラミングでさえ、就職してからすぐ時代遅れになっています。基本的な概念を教えるにしても、教えられる教員がどれだけいるのかなとも」(千葉県 40代女性)「ある程度は必要なのかなとは思うけど、内容によりますよね。ちょっとかじる程度なら時間の無駄だし、だいたい先生方では対応できないと思う」(東京都 40代女性)「そもそも誰が指導するのか。プログラミングに長けた教師を育成していくつもりなのだろうが、そのために研修が増えれば、教師の負担がさらに増えていくだろう、これ以上教員の仕事を増やすべきではない」(広島県 30代男性)■プログラミングを学ぶことでつく力とはイギリスでは5歳からの必修化が決まり、アメリカ、フィンランドでもプログラミングの初等教育必修化の動きがあります。プログラミングを学ぶことで相乗効果で身につく力もあるようです。「仕事でも長年ITに携わる仕事をしてきましたので、その立場・経験からの意見ですが、プログラミングを小学生のうちから学ぶことの意味は、少なからずあると思います。プログラミングを学ぶということは、ロジカルシンキングを学ぶということにつながります。他にも、数学的センスや効率化、発想力、応用力などがあります。それはきっと他の教科の勉強にも役立つのではないかと思います」(宮崎県 40代男性)Q.小学校でのプログラミング教育必修化、どう思う?アンケート回答数:9505件 ウーマンエキサイト×まちcomi調べ
2016年11月09日【ママからのご相談】プログラミングが必修化されるとニュースで聞きました。正直、うちの家は主人も私も機械に弱くて、正直なところよくわかりません。心配なので、スマホやタブレットを触らせたこともないのです。でも、それでは良くないのかもしれないと不安になりました。プログラミング教育とはどのようなものなのでしょうか。●A. プログラミングは、今後の社会を生きていくうえで必要な能力!?こんにちは。教育コンサルタントの佐々木です。親御さんの時代と比べて、教育内容はどんどん変化しています。子どもの教科書を見て、困惑した親御さんもいらっしゃるのではないでしょうか。今話題になっているのは、プログラミング教育の必修化。普段ITに関わる機会のない人にとっては、どんなものなのかイメージが付きにくいかもしれません。そこで、本記事ではプログラミング教育とはどういうものなのか、どんなメリットがあるのかをご紹介します。●プログラミングとは?プログラミングとは、コンピューターを動かすためのプログラムを作ること です。私たちの生活が便利になるのは、IT技術がどんどん発達を遂げているからです。すでにIT技術は私たちの生活になくてはならないものになっています。●なぜプログラミングを必修化するのか?技術の急速な発展により、IT技術者が世界的に不足しています。日本でも、国際的な競争力を上げていくためにも、今後さらなるIT技術者不足 が予想されます。プログラミング教育を必修化することで優秀なIT技術者を増やし、技術力を上げることが日本の未来につながるのです。●習い事に「プログラミング教室」が大人気?子どもの習い事としてプログラミング教室 が注目されていることをご存じでしょうか。最近の子どもたちは、生まれたころからデジタル機器に囲まれて育っています。ゲームやスマホを触ったことのない子はほとんどいないでしょう。そんな子どもたちだから、デジタル機器の中身はどうなっているのか、どういう作りなのか、興味を持つ子は少なくないはずです。先にも述べたように、IT技術者は深刻な人手不足。プログラミングを学んでおくことで、手に職をつけられる可能性もあるのです。子どもの将来の職業の選択肢の一つとして考えたいと思うのも親心でしょう。また、プログラミングの過程で、論理的思考力や発想力、問題解決力が養われる という観点も見逃せません。プログラマーを目指さないとしても、社会に出たときかならず求められる論理的思考力、問題解決力をいち早く子どもに身につけられるならば、有意義な習い事といえるのかもしれません。●学校ではどのように必修化するのか?小学校のプログラミング必修化については、新しい科目を作るのではなく、今ある教科に盛り込んで教えることで現在検討が進んでいます。中学校ではすでに技術・家庭の一環としてプログラミングについて教えていますが、さらに拡充する予定です。高校では、選択科目としてプログラミング教育がありますが、必修科目 とする動きで進めています。----------このように、各方面から注目を集めているプログラミング教育。まずは、お子さんと一緒に電子機器に触れてみたり、どうやって動いているのかに興味を持ってお子さんと話をしてみるだけでもいいのではないでしょうか。【参考リンク】・小学校段階における倫理的思考力や創造性、問題解決能力等の育成とプログラミング教育に関する有識者会議の設置について | 文部科学省()●ライター/佐々木恵(教育コンサルタント)
2016年05月15日ソニー・グローバルエデュケーションは3月8日、ロボット・プログラミング教育分野に向けた教育キット「KOOV」を発表した。KOOVは自由な形を作ることができるブロックと電子基板に、作った形をロボットとして動かすプログラムで構成されており、2016年夏の商品化を予定している。同製品は、同社が2015年秋に策定した教育カリキュラム「STEM101」を構成するThink(思考力)、Make(創造力)、Feel(探求力)の3つのプログラムのうちMakeを具現化したもの。開発は学校教材メーカーであるアーテックと共同で進めた。同社は「情報を察知し論拠を挙げながら種々の課題を解決する、21世紀型スキルを有するSTEM人材育成に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日米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日「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日個別指導型のオンライン・プログラミングスクール「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日誠文堂新光社が発行する科学雑誌『子供の科学』は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日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日