LoginSignup
72
75

More than 5 years have passed since last update.

stackを使ってhaskellで最小のWeb Applicationしてみる

Posted at

HaskellでWeb Applicationをはじめてみたいと思う。
調べてみると、Rubyのrackのようなものとしてwaiがある。
stackを使って最小のサンプルをつくってみる。

stackは別途インストールして欲しい。Mac OSXなら

$ brew install haskell-stack

でインストールできる。他の環境はこちらで確認してください。

はじめに、プロジェクトをつくります。名前は wai-sampleとしました。

$ stack new wai-sample simple
$ cd wai-spmale

wai-sampleディレクトリが生成されます。
プログラムはwai-sample/srcに書いていくことになります。

利用するライブラリを追加してあげる必要があります。waiとwarpとhttp-typeを使うので、wai-sample.cabalに追加します。

wai-sample.cabal
  build-depends:       base >= 4.7 && < 5
    , warp, wai, http-types

となるように、以下のコマンドを実行します。

$ echo "    , wai, warp, http-types" >> wai-sample.cabal

"Hello wai"と出力するウェブサーバをつくってみます。
とある事情で環境変数PORTでポートを切り替えられるようにしています。

Main.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where

import Network.Wai (responseLBS, Application)
import Network.HTTP.Types (status200)
import Network.Wai.Handler.Warp (run, Port)
import System.Environment (getEnvironment)
import Data.List (lookup)
import Data.Maybe

main :: IO ()
main = do
  port <- getPort
  putStr "start Server: http://localhost:"
  print port
  run port helloApp

helloApp :: Application
helloApp req respond = respond $ responseLBS status200 [] "Hello wai"

getPort :: IO Port
getPort = getEnvironment >>= return . port
  where
    port = fromMaybe defaultPort . fmap read . lookup "PORT"

defaultPort :: Port
defaultPort = 3000

記述ができたら、コンパイルして実行してみましょう。

$ stack build
$ stack exec wai-sample

stack buildでビルドできて、execにプロジェクト名で実行できます。

http://localhost:3000 にアクセスすれば, 「Hello wai」と表示されます。
とても簡単です。

ソースコード: https://github.com/eiel/wai-sample
Docke Image: https://hub.docker.com/r/eiel/wai-sample/

もっと詳しく

Haskell三大Webアプリケーションフレームワークは

  • yesod
  • snap
  • HappStack

らしいです。今回利用しているのはwaiを採用しているのはyesodのみ。
yesodはいろいろ便利ですがハードルが少し高いように思います。
waiに対応しているウェブサーバの、warpが良さそうなので、waiを使うことにしました。
waiに対応しているフレームワークでyesod以外にはscottyspockなどがあり、yesodよりは入門しやすいです。
今回はフレームワークを使わないサンプルを用意しました。

プロジェクトを作成するのに使用した newサブコマンドですが、第2引数(全体でみると第3引数)はテンプレート名です。

stack new wai-sample simple

であればsimpleというtemplateを利用しています。
templateの一覧は

stack templates

で確認できます。

参考文献

72
75
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
75