最終的には複雑なプログラミングを行うことになる『ナビつき! つくってわかる はじめてゲームプログラミング』 画像はすべてソフトのスクリーンショット
最終的には複雑なプログラミングを行うことになる『ナビつき! つくってわかる はじめてゲームプログラミング』 画像はすべてソフトのスクリーンショット
  • ビジュアルプログラミングの中でも、ずば抜けた完成度
  • 「ノードン」を繋げるだけの手軽さとエンタメ風味で、学習モチベーションを高める
  • プログラミングの基礎を学ぶ「レッスン」は30時間前後の大ボリューム
  • 自然に、楽しく、プログラミングの基礎を学んでいく仕掛け
  • 学習意欲がないユーザーに立ちふさがる「チェックポイント」という存在
  • 地味で選択肢の多い「プログラミング」の入り口として最適なソフト

2021年6月11日、任天堂から『ナビつき! つくってわかる はじめてゲームプログラミング​』(以下、はじめてゲームプログラミング)が発売された。これはNintendo Switch(ニンテンドースイッチ)で動作するプログラミングソフト。価格はパッケージ版が3480円、ダウンロード版が2980円(いずれも税込)で、パッケージ版には後述する「ノードン」について学べるカードが付属する(カードは単体でも販売する)。

開発(兼デバッグ)&実行環境に加えて、学習・復習用のレッスンも内蔵している、全方位をカバーしたプログラミング入門ソフトだ。売れ行きも好調で、ファミ通が発表するゲーム販売本数ランキングでは2週間連続の1位。小売店での販売本数は累計約10.2万本。ダウンロード版やマイニンテンドーストアからの販売分を加えると、実売は15万本程度と想定される。

プログラミングといえば、2020年度からは小学校で必修化、2021年度からは中学校でも内容が拡充されている。ベネッセが2020年末に実施した「高校生がなりたい職業ランキング」では「プログラマー」が3位、「システムエンジニア」が4位、「ゲームクリエイター」が10位にランクインしており、まさに「今求められている教育」だと言える。だが、大学生と高校生の息子を持つ著者の体感では、彼らと同世代の学生の中でプログラミング経験がある子どもはほとんどいない。

一方で、日本国内におけるニンテンドースイッチの販売台数は、2021年5月30日の段階で2000万台(スイッチが1616万台、ライトが384万台)を突破。総務省が発表した日本の総人口(2021年6月25日発表)は1億2622万人なので、単純計算すればすでに日本人の6人に1人はニンテンドースイッチを所有している計算だ。

「学びたい」「知りたい」人が多いプログラミングを、ニンテンドースイッチという「手が届きやすい」環境で学べる。はじめてゲームプログラミングは、「渡りに船」とも言うべき存在となった。

ビジュアルプログラミングの中でも、ずば抜けた完成度

プログラムを学ぼうとする場合、もっとも手軽に始められる言語の1つがJavaScriptだ。PCと無料のテキストエディタだけあれば開発可能で、極論を言えばパソコンにインストールされているウェブブラウザへ、作成したファイルをドラッグ&ドロップするだけで実行できるという手軽さが評価されている。しかし、プログラミング初心者──特に子どもは、プログラミング学習の序盤で脱落してしまう人が多い。それは、学習した結果が“地味”だからだ。

プログラム言語の学習では、画面に「Hello」と表示させるところから始める教材が多い。初めて作ったプログラムが動いたことに感動し、このHello部分を自分の名前などに書き換えて実行してみるという行動に移れた人は、そのまま学んでいけるだろう。だが、大多数の初心者は「たったこれだけ?」と落胆し、学習モチベーションが下がってしまいがちだ。

そんなプログラミングのモチベーションという課題を解決したのが、ビジュアルプログラミングだ。プログラムをコードとしてテキストで記述するのではなく、プログラムを「ブロック」などの視覚的なオブジェクトに模し、それを繋げたり組み合わせたりして記述するプログラミング(とその言語)だ。

マサチューセッツ工科大学メディアラボが開発した「Scratch(スクラッチ)」などは、すでに世界150以上の国と地域で利用されている。はじめてゲームプログラミングも、そんなビジュアルプログラミングに属する製品だが、そのわかりやすさと完成度はずば抜けていると言っていい。

「ノードン」を繋げるだけの手軽さとエンタメ風味で、学習モチベーションを高める

このソフトでは、1つのプログラムのまとまりを「ノードン」という生物として取り扱う。最初にプログラミング画面を立ち上げると、「ボタン」と「ヒト」のノードンが表示されているので、「Bボタンが押されたかどうかを判断する」というボタンのノードンと、「ボタンを押す信号を受信したらジャンプなどをする」というヒト(画面上ではロボット)のノードンのポート(端子)を線で結ぶことで、「Bボタンを押したらヒトがジャンプする」というプログラムが完成する。

