ScratchとSmalltalkの関係

この記事はSmalltalk Advent Calendar 2016のエントリです。

今年のSmalltalk Advent Calendarを何もネタを考えずに引き受けてしまった。このところ忙しくてなかなかコーディングの機会がない。昨年は何を書いたのだろうと思ったら、こんな記事を書いていた。毎度のネタで心苦しいが、今回もScratch絡みの記事を書く事にする。

Scratchとは、MITの開発したビジュアルプログラミング環境のScratchである。現在はウェブ上でスクリプトの作成や実行を行うことができるが、以前は(今でも可能だが)ダウンロードしたプログラミング環境でスクリプトを作り、サイトにアップロードして公開する形であった。

Squeak SmalltalkをベースとしたScratch 1.4

その当時に使われていたScratch 1.4は、「知る人ぞ知る」Smalltalkで書かれたプログラミング環境であった。10年くらい前に当時隆盛を極めて(陰りも出て)いたSqueak Smalltalkをベースに作られていたのである。
細かな経緯は忘れてしまったが、Scratchの利用者がSmalltalk環境に入る方法を見いだしたのが発端だったろうか。ファイルを読み込む際にエラーダイアログを出させて、そこからSmalltalk環境に降りて行けたように記憶している。Scratch 1.4では、ちょっとしたバックドアを用いてSmalltalk環境に入り、カスタマイズすることもできるようになっている。
このあたりの手順は、以下のサイトで阿部さんが詳しく書いている。
簡単だけど奥深い!Scratchプログラミングの魅力 – 第3回 分散プログラミング:ITpro
Smalltalkプログラミングを行うという意味ではあまり便利な環境ではないものの、Raspberry pi上のScratchをカスタマイズするには避けて通れないので、この方法を知っておいても悪くないだろう。なお、ラズパイ上のScratch環境はgithubで公開されている。
https://github.com/raspberrypi/scratch
このScratchはNuScratchと呼ばれており、ソースはSqueakSourceで公開されている。 
Improved Scratch 1.4 as used on Raspberry Pi

Based on Scratch: 公開されたScrachのソース

配布されているScratch 1.4を改造して使うこともできるが、この配布イメージにはSmalltalkのchangesファイルがなく、継続して何かを開発したいような場合には、ソースコードの見た目が保存されず変数名も機械的に生成されたものとなるため、かなりの困難を強いられることになる。
Scratchに何らかのカスタマイズを行いたい場合には、Scratchの開発チームが提供する公式のソースを利用することができる。
Scratch 1.4 Source Code – Scratch Wiki
公開されたソースコードでは、配布されている一般のScratchの一部の機能が制限されている。例えば、いわゆるScratch Catが別のものになっていたり、公式サイトにスクリプトがアップロードされないようになっている。
ちなみに去年の記事では、Based on Scratchに共有メニューを追加する方法について説明した。
Based on ScratchにShareメニューを追加する
また、Scratch Source Code Licenseで述べられているように利用上の制限も明示されている。要点をかいつまんでおくと以下のような事が書かれている。

  • 派生物において、Scratchという文言の使用は一部の例外を除いて認められない。
  • 同様にロゴ(Scratch cat)も利用できない。
  • 公式サイトにスクリプトをアップロードする機能を実装してはならない。
  • 派生物のソースコードは無料でサイトに公開するか、それに準ずる形にしなければならない。

Based on Scratchにはカラーリングされたウィンドウなど当時のSqueakの雰囲気が残っており、ノスタルジーを感じさせる開発環境でSmalltalkプログラミングするのもオツなものだ。

ArTecのStuduino

Based on Scratchを元にして、いくつかの派生物が開発されている。その中でいち早く登場したものが ArTecによるStuduino開発環境だろう。StuduinoはArduinoを基に設計されたマイコンで、様々なセンサやアクチュエータなどを接続して手軽にフィジカルコンピューティングを楽しめる製品である。
Studuinoダウンロード
このStuduinoで使うブロックプログラミング環境が、先ほどのScratch 1.4の公開ソースコードを利用している。
ブロックプログラミング環境
Studuinoのような特定製品向けの開発環境としてではなく、Scratchのような汎用的なプログラミング環境として更に発展させようとする試みもある。

iPadで使えるPyonkee

Based on Scratchの派生物のなかで、利用者数が最も多いのがPyonkeeではないだろうか。
Pyonkee – iPadでビジュアルプログラミング
PyonkeeはSoftUmeYaの梅澤さんが開発されたもので、J.M.Macintosh氏によるScratch Viewerを元としている。
iPadでScratch
Based on ScratchはPCでの利用を前提としたUIになっており、タブレット端末では利用上のさまざまな問題点があるが、Pyonkeeではタブレット端末でも使いやすいような工夫がなされている。プロジェクトの共有やiPadの持つセンサーを利用することもできるようになっている。
Smalltalk勉強会では、PyonkeeからSmalltalk環境を触るデモも行われた。
Pyonkeeの皮をはぐ

Pharo Smalltalkで動くscat

Scratchが現在のようなFLASHベースになることがアナウンスされた後、一部のSmalltalkerによってSmalltalkコードのままのScratchを維持しようとする試みが行われた。
scat
ここのStatementは面白い。

We believe there is a conspiracy going on all over the universe, evil forces are constantly fighting to take down great Smalltalk projects and port them to other languages.
(私たちは宇宙の陰謀が起こっていると信じています。邪悪な勢力は、絶え間なく偉大なSmalltalkプロジェクトを引きずり落とし、他の言語に移植しようと戦い続けています。)
In a quest against such demonic plots, a couple of us started a confidential mission to rescue the last of these endangered projects, namely Scratch.
(そんな悪魔的な策略へ対抗するために我々二名は絶滅の危機にある最後のプロジェクト<scratch>を救済する秘密の任務を始めました。)

scatはPharo 1.3をベースに作られており、先ほどのサイトからダウンロードすることができる。
https://code.google.com/archive/p/scat/downloads
Google Code Archiveがサービスを停止したようにscatの開発も止まっているが、その流れはPhratchに引き継がれている。

より洗練されたPhratch

Phratchは、ScratchをPharo Smalltalk上に構築しようというプロジェクトである。
Phratch | Pharo Visual Harmony
scatの流れを引き継いでいるが、単なるPharo上での再実装やソースコードの整理にとどまらず、新しいブロックを組み込んだりカテゴリを整理する機能などが追加されており、Pharoのさまざまな機能を活用することができる。
PhratchはLEGO MindstormsやArduinoなど、ロボットプログラミングやフィジカルコンピューティングの教材としても使われており、それらを制御するための追加モジュールも提供されている。
Phratch – Visual Programming for Grownups

おわりに

以上、SmalltalkベースのScratchとその派生物について紹介した。
最初のScratchの登場から10年、宇宙的な陰謀により?開発環境がウェブに移行してから数年たった。さらに新しいバージョンのScratch(HTML5ベースだろうか)もアナウンスされ、悪魔的な策略?は着々と進んでいる。しかし、SmalltalkをベースとしたScratchもまだまだ現役で使われていることがわかるだろう。邪悪な勢力に対抗するには新しいSmalltalkerが必要である。Scratchのカスタマイズをスタート地点としてSmalltalkの勉強を始めてはどうだろうか。