OLPC XOに搭載されたEtoysの実地検分

 北米地区の住民に話題のラップトップを一足先に使ってもらおうという趣旨にて昨年末に実施されたGive One Get Oneプログラムであるが、そうして入手できたOLPC XOラップトップにおいて特に興味あるアクティビティの1つが同梱されたEtoysである。なおXOは学校の授業で使う教育用ツールであるという位置づけを反映して、ここでのEtoysなどはアプリケーションではなくアクティビティ(activity)と呼ばれている。

 EtoysはSmalltalkベースの学習用アプリケーションであり、ゲームをプレイしながらプログラムの構造を学ぶと同時に、OLPCユーザが独自のゲームを開発できるようにも配慮されている。しかもこうした喜びを味わう上で、必ずしもXOマシン本体は必要としないのだ。既存プロジェクトの実行やその構造の閲覧は各自が所有するその他のコンピュータにても可能であり、また独自のプロジェクトを記述したり、あるいはユーザにその気があれば将来的なXOのリリースに対するソフトウェア的な貢献をするのも不可能ではないのである。

 OLPCバージョンEtoysを試用するための最初の一歩としては、仮想マシンであるSqueakを各自のシステムにインストールしておかなくてはならない。SqueakとはSmalltalk-80をオープンに実装できるようにしたものである。最新版のLinuxディストリビューションであればSqueakが同梱されている可能性は高いので、とりあえずは各自が使用するディストリビューションのリポジトリを確認してみればいいだろう。私の使用するUbuntu 7.10の場合も、squeak、squeak-sources、squeak-image、squeak-vmのパッケージ群が用意されていたので、これらをインストールした。ディストリビューション固有のパッケージが見つからない場合は、マニュアル操作でSqueakのダウンロードとインストールをすればいい。

 OLPCバージョンEtoysのインストールでは、専用のイメージファイルをダウンロードする必要がある。またこうしてダウンロードしたzipファイルの解凍先としては、専用サブディレクトリを各自のホームディレクトリに作成しておく。そして当該サブディレクトリにてSqueakを起動し、解凍したEtoysイメージをコマンド「squeak etoys.image」にて読み込ませる。その後しばらく待つと、OLPC XOユーザがEtoysアクティビティをスタートさせた際に目にするのと同じ画面が表示されるはずである。

etoys1_thumb.png
XOのEtoys

 OLPC Etoysのオープニング画面には色分けされた雲形のオブジェクト3個と1台の自動車が配置されるが、この自動車は画面の外枠と雲形オブジェクトにぶつかると跳ね返るようにしてウィンドウ内を移動するようになっている。その他にこの画面に表示されるのが、自動車の動きを制御するためのスクリプトである。グリーンの雲で示されるGallery of Projectsをクリックすると、カリキュラム、アニメーション、チュートリアル、シミュレーションとゲーム、複合表示など各種のカテゴリに分類された20以上のプロジェクトが確認できるはずだ。これらの各カテゴリは、クリックにより個々の内容が表示されるようになっている。

 例えばGames and Simulationsをクリックすると、プランクトンを餌にする魚が泳ぐ水槽、ソフトウェアジョイスティックで制御する月面着陸船、論理回路の設計をシミュレートするコンピュータ設計用のプロジェクトが見つかるはずだ。またGalleryを探索すると、理想的なガスタンクのモデリングや病気の流行する様子を示したプロジェクトも用意されている。プロジェクトの内容は複雑なものもあれば単純なものもあるが、これらはいずれもEtoysにて作成されており、例えば3歳になる娘さんがXO上で各種のゲームとアクティビティを楽しんでいると教えてくれた私の友人の1人は、Etoysそのものに関しては若干レベルが高度すぎるようだと見ているものの、このアクティビティの対象年齢は幼稚園児から12歳以上とされているのである。

 こうしたプロジェクトを自分でも開発してみたいと思うならば、完成済みプロジェクトのスクリプトを参考にするのが近道であろう。そこで使われているコードの記述法は、独自に作成するプロジェクトでも応用可能なヒントやサンプルとなるはずだ。

新規プロジェクトの作成法

 私が最初に作成したプロジェクトは非常に単純なものである。その雛型として使用したのは先に見た画面の端で自動車が跳ね返るというEtoysのオープニング画面にあるプロジェクトで、これを私は自動車の代わりにボールが跳ね回るようにし、移動範囲を画面全体ではなく1つのボックス内に収まるように変更した。そして追加すべきギミックについては、実際にボールを動かしてみて後から検討するという方針である。

etoys2_thumb.png
SpaceBall

 新規プロジェクトの作成は、まず最初にパープルの雲形(Make a Project)をクリックしてオープニング画面と同じメニューバーが配置された空ウィンドウを表示させることで始まる。そしてメニューバーにあるペイントパレットのアイコンをクリックすると、ペイント用メニューが表示されるはずである。

 このペイントパレットには、簡単なペイント系プログラムに期待される基本的な描画および彩色用の機能が一通り装備されている。今回私はTreasure Chestにある楕円形ツールをいくつか使用して、適切と思えるサイズとカラーのボールを作成してみた。

 配置したオブジェクトについては、右クリックによりプロパティ設定を行う。そうしたプロパティの1つがオブジェクト名である。これを私は標準名の“Ellipse”から“SpaceBall”に変更したが、具体的な操作としては既存の名前をクリックして新規の名前をタイプすればいい。より変更しがいのあるプロパティはViewerであろう。Viewerアイコンをクリックすると、図形を左側に示した形でスクリプトエディタが表示されるが、ここにはオブジェクト操作用のスクリプトを記述することになる。このスクリプトを介することで、動きや外観などオブジェクトの様々な挙動を制御できるのだ。

 オブジェクトに対するスクリプトの記述は、スクリプトエディタから目的のアクションをドラッグして、プロジェクトウィンドウにドロップするという操作で行う方式になっている。例えば私のサンプルプロジェクトでSpaceBallのスタート動作を指定するには、スクリプトエディタにある“SpaceBall forward”というアクション(オブジェクトのデフォルト名をSpaceBallと変更したので、スクリプトおよび関連するアクションも対応する名称に変わっている)をドラッグして、エディタからウィンドウまでドロップすればいい。またこの“SpaceBall forward”というアクションの移動距離はデフォルトで5と設定されているが、この値は数値の左側にある上下の矢印をクリックすることで即座に変更できる。

 ここでの操作において一番戸惑うのは、おそらくスクリプトに追加するアクションを画面上の何処にドロップすればいいのかの判断だろう。スクリプトエディタからドラッグしたアクションをホールドしたまま当該オブジェクトのスクリプトにあるアクションに重ねてしばらく待つと、設定済みアクションの前または後ろに空コンテナを模した領域が設けられるので、新規のアクションを追加させたい位置にコンテナが表示されたら、そこでドロップすればいいのである。