プレーヤーがやったことは「線をつなぐ」というわずかな操作だが、結果としてヒトがジャンプしたという、「ゲームでよく見る光景」が結果としてニンテンドースイッチの画面内で展開する。するとプレーヤーは「このまま学習を続けていけば、自分にも『スーパーマリオブラザーズ』のようなゲームが作れるようになるのではないか」という期待を持つ。はじめてゲームプログラミングは、このようにゲームで培われたエンタメ性があり、プレーヤーの学習モチベーションを引き上げる仕掛けが非常にうまい。

↑左側「ボタン」入力があった時、右側「ヒト」が「ジャンプ」するよう、互いのノードンを線で結ぶことが、このソフトの「プログラミング」
↑左側「ボタン」入力があった時、右側「ヒト」が「ジャンプ」するよう、互いのノードンを線で結ぶことが、このソフトの「プログラミング」
↑自分がプログラミングした結果、ゲーム画面ではキャラクターが滑らかにジャンプして「クリア」となる
↑自分がプログラミングした結果、ゲーム画面ではキャラクターが滑らかにジャンプして「クリア」となる

プログラミングの基礎を学ぶ「レッスン」は30時間前後の大ボリューム

はじめてゲームプログラミングのタイトル画面には、「ナビつきレッスン」と「フリープログラミング」という2つのメニューが並んでいる。ソフト購入者はまず、ナビつきレッスンから始めることになる。これはソフト内に用意された練習問題に加えて、7つのゲームを、「ボブ」と呼ぶキャラクターにナビゲーションしてもらいながら、ゼロからゲームを作り上げていくというモード。プログラムに対する習熟度にもよるが、すべてのレッスンとチェックポイント(復習クイズ)をクリアするまでに30時間前後はかかる大ボリュームだ。なお、任天堂のサイトでは、個人差もあるが、小学1年生以上であればゲームをつくる体験を楽しめるとしている。

一方、フリープログラミングはナビつきレッスンを終えた上級者向けのモード。ナビゲーションなしで、好きなプログラムを作れる。作ったプログラムは、作品コードと呼ぶIDを公開することで、ほかのユーザーがダウンロードして遊ぶこともできる。すでにTwitterでは、「#はじめてゲームプログラミング」などのハッシュタグをつけて作品コードを公開しているユーザーが数多くいるようだ。他人の作ったゲームをダウンロードして遊ぶという楽しみも、このゲームの遊び方のひとつだ。さらには、ダウンロードしたゲームを自らアレンジすることもできる。

「ナビつきレッスン」でプログラミングを学び、学び終えた人が「フリープログラミング」に挑戦する流れとなる
「ナビつきレッスン」でプログラミングを学び、学び終えた人が「フリープログラミング」に挑戦する流れとなる
練習問題に加えて7種のゲーム制作レッスンが用意される「ナビ付きレッスン」。すべてのレッスンを終えるには、元プログラマーの著者でも20時間以上かかった
練習問題に加えて7種のゲーム制作レッスンが用意される「ナビ付きレッスン」。すべてのレッスンを終えるには、元プログラマーの著者でも20時間以上かかった

自然に、楽しく、プログラミングの基礎を学んでいく仕掛け

プログラミング経験者がこのソフトのプログラミング画面を見たら、シンプルなデザインながら本格的な仕様に驚くはずだ。前述のとおり、このソフトではプログラムのまとまりをノードと呼び、ノード同士を結びつけることでプログラミングを行う。

例えばソフト内では「スティック」というLスティックの入力を検知するノードと、「ヒト」というロボットのノードの両方を画面上に配置。「スティック」ノードの出力結果を、「ヒト」ノードの「左右移動」のポートへとつなぐことで、Lスティックの動きに連動してヒトが歩くようになる。これが「プログラム」の基本であり概念であるということを、ごく自然に学べるようになっている。

↑「スティック」という、Lアナログスティックの入力を検知するノード。「0.27」という数値が出ているのは、その時点でのLスティックの傾き具合
↑「スティック」という、Lアナログスティックの入力を検知するノード。「0.27」という数値が出ているのは、その時点でのLスティックの傾き具合

Lスティックの傾きを検知するノードと「ヒト」ノードの左右移動ポートを接続したら、次はBボタンが押されたかを検知するノードと、「ヒト」ノードのジャンプポートを接続。ここで、プログラム次第ではLスティックの上下や、Rスティックでもキャラクターを左右に動かせたり、ジャンプさせることもできるのでは? というプログラムの自由度に気付かされる(レッスン中は指示通りのプログラミングしかできないが)。プログラムの基礎学習にとって、こうした「考え方」から学べるのは非常に良いことだ。

