最近、新聞やテレビで注目を集めているプログラミング言語に、米MITメディアラボが開発した子供用ビジュアルプログラミング環境「Scratch」がある。

 Scratchの登録ユーザー数は90万人(ダウンロードだけなら登録不要なので実際はもっと多い)、アップロードされた作品数は208万本に達している(2011年10月現在)。TIOBEの人気プログラミング言語ランキングでは35位と、トップ50にランクインしている(2011年10月)。ちなみに1位、2位、3位は、Java、C、C++の順である。Scratchと同じく最近注目を集めているScala(関連記事)は50位だ。Scratchが子供用のプログラミング言語であることを考えると、並み居る大人用言語の中で健闘していると言えるだろう。

子供用プログラミング言語だけど侮れない

 現代の子供たちは学校や塾などの習い事で結構忙しいうえ、身の回りにはゲームやアニメなど手軽な娯楽があふれている。そのため、限られた時間の中で本当に面白いと思うことしかしない。だからこそMITは、子供だましではない「本物」のプログラミング環境を示すことで、子供たちに実際に使ってもらうことを狙っている。

 Scratchのスローガンは、「simplicity(単純さ)」であり、そこには混じり物を排した本質が残っている。そこで、本特集では、プログラミングに関係する重要な考え方についてScratchを通して見ることで、その本質について考えてみよう。第1回のテーマは、オブジェクト指向プログラミング(Object Oriented Programming、OOP)だ。

 Scratchのインストール方法については、「Scratchをはじめよう」を参照してください。

オブジェクトとメッセージ

 まず、OOPの定義について考えてみよう。この言葉を考えたアラン・ケイは、次のように言っている

"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things." (私にとってOOPとは、メッセージング、状態プロセスの局所的な保持、保護、隠蔽、そしてすべてのことの徹底した遅延束縛だけである)

 OOPの必要条件と考えられている継承やポリモーフィズムに触れていないことも意外だが、ここで注目したいのは、メッセージングの重要性だ。メッセージングとは、オブジェクトにメッセージを送ることにより、受け手(レシーバー)が処理を行う仕組みである。ケイの共同研究者だったアデル・ゴールドバーク(PARCでスティーブ・ジョブズ一行に伝説のデモを行った一人)はその概念を、"Ask, don't touch"(触らないで。お願いするの)と端的に表現している)。

 では、Scratchでのメッセージングはどうなっているのだろう。

 Scratchを起動すると、画面の右、白い領域(ステージ)にネコがいる(図1)。このネコがすなわちオブジェクトである。オブジェクト指向の入門書を読むと、動物のたとえに辟易させられるが、Scratchは直球勝負だ。このオブジェクトのことをScratchではスプライトと呼ぶ。

図1●Scratchのウィンドウ。画面の右、白い領域(ステージ)にネコがいる
図1●Scratchのウィンドウ。画面の右、白い領域(ステージ)にネコがいる
[画像のクリックで拡大表示]

 スプライトは抽象的な概念ではなく、マウスでつかんで動かしたり、向きや大きさを変えたりもできる具体的な存在だ。ちなみに、ステージもオブジェクトである。

図2●ブロックをクリックしてスプライトにメッセージを送る
図2●ブロックをクリックしてスプライトにメッセージを送る

 スプライトがオブジェクトであるなら、もちろんメッセージを送って動かすことが可能だ。それには、画面の左に並んでいるアイコン(ブロック)をクリックする。例えば、[(10)歩動かす]をクリックすると、ネコが右に10ドット進む(図2)。

 メッセージの受け手となるオブジェクトであるレシーバーは、暗黙に決まっている。なぜなら、ここにはネコが1匹しかいないからだ。だから、ブロックにはselfもthisも書かれていない。メッセージは原則として自分にしか送れない。ここに並んでいるブロックはすべてネコのための操作(ネコができること)である。

 ブロックは数が多いので、種類別に分けられている。カテゴリーには「動き」「見た目」「制御」などの名前と個別の色があり、左上のボタンをクリックすると切り替わる。

 著者は子供を対象にしたScratchの体験学習イベント(ワークショップ)を頻繁に開催しているが、このワークショップにおいて、「[(10)歩動かす]をクリックするとネコが10ドット進む」という操作で引っかかる子供はいない。こちらが説明しなくても(触るなと言っても)、他のブロックも試してはその反応を面白がる。このようにメッセージングは、直観的に理解しやすい、自然な仕組みである。

 NHK教育テレビの幼児向け番組『ピタゴラスイッチ』の「おとうさんスイッチ」は、子供が父親をリモコンでコントロールするコーナーだ。見たことのない方も多いと思うので、これを真似た動画「『お父さんスイッチ』は外で押すと楽しい」も紹介しておこう。

 リモコンはティッシュペーパーの箱に「あ」「い」「う」「え」「お」と書かれた紙のスイッチとストローのアンテナを貼り付けたものだ。リモコンのスイッチが押されたら、父親はそのスイッチの文字で始まるアクションをしなければならない。この、スイッチが押されるまでアクションが決まらないということは、遅延束縛である。

 ここでは、子供がスイッチを押す(例えば、「い」というメッセージを送る)ことで、おとうさん(オブジェクト)に処理(「1回転する」など)を行わせている。これは、この番組の対象年齢である4~6歳児でもメッセージングを理解できることを示唆している。