今からでも遅くない
Smalltalk入門
Pharoではじめよう!
Smalltalk忘年会2017
合同会社ソフトウメヤ 梅澤真史
Borderless
「垣根がない」
いいところ1
プログラミング言語の壁
▶ アプリを使う人
▶ アプリケーションのユーザ
▶ アプリを作る人
▶ プログラマ
▶ 言語を作る人
▶ プログラミング言語開発者
Smalltalkには垣根が無い
「オブジェクトにメッセージを送る」ことで、
アプリを作るのみならず、
プログラミング言語そのものを変更してい
くことができる
「この言語にはこれがないから…」=>「だったら作ればいいじゃん?」
Simple
「シンプル」
いいところ2
ミニマリズムの言語
▶ 予約語は 6つのみ
▶ nil, true, false, self, super, thisContext
▶ あとは「オブジェクトにメッセージを送る」
「こんなふうに短く書けます」的なシンタックスシュガーはない
安易ではなく、簡潔
少ないルールの組み合わせによって何でも作っていける
Direct「直接つかめる」
いいところ3
動いているオブジェクトに直接触れる
▶ メモリにうかんだオブジェクトをメッセージ
送信で変容させていくスタイル
▶ 常にデバッガの中でプログラムを作っているようなもの
Smalltalker的には、テキストエディタに書かれたプログラムは、「た
だの文字列」で死んでいる
「動いてないし、ある部分を選択してメッセージを送れない」
自由の世界へ
▶ Kent Beckさんの Facebookでの記事
▶ http://www.facebook.com/notes/kent-beck/design-spa
ce/510856375613898
▶ “The greater my knowledge, the freer I feel. It’s
like walking under a Montana sky instead of being
jostled down a narrow, one-way corridor”
▶ 「知れば知るほど、自由を感じる。狭い一方通行の廊下
に押し込まれて進むのではなく、モンタナの空の下を闊
歩するようなものだ」
Pharoとは
● OSSのSmalltalk処理系で最もポピュラー、開発も活発
○ https://pharo.org
● VMも高速
(https://www.slideshare.net/pharoproject/pharo-vm-performance)
● イメージはWin, Mac, Linuxでバイナリコンパチブル
● ライブラリも豊富 (Catalog Browserですぐに入る)
Zeroconf Scriptで入れてみる
● curlやwgetで気軽に入れる
○ http://get.pharo.org
curl get.pharo.org/64/61+vm | bash
wget -O- get.pharo.org/64/61+vm | bash
● 64部分がないと32ビット版になる(が、おすすめしない)
pharo-ui で起動
./pharo-ui Pharo.image
フォントを日本語に
● デスクトップのクリックでメニューがでる
○ System -> Settings で Settings Browserが開く (Cmd + os)
○ Search for: の検索窓に'font'と打つ
○ Use Free Type をoffしてonにするとフォントを読む
○ Standard font -> Default の箇所で日本語のフォントを指定し
て"Force All"のボタンを押す
ライブラリを入れる
● Tools -> Catalog Browser
○ 検索窓に'soup'と入れてみる
■ 絞り込まれるので
選択して右クリックし
"Install stable version"
● Soup
○ スクレイピング用のHTMLパーサ
■ PythonのBeautiful Soupっぽいもの
特定のリンクを抽出する
● Playgroudを開く (Cmd + ow)
○ Smalltalkコードを書いて評価するためのツール
● http://swikis.ddo.jp/squeak の勉強会関連リンクを取り出す
soup := Soup fromUrl: 'http://swikis.ddo.jp/squeak'.
((soup // 'a') select: [ :each | each text beginsWith: '第'])
collect: [ :each | each text -> (each @ 'href')]
● テキスト選択して右クリックで "Inspect it"
○ あるいは Cmd + i
実行結果は...
画像をまとめて取得し保存
soup := Soup fromUrl: 'http://swikis.ddo.jp/squeak'.
baseUrl := 'http://swikis.ddo.jp' asUrl.
dir := './downloads' asFileReference ensureCreateDirectory.
imageUrls :=((soup // 'img') @ 'src') collect:
[:each | baseUrl / each ].
imageUrls asSet do:
[:each |each saveContentsToFile: dir / each file].
● "Do it" あるいはCmd + d
実行結果は...
Smalltalkの場合、文法よりも体験
● 早わかりSmalltalk
● Smalltalk基本文法編
● Smalltalk入門 (ドットインストール)
● 難しくはないが異質
● 習うよりも慣れろ
● Smalltalk勉強会に参加すると良いことがあるかも
まとめ
● Smalltalkは古くて新しい不思議な言語
○ 味わっておいて損はない
■ 妥協しないピュアなオブジェクト指向
■ オブジェクトがうごめくライブな環境
● まずはPharoがオススメ
○ 開発が活発
○ 実プロジェクトも多い

今からでも遅くないSmalltalk入門