More Related Content
Similar to Web技術勉強会 第33回 (20)
Web技術勉強会 第33回
- 3. Thema!
何かアプリケーションが作りたい
自分で買ったもの(本とかCDとか)を管理す
るアプリ
iPhoneを買ったので、使いたい
バーコード(1次元)を撮ると買ったもの(JAN
コード)を取得できるアプリ発見。しかも
HTTP経由で送信可能。
- 4. Thema!
新しい技術テーマを取り入れたい
今のお気に入りである「Ruby」か「Java」で
作りたい。
Ruby
RailsかSinatra、ある程度自前でRubyをしっか
り書きたい。
Java
Wicket+Maven。フレームワークを使いたい。
- 7. Do it myself
自分でないと実現できないこともある
管理するデータ定義
I/F
なによりスキルアップ
「すでにあるからやらない」ではだめ
商用ではなく趣味なのだからOK
それを考えると動けない
それでも少しはオリジナリティを出すべき
- 8. Technical Thema
では、何で作るか。
言語候補
PHP
何度となく使用してきた経験あり。ある程度規模が大
きくても平気。
Perl
頻繁に使用。ただ、規模が大きくなると不安。
Java
最近使ってる。ちゃんとしたWebアプリ未経験。
Ruby
Railsのみ。Ruby自身はほとんど経験なし。
- 9. Technical Thema
では、何で作るか。
言語候補
PHP
何度となく使用してきた経験あり。ある程度規模が大
きくても平気。
Perl
頻繁に使用。ただ、規模が大きくなると不安。
Java
最近使ってる。ちゃんとしたWebアプリ未経験。
Ruby これに決定!
Railsのみ。Ruby自身はほとんど経験なし。
- 10. Choice Reason
コードが短く書ける
Perl or Ruby (not Java、PHP?)
ライブラリが豊富
Perl or Ruby (or Java with Maven) (not PHP)
学ぶ要素が多い(未知のことが多い)
Ruby or Java (or Perl with PSGI, Plack)
フレームワークがある
Ruby(Rails,Sinatra) or Java(Wicket(not Struts)) or
PHP(CakePHP, Rhaco) (not Perl(Catalyst))
- 12. Technical Effort
今回はシステムの目新しさより技術的に新しいこ
とを取り入れることを重視
設計(拡張MVC)
共通化と依存性の排除
各レイヤでの明確な役割分担
- 13. Past Failure
これまで作ってきたシステムの設計上の問題
点
役割分担(MVC)があいまい(除くRails)
各機能の依存度が高い
異常系の作りこみが甘い
今回はこれを出来る限りなんとかしたい。これ
を全てRubyだけで実装する縛り
- 16. Sinatra
登録部にはSinatraを採用
登録部は機能がシンプルでUIを作りこむ必要
がないため、Railsでは手に余る。
自分で設計できる
MVCなどを自分でやる必要がある
その分自由度は高い
Rubyをがりがり書く必要があるためスキル
アップにはもってこい
- 18. Sinatra's Feature
MVCのような階層定義はない
自分でつくるしかない
Railsのような決め事はない。
規模が大きくなると設計をしっかりやらないと厳しい
Railsよりはるかに簡単
Railsは覚えることがとにかく多いがSinatraはほとんどない。
Rubyの習得には向いている
- 22. Service Layer
サービスクラスをレイヤレベルに拡張したもの(と俺は
定義)
サービスクラスはI/Fを単純化する役割を持つ
例えば、「ログイン処理」
ログイン処理はいくつもの「手続き」が必要
だが、使う側は「ログインする」という手続きだけ知っていれ
ばいい。つまり、こまけえことは(ry
Controllerで必要ないくもの「手続き」をシンプルにす
るためにサービス層を定義することでModelへのI/F
が非常に簡単ですむ
- 26. Production Env.(Caution)
本番環境のサーバ設定でつまづいたところ
rackup単独のデーモン起動の動作がおかしい
rackup config.ru → OK(ただしデーモンにならない)
rackup -D config.ru → NG(確実にバグだと思う)
どうやらプログラム内で参照するパスのルートがおかしく
なっている模様。なぜか/usr/local/binがルートになる
-D をつけただけでルートパスが変わるのはあきらかにバ
グといえる。
停止コマンドがなく、killするしかないって…。
- 27. Production Env.(Caution)
thinを導入することであっさり解決
設定ファイルを用意し、ログへのパス、ポート、実行するファ
イル(config.ru)、などを書く(mongrel_clusterと同じ感じ)
sinatraルートで
thin start -C (設定ファイルのパス) start
停止コマンドもある
thin stop -C (設定ファイルのパス) stop
- 29. server.rb, config.ru
サーバ起動スクリプト
Sinatraの構文 get '/' do ... end を記述
server.rbはWindows開発時に直接実行
config.ruはサーバ環境でthin経由で実行
- 32. Model
db.rb(Tmarker::Common::DB)
DB処理(Singleton)
log.rb(Tmarker::Common::Log)
ログ出力(Singleton)
user.rb(Tmarker::Common::User)
ユーザ認証(未実装)
mail.rb(Tmarker::Common::Mail)
メール送信
util.rb(Tmarker::Common::Util)
共通処理
amazon.rb(Tmarker::Service::Amazon)
Amazon問い合わせ
- 38. Result
表示部を作成する
Rails2.3ベースで作成予定
今回のノウハウを他のシステムにも展開
Sinatra/Railsの組み合わせは悪くない
Sinatraは初心者でも使える
PHPくらい導入しやすい
自由度が高いので設計しがいがある