SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
今からでも遅くない
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がオススメ
○ 開発が活発
○ 実プロジェクトも多い

Weitere ähnliche Inhalte

Was ist angesagt?

Smalltalkと型について
Smalltalkと型についてSmalltalkと型について
Smalltalkと型についてMasashi Umezawa
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングYuichi Ito
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 

Was ist angesagt? (20)

Smalltalkと型について
Smalltalkと型についてSmalltalkと型について
Smalltalkと型について
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 

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

20200803 プログラミングの基礎
20200803 プログラミングの基礎20200803 プログラミングの基礎
20200803 プログラミングの基礎Hikaru Tanaka
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料Monaca
 
MTプラグイン入門以前
MTプラグイン入門以前MTプラグイン入門以前
MTプラグイン入門以前Hiroshi Yamato
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet将 高野
 
Weekend Androidのススメ
Weekend AndroidのススメWeekend Androidのススメ
Weekend AndroidのススメSuzuki Junko
 
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフトおばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフトatmarkit
 
0から教える簡単アプリ開発
0から教える簡単アプリ開発0から教える簡単アプリ開発
0から教える簡単アプリ開発teencoders
 
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~一法 山崎
 
Interop2017
Interop2017Interop2017
Interop2017tak9029
 

Ähnlich wie 今からでも遅くないSmalltalk入門 (12)

Herlockサービス紹介
Herlockサービス紹介Herlockサービス紹介
Herlockサービス紹介
 
20200803 プログラミングの基礎
20200803 プログラミングの基礎20200803 プログラミングの基礎
20200803 プログラミングの基礎
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料
 
MTプラグイン入門以前
MTプラグイン入門以前MTプラグイン入門以前
MTプラグイン入門以前
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
 
Weekend Androidのススメ
Weekend AndroidのススメWeekend Androidのススメ
Weekend Androidのススメ
 
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフトおばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフト
 
0から教える簡単アプリ開発
0から教える簡単アプリ開発0から教える簡単アプリ開発
0から教える簡単アプリ開発
 
Cap01
Cap01Cap01
Cap01
 
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
 
Interop2017
Interop2017Interop2017
Interop2017
 

Mehr von Masashi Umezawa

第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーションMasashi Umezawa
 
FileManで楽々ファイル操作
FileManで楽々ファイル操作FileManで楽々ファイル操作
FileManで楽々ファイル操作Masashi Umezawa
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門Masashi Umezawa
 
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Masashi Umezawa
 
TarandocでJSONを永続化
TarandocでJSONを永続化TarandocでJSONを永続化
TarandocでJSONを永続化Masashi Umezawa
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すMasashi Umezawa
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Masashi Umezawa
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へMasashi Umezawa
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0Masashi Umezawa
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Masashi Umezawa
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0Masashi Umezawa
 

Mehr von Masashi Umezawa (20)

第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
 
FileManで楽々ファイル操作
FileManで楽々ファイル操作FileManで楽々ファイル操作
FileManで楽々ファイル操作
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
 
TaskItの紹介
TaskItの紹介TaskItの紹介
TaskItの紹介
 
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
 
Revealing ALLSTOCKER
Revealing ALLSTOCKERRevealing ALLSTOCKER
Revealing ALLSTOCKER
 
TarandocでJSONを永続化
TarandocでJSONを永続化TarandocでJSONを永続化
TarandocでJSONを永続化
 
Dockerizing pharo
Dockerizing pharoDockerizing pharo
Dockerizing pharo
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
 
VerStixの紹介
VerStixの紹介VerStixの紹介
VerStixの紹介
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
 
Pyonkeeを鳴らす
Pyonkeeを鳴らすPyonkeeを鳴らす
Pyonkeeを鳴らす
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
 
Tarantalk
TarantalkTarantalk
Tarantalk
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0
 
Pillarの紹介
Pillarの紹介Pillarの紹介
Pillarの紹介
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
 

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