Etoys誕生の背景
 Etoysが世に出たのは1997年のことであり、Smalltalkの作成者でもあるAlan Kay氏を始めとする開発陣が目指していたのは、Disneyで使用する教育目的専用のプログラミング言語である。この言語についてKay氏自身は次のように説明している。「そもそもこれは、HyperCard(Bill Atkinson)、Logo(Seymour Papert)、Smalltalk(私)、starLogo(Mitchel Resnickらによって開発された大規模な粒子シミュレーションシステム)といった、各自が気に入っているプログラミング言語の優れたアイデアを組み合わせてみようという試みでした。その結果生み出された成果が、子供達の使用に非常に適していることが後から判明したのです」

 「Nicholas Negroponteと私は40年を越える親交があります。NicholasがOLPCを立ち上げたのは2005年初旬のことでしたが、Seymourと私の2人も最初からこのプログラムに関わっていました。XOを扱う子供達にとって最適な学習環境として予定されたものの1つがEtoysであり、これはその数年前からネット上にて配布されていたものですが、XOに適応させるにあたっては相当量の追加作業をシステムに施す必要がありました」

 Etoysでのスクリプティングは子供でも扱えるレベルに充分な簡単化がされているが、それでも自分の求める動作をコード化する方法の学習はフラストレーションの溜まる作業である。完成済みのスクリプトを覗き見るのは大いに参考になるはずだが、それには自分が考える動作と同様の処理をしているコード部を見つけなくてはならない。また助言を求めるための場としてSqueakの初心者用メーリングリストも用意されている。とは言うものの最適な学習法は、やはり画面に表示されるスクリプティング用メニューを実地に扱ってみることのはずだ。

 例えば、あるスクリプト中でrandom関数が使用されていたので、私もスクリプトコマンドとして“random”と入力してみたところ、“random”は無効な数であるとのメッセージが出されてしまった。そこでこの件をメーリングリストにて質問すると、メニューバーにあるTreasure Chestを開けばスクリプティング用カテゴリにRandomという項目が見つかるはずだという回答を即座に得ることができた。そしてこのアイテムを実際にプロジェクトエリアにドラッグすると、実行させたい位置にてドロップできてしまったのだが、このように一度分かってしまえば簡単な作業であっても、具体的に何をどう扱えばいいかを理解するまでは一筋縄では進まないものである。

 その他にもボールを非表示化させたり、新規ボールを1つクローニングするといった処理をさせてもみたいのだが、これらについては必要な機能をスクリプティング用メニューにて現在も探し続けているところである。なおデフォルトではすべてのアクションが表示される訳ではなく、カテゴリについても追加や削除ができるようになっている。また用意されているアクションを見つける作業については、メニューに設けられている検索機能が役立つだろう。いずれにせよ私の作成したSpaceBallに関しては、オブジェクトが異なれば衝突音や反射角度も異なるように変更することができた。つまり衝突するオブジェクトごとに異なる挙動を示すようにしたのであり、例えばSpaceBallが境界線に衝突するとゴロゴロという音とともに170度方向を変更し、イエローの星形にヒットするとガリガリという音が鳴り120度方向を変えるようにしてある。こうしたものは非常に単純なギミックではあるが、Etoysスクリプティングの入門としては充分だと言えるだろう。

まとめ

 Etoysは子供だけでなく大人も楽しめる“アクティビティ”に仕上がっている。標準で用意されているプロジェクトを操作すれば何時間でも学びながら遊び続けられるはずだが、そのユーザとなった子供達は、継承多様性(ポリモーフィズム)カプセル化などの複雑な概念に惑わされることなく、オブジェクト指向プログラミングを実地に操作する体験ができるのである。例えば1つのオブジェクトを、ボール、星形、ボックス、自動車などに変更させるという処理が、休み時間の間に試せてしまうのだ。

 子供の教育用ツールという観点で考えた場合、Smalltalk、Squeak、Etoysを扱う環境としてOLPC XOよりも適したプラットフォームはおそらく存在しないだろう。また既にこれらのプログラミング言語に習熟した人間であっても、各自のPCに若干のパッケージを追加するだけで最新版のEtoysを利用できるように配慮されている。その他にも、単にオブジェクト指向プログラミングの習得のみに利用したい、自分の子供に与える学習教材としてのEtoysの価値を知りたい、独自に教育用ソフトウェアを自作したい、OLPC XOの有すポテンシャルを自分の手で体験したいなど、各自の意図する用途は様々だろうが、いずれの目的にしろ実地に試すだけの価値は充分にあるはずだ。

Linux.com 原文