Your SlideShare is downloading. ×
0
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
みんなでWAIWAI Webアプリ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

みんなでWAIWAI Webアプリ

595

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
595
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. みんなでWAIWAI Webアプリ Kiwamu Okabe
  • 2. Web流行ってますね猫も杓子もWebアプリ。WebアプリをHaskellでも作れると=> モテモテ?
  • 3. WebアプリといえばRails近年のWebアプリは↓の連携で設計するみたい。☆ Webアプリ☆ Webアプリケーションフレームワーク☆ Webサーバ
  • 4. アプリとサーバの連携はどうやる?WSGIとかRackが有名みたい。* http://www.python.org/dev/peps/pep-0333/* http://rack.github.com/☆ Webアプリケーションフレームワーク☆ Webサーバの界面をAPI化したものらしい。CGIしかなかった20世紀からずいぶん遠くへ。
  • 5. アプリとサーバを分離(Rackの場合)require rubygemsrequire rackclass HelloWorld def call(env) [200, {"Content-Type" => "text/html"}, "Hello Rack!"] endendRack::Handler::Mongrel.run HelloWorld.new, :Port => 9292みごとにcallメソッドで分離されてます。
  • 6. そーゆーのHaskellにないの?WAIってのがありますよ。
  • 7. WAIのインターフェイスWebアプリケーションフレームワークの例-- wai-app-staticstaticApp :: StaticSettings -> Application-- wai-app-file-cgicgiApp :: ClassicAppSpec -> CgiAppSpec -> CgiRoute -> ApplicationWebサーバの例-- warprun :: Port -> Application -> IO ()-- wai-extrarunSendfile :: B.ByteString -> Application -> IO ()-- wai-handler-webkitrun :: String -> Application -> IO ()Application型がキモ。
  • 8. じゃあ作ってみようファイルの中身返すだけのWebサーバ。 使用ライブラリは以下。☆ フレームワーク: wai-app-static☆ サーバ: Warp
  • 9. 材料1: Warprun関数を使えば簡単そう。
  • 10. 材料2: wai-app-static その1Application作りたいんだけど、StaticSettingsってのはどこから?
  • 11. 材料3: wai-app-static その2ルートディレクトリを指定したらイイ感じなStaticSettingsを作ってくれる関数発見。
  • 12. できたコード{-# LANGUAGE OverloadedStrings #-}import Network.Waiimport Network.Wai.Handler.Warpimport Network.Wai.Application.StaticmyWaiApp :: ApplicationmyWaiApp = staticApp $ defaultFileServerSettings "."main :: IO ()main = run 9191 myWaiApphttp://localhost:9191 をWebブラウザで見てみましょう。
  • 13. Webサーバをすげ替えることも{-# LANGUAGE OverloadedStrings #-}import Network.Waiimport Network.Wai.Handler.Webkitimport Network.Wai.Application.StaticmyWaiApp :: ApplicationmyWaiApp = staticApp $ defaultFileServerSettings "."main :: IO ()main = run "MyWaiApp" myWaiAppWebkitのウィンドウが起動して、その中でWebアプリが動く。
  • 14. ちょっとまともなApplication{-# LANGUAGE OverloadedStrings #-}import qualified Network.Wai as Wimport qualified Network.HTTP.Types as Himport qualified Network.Wai.Handler.Warp as WPimport qualified Data.ByteString.Lazy as Lheader :: H.ResponseHeaders -- [(HeaderName, ByteString)]header = [("Content-Type", "text/plain")]myWaiApp :: W.Application -- Request -> ResourceT IO ResponsemyWaiApp req | W.requestMethod req /= "GET" = return r where r = W.responseLBS H.status405 header "Only GET is supported"myWaiApp req = return r where s = "Path:" `L.append` L.fromChunks [W.rawPathInfo req] r = W.responseLBS H.status200 header smain :: IO ()main = WP.run 9191 myWaiApp
  • 15. 参考資料* 「(続) Haskell で Web サーバーを実装してみました」 山本和彦 http://www.mew.org/~kazu/material/2011-mighttpd2.pdf* 「WAI」パッケージ http://hackage.haskell.org/package/wai* 「Warp」パッケージ http://hackage.haskell.org/package/warp* 「wai-app-static」パッケージ http://hackage.haskell.org/package/wai-app-static

×