吉田 翔
もしイチゴ農家の園主が
Smalltalk
の「
Seaside
」(で
作られたシステム)を使ってみたら
http://swikis.ddo.jp/umejava/38
日本初?
Seaside
の紹介ページ
できた.終了!
作ってみる チュートリアル
実際に一般公開してみた
いちご狩り予約管理システム
予約システムの導入経緯1
いちご狩り予約は電話とFAX
記録・管理
日ごとに整理
予約情報は紙に記録
システム導入前の問題
知りたい情報はどこに?
様子が分からない
•子どもでも取れるのか
•汚れないか
•通路は広いか
コンセプト
sawadafarm.com
予約管理システム
1分で知って
10
分で予約
澤田農園サイト
sawadafarm.com
サイト全体を予約システムとする
なぜ
Seaside
?
• ポータブルな環境であったこと
• 予約画面のプロトタイプは3時間で作って,イメージを持ってもらえた
• ページ遷移の記述が非常に楽なこと
• Smalltalkで作ったシステムを一般公開してみたかった
フロー制御
一般画面 予約画面 ダー表示カレン 処理
ユーザ操作 システム遷移
予約状況 確認画面 (時間)
年間カレ ンダー
月カレン ダー
予約 クリック
クリック
クリック クリック
クリック クリック
※A
クリック
編集削除 クリック
※C
お客様予約入力遷移
クリック
フロー制御
Web
開発で悩む処理
認証成功
登録 認証失敗
Login
main page
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月 9月 11 1月
?月
吉田への依頼?
画面設計 仕様調整
Seasideでプロタイプで
イメージを持ってもらう
コンセプトと
意識改革
着手依頼 サーバ構築
Webページ移行
予約システム公開
コンセプト
要件
システム構成
Apache
PostgreSQL Web AP (Smalltalk)
メール配信機能 (バッチ処理)
公開への道のり(日本語の対応)
|adapter|
WAComancheAdaptor startOn: 8080.
adapter := WAComancheAdaptor default.
adapter codec: (GRCodec forEncoding: 'utf-8').
adapter isRunning
公開への道のり(開発ツールの削除)
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ルールを記載する
公開への道のり(画像ファイルと
CSS
)
WAFileLibraryのsubclassを作成
MyFileLibrary addFileAt:'./css/main.css'.
MyFileLibrary addAllFilesIn: './css/'.
または
Workspace上で以下のコードを実行
公開への道のり(画像ファイルと
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の修正を独立できる公開への道のり(バッチの呼び出し)
メール送信機能はSmalltalkで作れなかった
仮予約通知 本予約通知
キャンセルおよび自動キャンセル通知 前日予約集計通知
お客様質問通知
時間がなかった
日本語の取り扱いに懸念点があった
メール送信機能
公開への道のり(バッチの呼び出し)
OSProcess command:ʼcancelMail.rbʼ.
※実際には絶対パスでスクリプトを指定すること
OSProcessを用いる
MetacelloのプロジェクトのConfigurationOfOSProcess※1
導入すればよい
System performOnServer: 'date'
Gemstoneの場合 OSProcessは不要
Web AP (Smalltalk) メール配信機能
公開への道のり(
PostgreSQL
との接続)
SqueakDatabaseAccessor DefaultDriver:(Smalltalk at: #NativePostgresDriver). ConfigurationOfGlorpDBX project lastVersion load:'Core'.
Glorp※1を用いる
Glorpを普通に使いたいならCoreがおすすめ
公開への道のり(ソースコードの管理)
一般的にはMonticelloおよび
SqueakSourceのサーバを立てて管理
今回
Gitを利用
•HTMLファイル等の管理も行う必要があったため
※Source.stを管理するだけ
•SSL通信でアクセス可能
公開への道のり(バグの管理)
Redmine
チケット管理およびタスク管理が便利
公開への道のり(おまけ)
自動生成されるXHMTML以外の情報の出力
•
XML, RSS,SVG...•
画像ファイル等のダウンローダ学生の頃でWard法クラスター分析したのものを
公開への道のり(おまけ)
renderContentOn: html
! self requestContext respond: [:response |
! ! response
! ! initializeOn: self svg ;
contentType: 'text/xml']
公開への道のり(おまけ)
現在の澤田農園
Web
サイトの状況
• 昨年(2010秋∼2011春)と比べるとサイトアクセス数は2倍
• 予約は好調(平均サイト滞在時間は5分)
• 大きなシステムトラブルはなし
• 予約システム公開後,2回仕様変更(積極的な業務改善)
• 更なる要望なども上がっている
Smalltalkのシステムでも十分満足してもらえる
Smalltalk
を使って良かった点・悪かった点
良かった点 悪かった点
•プロトタイプがすぐに作れてイ
メージを持ってもらえた
•Smalltalk(Pharo)でもパ
フォーマンスとして問題ないこ とが実感できた
•画面デザインと分業して作ると
大変(SmalltalkでHTMLまでも記
述する欠点?)
•ログ出力ライブラリ
•POSIXの正規表現ライブラリし
今後の改善
• 画面設計からのSeasideへの反映(画面モックをどのように反映するか)
• 共通ソースの管理(Gitでの管理を容易にする)
• リカバリと障害検知対策の強化(ログ等)
その他