前回は、複数のスプライトのスクリプトを並行に動かし、Scratchの非集中的な特性を生かしたネコの競争によるソートや、客や店員をモデル化した待ち行列のシミュレーションを行った。今回はそれをさらに拡張して、ネットワークでつながれた複数のコンピュータにスプライトが分散し、それらが協調して処理を進める分散プログラミングを試してみよう。

Scratchのネットワークサポート

 Scratchには、ネットワークに接続された計測機器を扱うための遠隔センサー機能が備わっている。通信にはソケットを用い、そのプロトコルはRemote Sensors Protocolとして公開されている。

 プロトコルは言語独立なので、Scratchが直接対応していないKinectやOSC(Open Sound Control)デバイスなどを接続するブリッジプログラムをPythonやProcessingなどで開発することもできる。今回は、Scratch同士をつなぐために用意されているMeshという仕組みを使う。

 Meshは、サーバーとなるScratchと複数のScratchクライアントで構成される。同一のMeshに参加しているScratchの間では、グローバル変数が共有され、ブロードキャストされたメッセージが届く。つまり、スタンドアロンのScratchで行っていたことを、そのまま分散環境で行えるようになる。Meshがプロトコルをラップしてくれるので、プロトコルの詳細を知る必要は無い。

Meshを使うための準備

 MeshはScratch 1.4以降に標準で備わっているが、これを使うためのメニューが隠されている。まずは、このメニューを有効にする必要がある。

1. 環境のバックアップ
 この作業はScratch環境の変更を伴うので、最初にバックアップを済ませておこう。バックアップ作業は、ScratchをインストールしたフォルダーにあるScratch.imageというファイルを、適当な場所にコピーするだけでよい。Windowsの場合、デフォルトのインストール先は「C:\Program Files\Scratch(64ビットの場合は、C:\Program Files (x86)\Scratch)、Macの場合はアプリケーションの中の「Scratch 1.4」になる。作業前の状態に戻したいときは、このファイルをもとのフォルダーに上書きする。

2. 開発者モードへの切り替え
 Scratchのウィンドウの左上に表示されているSCRATCHのロゴマークのRの部分をシフトキーを押しながらクリックすると隠しメニューが開く(Shift-Click-R)。そのメニューから「turn fill screen off」を選ぶと開発者モードへ切り替わり、隠れていた開発環境(Squeak Smalltalk)のデスクトップ(灰色の領域)がウィンドウの右下に現れる。

3. ソースコードの変更
 右下の灰色の部分をクリックするとメニューが開くので「open」を選び、続いて「browser」を選択する。すると、「System Browser」というウィンドウが開くので、上段のリストを左から右に「Scratch-UI-Panes」「ScratchFrameMorph」「menu/button actions」、「addServerCommandsTo:」の順番で選択する。

 それから、下段に表示されたソースコードの3行目の「t2 ← true.」の「true」を「false」に書き換え、Alt+s(Windowsの場合。MacではCommand+s)を押してコンパイルする。右ボタンメニューから「accept」でもよい(図1)。終わったら、「System Browser」の左上にある「x」をクリックしてウィンドウを閉じる。

図1●ソースコードの書き換え
図1●ソースコードの書き換え
[画像のクリックで拡大表示]

4. 環境の保存
 再度、Shift-Click-Rを行い、メニューから「save image for end-user」を選ぶ。確認のメニューが開いたら「yes」を選択する。保存が終了するとScratchは自動的に終了する。

 これでMeshに対応したScratch.imageができた。このファイルをMeshを使いたいすべてのコンピュータの、Scratchをインストールしたフォルダーにコピーする。このScratch.imageは全プラットフォーム共通である。

 ただし、これらのコンピュータは相互に接続可能で、42001番のポートが開いている必要がある。使用している環境に応じて、ルーターやファイヤーウォールなどの設定を変更してもらいたい。