YesodでHelloWorldします。
Yesodを検索するとデフォルト画面の出し方や、シェークスプアテンプレートを使わないサンプルはよく見るのですが、ページを追加してHelloWorldする記事があまりなく、少しはまったので記事にしました。
OS: Windows8.1 64bit
Stack: 1.7.1
まずはstackでmy-projectプロジェクトを作成。
stack new my-project yesod-sqlite
cd /d my-project
yesodをインストール。
stack install yesod-bin --install-ghc
ここまででyesodのデフォルトページが作成されています。
実行してみます
stack build
stack exec -- yesod devel
http://localhost:3000
にアクセスすると、こんな感じのデフォルトページが表示されます。
Ctrl+Cでいったん止めます。
HelloWorldを表示するページを作成。
スキャフォルド機能でページを追加します。
stack exec -- yesod add-handler
下記のように質問されるので、それぞれ Hello, /Hello, GETと入力します。
Name of route (without trailing R):Hello
Enter route pattern (ex: /entry/#EntryId):/Hello
Enter space-separated list of methods (ex: GET POST): GET
/Helloというページが作成されますが、アクセス許可を与える必要があります。
my-project\src配下のFoundation.hsファイルで設定します。
162行目あたりに
-- Routes not requiring authentication.
という記載があるので、その下に一行追加します
isAuthorized HelloR _ = return Authorized
実行してみます。
stack build
stack exec -- yesod devel
http://localhost:3000/Hello
にアクセスすると下記のように表示されます。
Ctrl+Cで止めて、HelloWorldが表示されるように修正します。
my-project\src\Handler配下のHello.hsファイルを修正します。
開くと下記のように作成されています。
module Handler.Hello where
import Import
getHelloR :: Handler Html
getHelloR = error "Not yet implemented: getHelloR"
先頭行にライブラリを追加し、最下行をコメントアウトして、一行追加します。
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module Handler.Hello where
import Import
getHelloR :: Handler Html
--getHelloR = error "Not yet implemented: getHelloR"
getHelloR = defaultLayout $(widgetFile "hello")
my-project\templatesにhello.hamletファイルを作成して下記のように記載します。
<p>HelloWorld!
閉じタグは不要です。
実行します。
stack builid
stack exec -- yesod devel
http://localhost:3000/Hello
にアクセスすると下記のようにHelloWorld!が表示されます。
めでたしめでたし。
https://github.com/ringo-apo/qiita_hs_yesod_hello
##参考
[Yesod入門(1)] Stack,Yesodのインストール~起動 │ Web備忘録
書籍 Haskellで作るWebアプリケーション