Bボタンの入力を検知するノードの出力ポートを、「ヒト」ノードのジャンプへ接続する。ノードの右側にあるポートは出力で、左側にあるのが入力ポートだというルールの徹底も、学習のしやすさに一役買っている。
Bボタンの入力を検知するノードの出力ポートを、「ヒト」ノードのジャンプへ接続する。ノードの右側にあるポートは出力で、左側にあるのが入力ポートだというルールの徹底も、学習のしやすさに一役買っている。

学習意欲がないユーザーに立ちふさがる「チェックポイント」という存在

はじめてゲームプログラミングにおけるサンプルゲーム制作の「レッスン」は、プレーヤーが間違えたプログラミングをしないよう、操作を大きく制限している。たとえば「Bボタンの入力を検知するノードを呼び出してください」と指示された時、「中間」や「出力」など、異なるカテゴリーのメニューをクリックしても反応せず、正解である「入力」>「ボタン」>「Bボタン」のメニューしか動作しないようになっている。

この仕掛けにより制作者側が意図した通りのサンプルを作らせるという目的は達成される。だが一方で「ノードの使い道は理解していないけど、片っ端からクリックしていき、変化があったものを試す」という乱暴なクリア方法も通用してしまう。このため、ノードの役割やプログラミングの基礎を理解しないままレッスンを終えることも可能なのだ。ところが、そんなユーザーの前に立ちふさがる、「チェックポイント」という存在が用意されているのも、このソフトの優れたポイント。

たとえばあるチェックポイントでは、「ヒトにリンゴを取らせたいのに、なぜか取れない」というバグがあるプログラムが提示される。実行結果を見て、どこに問題があり、どのノードを修正すればいいのかを考えるという設問だ。

ソフト内では特に明言されていないが、これはプログラミングにおけるミスの修正を行う「デバッグ」そのものだ。このソフトでのゲーム制作はもちろん、将来プログラミングをするとしたら避けて通れないデバッグ作業を、クイズのようなエンターテインメントコンテンツとして体験できる。

どの問題も、直前のレッスンで各ノードの使い方などを理解してから進めば簡単にクリアできる。だが雑に、片っ端からクリックしてレッスンを終えてきたような人は、ここから先に進めないようになっている。ゲームメーカーならではのエンタメ性を持たせながらも、しっかりとプログラミングを学ぶことを目的としたソフト制作者側の姿勢は、非常に好感が持てた。

最初に表示される「現状」の動作。ヒトがリンゴを取りに行きたいのだが、どうして取れないのかを考え、プログラミング画面を開くという流れ
最初に表示される「現状」の動作。ヒトがリンゴを取りに行きたいのだが、どうして取れないのかを考え、プログラミング画面を開くという流れ
ヒトが歩かないのなら入力ノードに不備がないか。途中にある障害物が壊れないのなら、障害物のノードの設定を開き、接触判定を確認する
ヒトが歩かないのなら入力ノードに不備がないか。途中にある障害物が壊れないのなら、障害物のノードの設定を開き、接触判定を確認する
バギーの左前方に、薄い白い線で立方体が描かれているのは「当たり判定」。ここでは壁とバギーとの接触を判定している。バギーの上に表示されている「1」は、物体と壁が接触していることを示す
バギーの左前方に、薄い白い線で立方体が描かれているのは「当たり判定」。ここでは壁とバギーとの接触を判定している。バギーの上に表示されている「1」は、物体と壁が接触していることを示す

地味で選択肢の多い「プログラミング」の入り口として最適なソフト

プログラミングの学習は、非常に地味で選択肢が多すぎるため、迷走しがちだ。前述のとおり、「●●みたいなゲームを作りたい」という目標を持ってプログラミングの勉強を開始して、やっと動いたプログラムは画面に文字を表示するだけ。そこでモチベーションが保てない人もいるだろう。また、開発環境や言語、プログラムを動かす環境などのバリエーションが広く、どれから習得すればいいのかも悩むかもしれない。

はじめてゲームプログラミングが教えてくれるのは、モチベーションを保ったまま、さまざまなプログラミング言語や開発環境で役立つ「プログラミングの基本と考え方」を学べるという部分だ。

ソフト内のレッスンで作ることになる7本のゲームは40~90分程度で完成できるものばかり。1レッスン終えるごとに「あなたが作ったゲームで遊んでみましょう」というご褒美を与えてくれるのはモチベーションUPに非常に貢献しているし、休憩のタイミングにもなる。

レッスンは初心者には決して簡単なものだけではない。だがレッスンを楽しみ、レッスンで作ったゲームを改造したり、オリジナルのゲームを作ったりするなかで、プログラミングの基本と考え方がおのずと身に付いてくる。この知識は、将来に学ぶであろう別のプログラミング言語や環境でも必ず役立つものだ。いつか将来、自分でプログラミングを学ぼうとした時「これ、はじめてゲームプログラミングでやったアレか!」と気づく日も来るのではないだろうか。