Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
Search
newapplesho
April 26, 2012
Programming
83
0
Share
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
愛知県のイチゴ農家がSeasideを使って愛知県トップを目指すストーリー?
newapplesho
April 26, 2012
More Decks by newapplesho
See All by newapplesho
OpenRestyについて
newapplesho
0
120
Continuous Integration for Pharo Smalltalk Part 2 (Travis CI)
newapplesho
0
220
今時なウェブ開発をSmalltalkでやってみる?
newapplesho
0
190
Continuous Integration for Pharo Smalltalk
newapplesho
0
170
Elasticsearch for Pharo Smalltalk
newapplesho
0
170
SourceCode Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
newapplesho
0
150
RUNNING Smalltalk - 実践Smalltalk
newapplesho
0
140
AWS SDK for Smalltalk
newapplesho
0
140
How Smalltalker Works
newapplesho
0
120
Other Decks in Programming
See All in Programming
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
210
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
5
910
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
410
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
520
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
140
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
340
CSC307 Lecture 17
javiergs
PRO
0
230
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
5
620
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
280
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
250
tsserverとは何だったのか、これからどうなるのか
nowaki28
1
370
今さら聞けないCancellationToken
htkym
0
180
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
210
Git: the NoSQL Database
bkeepers
PRO
432
67k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
180
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.5k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Design in an AI World
tapps
1
210
Docker and Python
trallard
47
3.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