Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
Search
newapplesho
April 26, 2012
Programming
0
80
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
愛知県のイチゴ農家がSeasideを使って愛知県トップを目指すストーリー?
newapplesho
April 26, 2012
Tweet
Share
More Decks by newapplesho
See All by newapplesho
OpenRestyについて
newapplesho
0
110
Continuous Integration for Pharo Smalltalk Part 2 (Travis CI)
newapplesho
0
210
今時なウェブ開発をSmalltalkでやってみる?
newapplesho
0
170
Continuous Integration for Pharo Smalltalk
newapplesho
0
160
Elasticsearch for Pharo Smalltalk
newapplesho
0
160
SourceCode Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
newapplesho
0
140
RUNNING Smalltalk - 実践Smalltalk
newapplesho
0
130
AWS SDK for Smalltalk
newapplesho
0
120
How Smalltalker Works
newapplesho
0
100
Other Decks in Programming
See All in Programming
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
150
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
300
関数実行の裏側では何が起きているのか?
minop1205
1
690
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
330
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
220
認証・認可の基本を学ぼう後編
kouyuume
0
190
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
640
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
400
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
110
dnx で実行できるコマンド、作ってみました
tomohisa
0
150
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
For a Future-Friendly Web
brad_frost
180
10k
What's in a price? How to price your products and services
michaelherold
246
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Mobile First: as difficult as doing things right
swwweet
225
10k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
A designer walks into a library…
pauljervisheath
210
24k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Transcript
٢ాɹᠳ ͠ΠνΰՈͷԂओ͕SmalltalkͷʮSeasideʯʢͰ ࡞ΒΕͨγεςϜʣΛͬͯΈͨΒ ѪݝͷΠνΰՈ͕SeasideΛͬͯѪݝτοϓΛࢦ͢ετʔϦʔʁ 1
http://swikis.ddo.jp/umejava/38 ຊॳʁSeasideͷհϖʔδ ͜ΕҎ߱Կճ͔հ͞Ε͍ͯΔ͚Ͳ ʮެ։ͨ͠ΑʯͬͯΛฉ͔ͳ͍ 2
Ͱ͖ͨɽऴྃʂ ࡞ͬͯΈΔ νϡʔτϦΞϧ ࣮ࡍʹҰൠެ։ͯ͠Έͨ ※ຊ৬ͱؔ͋Γ·ͤΜ 3
͍ͪ͝ङΓ༧ཧγεςϜ ᖒాԂɹhttp://www.sawadafarm.com 4
༧γεςϜͷಋೖܦҢ̍ ͍ͪ͝ङΓ༧ిͱFAX هɾཧ ͝ͱʹཧ ༧ใࢴʹه ᣀङΓ͍ͨ͠ 5
γεςϜಋೖલͷ Γ͍ͨใͲ͜ʹʁ ༷ࢠ͕͔Βͳ͍ •ࢠͲͰऔΕΔͷ͔ •ԚΕͳ͍͔ •௨࿏͍͔ ใ͕ෳࡶ 6
ίϯηϓτ sawadafarm.com ༧ཧγεςϜ ̍Ͱͬͯ10Ͱ༧ ᖒాԂαΠτ sawadafarm.com αΠτશମΛ༧γεςϜͱ͢Δ ̍Ͱͬͯ10Ͱཧ 7
ͳͥSeasideʁ • ϙʔλϒϧͳڥͰ͋ͬͨ͜ͱ • ༧ը໘ͷϓϩτλΠϓ̏࣌ؒͰ࡞ͬͯɼΠϝʔδΛ࣋ͬͯΒ͑ͨ • ϖʔδભҠͷهड़͕ඇৗʹָͳ͜ͱ • SmalltalkͰ࡞ͬͨγεςϜΛҰൠެ։ͯ͠Έ͔ͨͬͨ •
PHPɼRubyɼJavaԿͱͳ͘ॻ͚Δ͚Ͳɾɾɾ 8
ϑϩʔ੍ޚ Ұൠը໘ ༧ը໘ ΧϨϯ μʔදࣔ ॲཧ Ϣʔβૢ࡞ γεςϜભҠ ༧ঢ়گ ֬ೝը໘
ʢ࣌ؒʣ ؒΧϨ ϯμʔ ݄ΧϨϯ μʔ ༧ ΫϦοΫ ΫϦοΫ ΫϦοΫ ΫϦοΫ ΫϦοΫ ΫϦοΫ ※A ΫϦοΫ ฤूআ ΫϦοΫ ※C ͓٬༷༧ೖྗભҠ ΫϦοΫ Ұ൪มΘΓ͘͢໘ͳͱ͜Ζ 9
ϑϩʔ੍ޚ ྫ: ϩάΠϯ࣌ͷϑϩʔ Web։ൃͰΉॲཧ ೝূޭ ొ ೝূࣦഊ Login main page
User register 10
login user register main ೝূޭ ొ ೝূࣦഊ 11
ϑϩʔ੍ޚ WATask>>goͰϑϩʔશମΛهड़ MyLoginComponent MyUserRegisterComponent MyMainComponent MyTask call: answer: ೝূࣦഊ ೝূޭ
ॊೈͳϑϩʔ੍ޚ͕هड़Մೳ 12
MyTask>>go ! | user | ! loginAnswer:= self call:(MyLoginComponent new).
! loginAnswer = #registerUser ! ! ifTrue:[ user := self call: (MyUserRegisterComponent new) ] ifFalse:[ user := loginAnswer ]. ! user ifNotNil:[ ! ! self session login: user.]. self call:(MyMainComponent new). WATask subclass:#MyTask ϑϩʔ੍ޚ 13
ެ։·ͰͷಓͷΓ 6݄ 11 1݄ 9݄ ?݄ ٢ాͷґཔ? ը໘ઃܭ ༷ௐ SeasideͰϓϩλΠϓͰ
ΠϝʔδΛ࣋ͬͯΒ͏ ίϯηϓτͱ ҙࣝվֵ ணखґཔ αʔόߏங WebϖʔδҠߦ ༧γεςϜެ։ 2012 2011 14
ίϯηϓτ γϯϓϧ͔ͭײత 15
ཁ݅ ᶃ༧݄Λબ ᶄ༧࣌ؒΛબ ᶅ໊લͱΞυϨεೖྗ ϝʔϧͰຊਓ֬ೝ 16
γεςϜߏ Apache PostgreSQL Web AP (Smalltalk) ϝʔϧ৴ػೳ ʢόονॲཧʣ Comanche 17
ެ։ͷಓͷΓʢຊޠͷରԠʣ |adapter| WAComancheAdaptor startOn: 8080. adapter := WAComancheAdaptor default. adapter
codec: (GRCodec forEncoding: 'utf-8'). adapter isRunning Seaside 3.0ܥͷ߹ 18
ެ։ͷಓͷΓʢ։ൃπʔϧͷআʣ WAAdmin applicationDefaults removeParent: WADevelopmentConfiguration instance WAAdmin applicationDefaults addParent: WADevelopmentConfiguration
instance πʔϧͷআ πʔϧͷՃ 19
ެ։ͷಓͷΓʢApacheͱͷ࿈ܞʣ Apache Web AP (Smalltalk) Comanche Server port:3000 port:80 access.html
੩తͰՄೳͳϖʔδSeasideͰѻΘͳ͍ ApacheͷRewriteػೳΛ࣮ͬͯݱ <VirtualHost *:80> RewriteEngine On RewriteRule ^/(swd.*)$ http://localhost:3000/$1 [P,L] </VirtualHost> httpd.confʹrewriteϧʔϧΛهࡌ͢Δ http://www.sawadafarm.com/swdreservation http://www.sawadafarm.com/access.html 20
ެ։ͷಓͷΓʢը૾ϑΝΠϧͱCSSʣ WAFileLibraryͷsubclassΛ࡞ MyFileLibrary addFileAt:'./css/main.css'. MyFileLibrary addAllFilesIn: './css/'. ·ͨ Workspace্ͰҎԼͷίʔυΛ࣮ߦ ҰൠతʹimageϑΝΠϧʹऔΓࠐΉํ๏͕͋Δ
21
ެ։ͷಓͷΓʢը૾ϑΝΠϧͱCSSʣ >>updateRoot:anHtmlRoot super updateRoot: anHtmlRoot. anHtmlRoot stylesheet url: MyFileLibrary /
#mainCss. >>(class) initialize ! |app| ! app := (WAAdmin register: self asApplicationAt: '...') ! ! addLibrary: MyFileLibrary. WAComponent subclass WAComponent subclass ϥΠϒϥϦͷબ 22
ެ։ͷಓͷΓʢը૾ϑΝΠϧͱCSSʣ >>updateRoot:anHtmlRoot super updateRoot: anHtmlRoot. anHtmlRoot stylesheet resourceUrl: self baseUrl
,'main.css'. WAComponent subclass ࠓճͷํ๏ Smalltalk imageͰcssΛཧ͠ͳ͍ •imageϑΝΠϧͷܰྔԽ •ը૾ɼcssͷमਖ਼ΛಠཱͰ͖Δ •Web APͷιʔε͕ཧ͘͢͠ͳΔ 23
ެ։ͷಓͷΓʢόονͷݺͼग़͠ʣ ϝʔϧૹ৴ػೳSmalltalkͰ࡞Εͳ͔ͬͨ Ծ༧௨ ຊ༧௨ Ωϟϯηϧ͓ΑͼࣗಈΩϟϯηϧ௨ લ༧ूܭ௨ ͓٬༷࣭௨ ͕࣌ؒͳ͔ͬͨ ຊޠͷऔΓѻ͍ʹݒ೦͕͋ͬͨ ϝʔϧૹ৴ػೳ
ཧ༝ 24
ެ։ͷಓͷΓʢόονͷݺͼग़͠ʣ OSProcess command:ʼcancelMail.rbʼ. ※࣮ࡍʹઈରύεͰεΫϦϓτΛࢦఆ͢Δ͜ͱ OSProcessΛ༻͍Δ MetacelloͷϓϩδΣΫτͷConfigurationOfOSProcess※1 ಋೖ͢ΕΑ͍ System performOnServer: 'date'
Gemstoneͷ߹ OSProcessෆཁ Web AP (Smalltalk) ϝʔϧ৴ػೳ ʢόονॲཧʣ ※1 ୈ23ճSmalltalkษڧձ ࢿྉࢀߟ 25
ެ։ͷಓͷΓʢPostgreSQLͱͷଓʣ SqueakDatabaseAccessor DefaultDriver:(Smalltalk at: #NativePostgresDriver). ConfigurationOfGlorpDBX project lastVersion load:'Core'. Glorp※1Λ༻͍Δ
※1 ୈ12ճSmalltalkษڧձ ࢿྉࢀߟ GlorpΛී௨ʹ͍͍ͨͳΒCore͕͓͢͢Ί ΠϯετʔϧޙɼPostgreSQLͷυϥΠόʔΛσϑΥϧτͱ͢ΔͨΊҎԼΛ࣮ߦ 26
ެ։ͷಓͷΓʢιʔείʔυͷཧʣ ҰൠతʹMonticello͓Αͼ SqueakSourceͷαʔόΛཱͯͯཧ ࠓճ GitΛར༻ •HTMLϑΝΠϧͷཧߦ͏ඞཁ͕͋ͬͨͨΊ ɹɹ※Source.stΛཧ͢Δ͚ͩ •SSL௨৴ͰΞΫηεՄೳ •ݱࡏɼΫϥε୯ҐͷstϑΝΠϧΛग़ྗͯ͠ཧ͢ΔπʔϧΛݕ౼த 27
ެ։ͷಓͷΓʢόάͷཧʣ Redmine νέοτཧ͓ΑͼλεΫཧ͕ศར ͢Έ·ͤΜRubyͰ͢ɾɾɾ 28
ެ։ͷಓͷΓʢ͓·͚ʣ ࣗಈੜ͞ΕΔXHMTMLҎ֎ͷใͷग़ྗ •XML, RSS,SVG... •ը૾ϑΝΠϧͷμϯϩʔμ ֶੜͷࠒͰWard๏Ϋϥελʔੳͨ͠ͷͷΛ σϯυϩάϥϜΛදݱΛ࡞Δͱ͖ʹ׆༻ 29
ެ։ͷಓͷΓʢ͓·͚ʣ renderContentOn: html ! self requestContext respond: [:response | !
! response ! ! initializeOn: self svg ; contentType: 'text/xml'] WAComponent subclass 30
ެ։ͷಓͷΓʢ͓·͚ʣ ResponseΛ༻͍ͨsvgͷग़ྗ 31
σϞ 32
ݱࡏͷᖒాԂWebαΠτͷঢ়گ • ࡢʢ2010ळʙ2011य़ʣͱൺΔͱαΠτΞΫηε̎ഒ • ༧ௐʢฏۉαΠτࡏ࣌ؒ5ʣ • େ͖ͳγεςϜτϥϒϧͳ͠ • ༧γεςϜެ։ޙɼ̎ճ༷มߋʢੵۃతͳۀվળʣ •
ߋͳΔཁͳͲ্͕͍ͬͯΔ SmalltalkͷγεςϜͰेຬͯ͠Β͑Δ ۩ମతͳ݁ՌՆࠒ 33
SmalltalkΛͬͯྑ͔ͬͨɾѱ͔ͬͨ ྑ͔ͬͨ ѱ͔ͬͨ •ϓϩτλΠϓ͕͙͢ʹ࡞ΕͯΠ ϝʔδΛ࣋ͬͯΒ͑ͨ •SmalltalkʢPharoʣͰύ ϑΥʔϚϯεͱͯ͠ͳ͍͜ ͱ͕࣮ײͰ͖ͨ •ը໘σβΠϯͱۀͯ͠࡞Δͱ େมʢSmalltalkͰHTML·Ͱه
ड़͢Δܽʁʣ •ϩάग़ྗϥΠϒϥϦ •POSIXͷਖ਼نදݱϥΠϒϥϦ͠ ͔ͳ͍ 34
ࠓޙͷվળ • ը໘ઃܭ͔ΒͷSeasideͷөʢը໘ϞοΫΛͲͷΑ͏ʹө͢Δ͔ʣ • ڞ௨ιʔεͷཧʢGitͰͷཧΛ༰қʹ͢Δʣ • ϦΧόϦͱোݕରࡦͷڧԽʢϩάʣ ͦͷଞ SeasideͰόάཧγεςϜ͕͋Δͱ͍͍ͷͰ 35
࡞ͬͯऴΘΓͰͳ͘ެ։͠·͠ΐ͏ 36