Your SlideShare is downloading. ×
みんなで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アプリ

570

Published on

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

No Downloads
Views
Total Views
570
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

×