はじめに
サーバーサイド・フロントエンドを3〜4年、iOS/Androidアプリエンジニアとして5年ほど。
Smalltalkは大学生の頃に授業の課題で耳にしたことと、Objective-Cのルーツであることくらいしか知らない。
オブジェクト指向の話題でSmalltalkが出てくるが、あまりにも知らなすぎたので今回調べてみることに。
iSqueak というものを発見
いきなりですが、 iOSエンジニアなので今持っている得意なスキル+Smalltalkで何か出来ないか考えて最初に思いついたのがこれです。
https://isqueak.org/HomePage
https://www.mobilewikiserver.com/Scratch.html
iPhoneで動くらしいです。
これを今最新の Xcode 10.1, iOS12 対応できたら面白そうだと作業開始。
湧き出るコンパイルエラー
つらい・・・あきらめ・・・
(iSqueak と Scratch App for IOS は同じもの?)
Pyonkee を知る
Pyonkee というのを教えてもらい試してみました。
ベースとなっているのはこちらのScratch.app for iOS
AppStore でも公開されていて、ソースコードも公開されていました。
Xcode 10.1, iOS12 対応しようと思い、ビルド開始。
一発でビルド成功・・・! iSqueakのときの絶望はなんだったのか
Smalltalkは歴史があるからか、動かないソフトウェアが大半だと思っていましたが、しっかりメンテナンスがされているようです。
すばらしい。
DeprecatedになったAPIのワーニングは出てましたが、動作は問題なさそうです。
![スクリーンショット 2018-12-08 8.29.23.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F1901%2Fbfb0d8af-6cc7-6759-96ef-19f06cd70e1a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6b16c528345c0a742d8ae3509e598a11)
あれこれ用語について
Squeak とは
https://squeak.org/
https://ja.wikipedia.org/wiki/Squeak
Squeak(スクイーク)はSmalltalk環境のひとつで、Apple Smalltalkから派生したもの。
Squeak(およびSmalltalk)環境においては、データもアプリケーションも、そして環境自体(つまりシステム)すら、すべてSmalltalk言語で記述されたオブジェクトで構成されているため、通常のコンピュータ環境でいうところのアプリケーションソフトという概念は希薄であるが、それでもそう呼ぶに相応しいオブジェクト群を見ることができる。
すごく興味深いことが書いてありました。
Smalltalkを開発するための環境すらSmalltalkで記述されたもの。
面白い。
![スクリーンショット 2018-12-08 23.36.36.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F1901%2F3f258a81-5a5f-e708-ceb0-360cc3ddf0c0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6b3d83fe1d808c883574f6f0d0cfd0a7)
Scratch とは
Squeak EtoysをベースにMITで開発されたプログラミング環境。
小学生向けのワークショップなども多数開催されている。
Scratch 3.0が2019年に正式公開
まだまだ改善が重ねられウェブ版でかなり進化しているようです。
Demo
https://beta.scratch.mit.edu/
https://llk.github.io/scratch-gui/master/
SourceCode
拡張も可能
https://github.com/LLK/scratch-vm/wiki/Scratch-3.0-Extensions-Specification
![スクリーンショット 2018-12-08 23.38.09.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F1901%2F5bd1e22a-fcb7-da91-3eb8-1ed797978863.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0022dda377cec3cbef774ac869e26491)
Google Blockly
GUIでブロックをつなぎ合わせてプログラミングが出来るライブラリ。
![スクリーンショット 2018-12-08 15.46.08.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F1901%2Fc44679ec-68fd-4da3-e300-acecc58383c8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1174f847efcc699267fdf665ba509e3f)
雑記
Smalltalkはgccやllvmなどでコンパイルして実行するようなものではなく、
Smalltalkで作られた統合開発環境でSmalltalkで記述されたコンパイラでSmalltalkで書かれたプログラムを実行する。
鶏と卵状態じゃないかと。
他の言語と比べSmalltalkの場合、言語仕様だけでなく開発環境自体にも慣れる必要があって敷居が高い印象。
でも、環境構築とか全くいらないし、その空いた時間を環境慣れに使うとすれば、以外とそうでもない?
長く愛され様々な言語に影響を与えた言語であるため、普段使っている言語のルーツをたどる・思想を理解することで得られる事は大きいと思いました。
子供のプログラミングが盛んな昨今。うちの子ももう少し大きくなったら、 Scratch 3.0 で遊んでみようと思います。