Web技術勉強会 第33回
Upcoming SlideShare
Loading in...5
×
 

Web技術勉強会 第33回

on

  • 1,652 views

Web技術勉強会 第33回

Web技術勉強会 第33回

Statistics

Views

Total Views
1,652
Slideshare-icon Views on SlideShare
1,648
Embed Views
4

Actions

Likes
0
Downloads
6
Comments
0

1 Embed 4

http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Web技術勉強会 第33回 Web技術勉強会 第33回 Presentation Transcript

    • Web技術勉強会 第33回 Web application by Sinatra+iPhone Ryuichi TANAKA.
    • Thema. 何かアプリケーションが作りたい 最近は迷走気味…。 iPhoneを買ったので、使いたい でもiPhoneアプリは作らない 新しい技術テーマを取り入れたい JavaかRuby?
    • Thema! 何かアプリケーションが作りたい 自分で買ったもの(本とかCDとか)を管理す るアプリ  iPhoneを買ったので、使いたい バーコード(1次元)を撮ると買ったもの(JAN コード)を取得できるアプリ発見。しかも HTTP経由で送信可能。
    • Thema! 新しい技術テーマを取り入れたい 今のお気に入りである「Ruby」か「Java」で 作りたい。 Ruby RailsかSinatra、ある程度自前でRubyをしっか り書きたい。 Java Wicket+Maven。フレームワークを使いたい。
    • QuickMark iPhoneで撮影したバーコードを管理 「QuickMark」 台湾製iPhoneアプリ 有料版のほうが機能が豊富 3GSでないとオートフォーカスがうまく いかない 撮影したバーコードをHTTP GETで送 信できる
    • MediaMarker http://mediamarker.net/ QuickMarkと連携可能。書籍などの情報を登 録できる。 というか、作りたいものはこのシステムが全て やってる気が…。 …否!
    • Do it myself 自分でないと実現できないこともある 管理するデータ定義 I/F なによりスキルアップ 「すでにあるからやらない」ではだめ 商用ではなく趣味なのだからOK それを考えると動けない それでも少しはオリジナリティを出すべき
    • Technical Thema では、何で作るか。 言語候補 PHP 何度となく使用してきた経験あり。ある程度規模が大 きくても平気。 Perl 頻繁に使用。ただ、規模が大きくなると不安。 Java 最近使ってる。ちゃんとしたWebアプリ未経験。 Ruby Railsのみ。Ruby自身はほとんど経験なし。
    • Technical Thema では、何で作るか。 言語候補 PHP 何度となく使用してきた経験あり。ある程度規模が大 きくても平気。 Perl 頻繁に使用。ただ、規模が大きくなると不安。 Java 最近使ってる。ちゃんとしたWebアプリ未経験。 Ruby これに決定! Railsのみ。Ruby自身はほとんど経験なし。
    • 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))
    • System Summary きわめてシンプル
    • Technical Effort 今回はシステムの目新しさより技術的に新しいこ とを取り入れることを重視 設計(拡張MVC) 共通化と依存性の排除 各レイヤでの明確な役割分担
    • Past Failure これまで作ってきたシステムの設計上の問題 点 役割分担(MVC)があいまい(除くRails) 各機能の依存度が高い 異常系の作りこみが甘い 今回はこれを出来る限りなんとかしたい。これ を全てRubyだけで実装する縛り
    • System Design システムは「登録部」と「表示部」に分ける 登録部:iPhoneから送信したバーコードの 商品をServerに保存 表示部:登録部で保存した商品を表示する ポータル
    • System Design システムは「登録部」と「表示部」に分ける 登録部:iPhoneから送信したバーコードの 商品をServerに保存 表示部:登録部で保存した商品を表示する ポータル 今回は「登録部」について
    • Sinatra 登録部にはSinatraを採用 登録部は機能がシンプルでUIを作りこむ必要 がないため、Railsでは手に余る。 自分で設計できる MVCなどを自分でやる必要がある その分自由度は高い Rubyをがりがり書く必要があるためスキル アップにはもってこい 
    • What's "Sinatra"? Sinatra はRubyで下記のような最小労力で手早くウェブア プリケーションを作成するためのDSL http://www.sinatrarb.com/intro-jp.html require 'rubygems' require 'sinatra' get '/' do 'Hello world!' end
    • Sinatra's Feature MVCのような階層定義はない 自分でつくるしかない Railsのような決め事はない。 規模が大きくなると設計をしっかりやらないと厳しい Railsよりはるかに簡単 Railsは覚えることがとにかく多いがSinatraはほとんどない。 Rubyの習得には向いている
    • MVC's Problems
    • MVC's Problems これを実現するには「C」を極力小さくしないと(5行は 微妙だが)いけない。 だが、インスタンス作ったりするとすぐ10、20行いく。 Controllerは「イベント」を受け取って、「Model」に投げ ることしかしてはいけない。 Modelに投げる前の前処理もすべきではない。 となると、MVCじゃ無理。
    • Extension MVC とにかくControllerは最小最低限。 もう1層必要になるので用意した。 拡張MVC ちょっとまえにRails界隈で話題に。 Service層を新たに定義 MとCの間に配置
    • Service Layer サービスクラスをレイヤレベルに拡張したもの(と俺は 定義) サービスクラスはI/Fを単純化する役割を持つ 例えば、「ログイン処理」 ログイン処理はいくつもの「手続き」が必要 だが、使う側は「ログインする」という手続きだけ知っていれ ばいい。つまり、こまけえことは(ry Controllerで必要ないくもの「手続き」をシンプルにす るためにサービス層を定義することでModelへのI/F が非常に簡単ですむ
    • Extension MVC sequence Controller Model Service View
    • Development Env. SinatraアプリはそのままRubyコマンドで起動 > ruby server.rb http://localhost:4567/0000000000000 (000...000はJANコード13桁) 開発環境(Windows)ではRackupが使えない 別に開発環境ならそのまま実行しても問題ない ログもそのまま見れるし。
    • Production Env. 本番環境では「rack+thin+mongrel」でデーモ ン起動 rackupを使うため、config.ruを用意 thinはmongrelのラッパAPサーバ mongrelより約15%ほどメモリが節約され高速 に動作する しかもデーモン起動可能
    • Production Env.(Caution) 本番環境のサーバ設定でつまづいたところ rackup単独のデーモン起動の動作がおかしい rackup config.ru → OK(ただしデーモンにならない) rackup -D config.ru → NG(確実にバグだと思う) どうやらプログラム内で参照するパスのルートがおかしく なっている模様。なぜか/usr/local/binがルートになる -D をつけただけでルートパスが変わるのはあきらかにバ グといえる。  停止コマンドがなく、killするしかないって…。
    • Production Env.(Caution) thinを導入することであっさり解決 設定ファイルを用意し、ログへのパス、ポート、実行するファ イル(config.ru)、などを書く(mongrel_clusterと同じ感じ) sinatraルートで thin start -C (設定ファイルのパス) start 停止コマンドもある thin stop -C (設定ファイルのパス) stop
    • Class Fig.
    • server.rb, config.ru サーバ起動スクリプト Sinatraの構文 get '/' do ... end を記述 server.rbはWindows開発時に直接実行 config.ruはサーバ環境でthin経由で実行
    • Controller main.rb(Tmarker::Main) HTTPリクエストを受け取る Serviceを呼び出す Modelを呼び出す(DB処理) Service、ModelからのレスポンスをViewに渡 す
    • Service bridge.rb(Tmarker::Bridge) Controllerからのリクエストを加工し、Modelへ中継 する notice.rb(Tmarker::Notice) Modelから受け取ったメッセージを保持する (Singleton)
    • 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問い合わせ
    • Let's register to tmaker ←手元に あった本
    • Let's register to tmaker ←QuickMark で撮影+送信
    • Let's register to tmaker ←登録成功
    • Let's register to tmaker ←登録失敗(重 複はNG)
    • Let's register to tmaker ←iPhone以外 のアクセスは NG
    • Result 表示部を作成する Rails2.3ベースで作成予定 今回のノウハウを他のシステムにも展開 Sinatra/Railsの組み合わせは悪くない Sinatraは初心者でも使える PHPくらい導入しやすい 自由度が高いので設計しがいがある