SlideShare a Scribd company logo
1 of 48
Download to read offline
吉田 翔
もしイチゴ農家の園主がSmalltalkの「Seaside」
(で作られたシステム)を使ってみたら
愛知県のイチゴ農家がSeasideを使って愛知県トップを目指すストーリー?
http://swikis.ddo.jp/umejava/38
日本初?Seasideの紹介ページ
http://swikis.ddo.jp/umejava/38
日本初?Seasideの紹介ページ
これ以降何回か紹介されているけど
「公開したよ」って話を聞かない
チュートリアル
チュートリアル
作ってみるチュートリアル
できた.終了!
作ってみるチュートリアル
できた.終了!
作ってみるチュートリアル
実際に一般公開してみた
※本職とは関係ありません
いちご狩り予約管理システム
澤田農園 http://www.sawadafarm.com
予約システムの導入経緯1
いちご狩り予約は電話とFAX
記録・管理
日ごとに整理
予約情報は紙に記録
苺狩りしたい
予約システムの導入経緯2
苺狩りしたい
気軽に予約できない 予約管理が手作業
システム導入前の問題
知りたい情報はどこに?
様子が分からない
•子どもでも取れるのか
•汚れないか
•通路は広いか
情報が複雑
システム導入前の問題
知りたい情報はどこに?
様子が分からない
•子どもでも取れるのか
•汚れないか
•通路は広いか
情報が複雑
システム導入前の問題
知りたい情報はどこに?
様子が分からない
•子どもでも取れるのか
•汚れないか
•通路は広いか
情報が複雑
コンセプト
sawadafarm.com
予約管理システム
1分で知って10分で予約
澤田農園サイト
sawadafarm.com
サイト全体を予約システムとする
1分で知って10分で管理
なぜSeaside?
• ポータブルな環境であったこと
• 予約画面のプロトタイプは3時間で作って,イメージを持ってもらえた
• ページ遷移の記述が非常に楽なこと
• Smalltalkで作ったシステムを一般公開してみたかった
• PHP,Ruby,Javaは何となく書けるけど・・・
フロー制御
一般画面 予約画面
カレン
ダー表示
処理
ユーザ操作
システム遷移
予約状況
確認画面
(時間)
年間カレ
ンダー
月カレン
ダー
予約
クリック
クリック
クリック クリック
クリック クリック
※A
クリック
編集削除
クリック
※C
お客様予約入力遷移
クリック
一番変わりやすく面倒なところ
フロー制御
例: ログイン時のフロー
Web開発で悩む処理
認証成功
登録
認証失敗
Login
main page
User register
login
user register
main
認証成功
登録
認証失敗
フロー制御
WATask>>goでフロー全体を記述
MyLoginComponent
MyUserRegisterComponent
MyMainComponent
MyTask
call:
answer:
認証失敗
認証成功
柔軟なフロー制御が記述可能
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
フロー制御
公開までの道のり
6月 11月 1月9月?月
吉田への依頼?
画面設計
仕様調整
Seasideでプロタイプで
イメージを持ってもらう
コンセプトと
意識改革
着手依頼 サーバ構築
Webページ移行
予約システム公開
2012年2011年
便利なSeaside をどう
やって作っていったか
というと・・・
コンセプト
コンセプト
シンプルかつ直感的
コンセプト
素の澤田農園
コンセプト
素の澤田農園
要件
①予約月を選択 ②予約時間を選択 ③名前とアドレス入力
メールで本人確認
システム構成
Apache
PostgreSQL
Web AP (Smalltalk)
メール配信機能
(バッチ処理)
Comanche
公開への道のり(日本語の対応)
|adapter|
WAComancheAdaptor startOn: 8080.
adapter := WAComancheAdaptor default.
adapter codec: (GRCodec forEncoding: 'utf-8').
adapter isRunning
Seaside 3.0系の場合
これらを実現する上で
のまず最初におこなっ
たのは・・・
公開への道のり(開発ツールの削除)
WAAdmin applicationDefaults
removeParent: WADevelopmentConfiguration instance
WAAdmin applicationDefaults
addParent: WADevelopmentConfiguration instance
ツールの削除
ツールの追加
公開への道のり(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
公開への道のり(画像ファイルとCSS)
WAFileLibraryのsubclassを作成
MyFileLibrary addFileAt:'./css/main.css'.
MyFileLibrary addAllFilesIn: './css/'.
または
Workspace上で以下のコードを実行
一般的にはimageファイルに取り込む方法がある
公開への道のり(画像ファイルと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
ライブラリの選択
公開への道のり(画像ファイルとCSS)
>>updateRoot:anHtmlRoot
super updateRoot: anHtmlRoot.
anHtmlRoot stylesheet resourceUrl: self baseUrl ,'main.css'.
WAComponent subclass
今回の方法
Smalltalk imageでcss等を管理しない
•imageファイルの軽量化
•画像,cssの修正を独立できる
•Web APのソースが管理しやすくなる
公開への道のり(バッチの呼び出し)
メール送信機能はSmalltalkで作れなかった
仮予約通知
本予約通知
キャンセルおよび自動キャンセル通知
前日予約集計通知
お客様質問通知
時間がなかった
日本語の取り扱いに懸念点があった
メール送信機能
理由
公開への道のり(バッチの呼び出し)
OSProcess command:ʼcancelMail.rbʼ.
※実際には絶対パスでスクリプトを指定すること
OSProcessを用いる
MetacelloのプロジェクトのConfigurationOfOSProcess※1
導入すればよい
System performOnServer: 'date'
Gemstoneの場合 OSProcessは不要
Web AP (Smalltalk) メール配信機能
(バッチ処理)
※1 第23回Smalltalk勉強会 資料参考
公開への道のり(PostgreSQLとの接続)
SqueakDatabaseAccessor DefaultDriver:(Smalltalk at: #NativePostgresDriver).
ConfigurationOfGlorpDBX project lastVersion load:'Core'.
Glorp※1を用いる
※1 第12回Smalltalk勉強会 資料参考
Glorpを普通に使いたいならCoreがおすすめ
インストール後,PostgreSQLのドライバーをデフォルトとするため以下を実行
公開への道のり(ソースコードの管理)
一般的にはMonticelloおよび
SqueakSourceのサーバを立てて管理
今回
Gitを利用
•HTMLファイル等の管理も行う必要があったため
  ※Source.stを管理するだけ
•SSL通信でアクセス可能
•現在,クラス単位のstファイルを出力して管理するツールを検討中
公開への道のり(バグの管理)
Redmine
チケット管理およびタスク管理が便利
すみませんRubyです・・・
公開への道のり(おまけ)
自動生成されるXHMTML以外の情報の出力
•XML, RSS,SVG...
•画像ファイル等のダウンローダ
学生の頃でWard法クラスター分析したのものを
デンドログラムを表現を作るときに活用
公開への道のり(おまけ)
renderContentOn: html
! self requestContext respond: [:response |
! ! response
! ! initializeOn: self svg ;
contentType: 'text/xml']
WAComponent subclass
公開への道のり(おまけ)
Responseを用いたsvgの出力
デモ
現在の澤田農園Webサイトの状況
• 昨年(2010秋∼2011春)と比べるとサイトアクセス数は2倍
• 予約は好調(平均サイト滞在時間は5分)
• 大きなシステムトラブルはなし
• 予約システム公開後,2回仕様変更(積極的な業務改善)
• 更なる要望なども上がっている
具体的な結果は夏頃
現在の澤田農園Webサイトの状況
• 昨年(2010秋∼2011春)と比べるとサイトアクセス数は2倍
• 予約は好調(平均サイト滞在時間は5分)
• 大きなシステムトラブルはなし
• 予約システム公開後,2回仕様変更(積極的な業務改善)
• 更なる要望なども上がっている
Smalltalkのシステムでも十分満足してもらえる
具体的な結果は夏頃
Smalltalkを使って良かった点・悪かった点
良かった点 悪かった点
•プロトタイプがすぐに作れて
イメージを持ってもらえた
•Smalltalk(Pharo)でもパ
フォーマンスとして問題ないこ
とが実感できた
•画面デザインと分業して作る
と大変(SmalltalkでHTMLまで
も記述する欠点?)
•ログ出力ライブラリ
•POSIXの正規表現ライブラリ
しかない
今後の改善
• 画面設計からのSeasideへの反映(画面モックをどのように反映するか)
• 共通ソースの管理(Gitでの管理を容易にする)
• リカバリと障害検知対策の強化(ログ等)
その他
Seasideでバグ管理システムがあるといいのでは
作って終わりではなく公開もしましょう

More Related Content

More from Sho Yoshida

今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalk
Sho Yoshida
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or Seaside
Sho Yoshida
 

More from Sho Yoshida (10)

RUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkRUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践Smalltalk
 
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for Smalltalk
 
How Smalltalker Works
How Smalltalker WorksHow Smalltalker Works
How Smalltalker Works
 
Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)Smaltalk驚異の開発(私が使い続ける2012年の話)
Smaltalk驚異の開発(私が使い続ける2012年の話)
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
 
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
情熱Smalltalker SmalltalkとAWSでクラウドサービスを実現するための挑戦
 
エコSmalltalk
エコSmalltalkエコSmalltalk
エコSmalltalk
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalk
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or Seaside
 
Pharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめようPharo(Smalltalk)でAPI作りをはじめよう
Pharo(Smalltalk)でAPI作りをはじめよう
 

もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら