HaskellのWebフレームワークYesodでHello World

HaskellでWebアプリケーションを作ってみたくなりました。
まずはこの本でHaskellの勉強をしています。まだ途中ですが、難しいことを書いているのに読みやすくて良い本です!
916Tv9qiy8L
すごいHaskellたのしく学ぼう!
しかし、関数型らしい構文を学んでいても、Webアプリケーションで使えるイメージは全然湧いてきません…。
言語の勉強と並行して、簡単にWebアプリケーションフレームワークを触ってみたいと思いました。

HaskellのWebフレームワークYesod

HaskellのWebフレームワークとして人気のありそうなYesodを使ってみることにしました。
FireShot Capture 031 - Yesod Web Framework for Haskell - www.yesodweb.com
このクイックスタートをやってみます。
Yesod quick start guide
ちなみに、Haskellのフレームワークについて調べてみると、Yesod、Snap、Happstackあたりが主力のようです。

Stackをインストール

以前Haskellを試してみた時は、Haskell Platformをインストールして、対話シェルで実行していました。
Mac OS XにHaskellの開発環境を構築してHello World
今回は、Stackというビルドツールを使います。
The Haskell Tool Stack
今のマシンにはGHCをインストールしてもいないんですが、Stack経由でインストールできます。そういうわけで、まずはStackをインストールします。

curl -sSL https://get.haskellstack.org/ | sh

警告がログ出力されたので、パスだけ通しておきます。

WARNING: '/Users/katty0324/.local/bin' is not on your PATH.
    For best results, please add it to the beginning of PATH in your profile.
export PATH=$PATH:/Users/katty0324/.local/bin

これでstackが使えるようになりました!

$ stack --version
Version 1.9.3, Git revision 40cf7b37526b86d1676da82167ea8758a854953b (6211 commits) x86_64 hpack-0.31.1

Yesodプロジェクトの作成

Stackを通してプロジェクトの雛形を作成できます。
yesod-exampleという名前で作成しました。yesod-sqliteというのは、テンプレートの名前です。

stack new yesod-example yesod-sqlite

テンプレートを元にいくつかのファイルが作成されました。

$ tree -L 1 .
.
├── README.md
├── app
├── config
├── package.yaml
├── src
├── stack.yaml
├── static
├── templates
├── test
└── yesod-example.cabal
6 directories, 4 files

中身はまだ読める能力がないので、詳しくは見ずに先に進みます。

ビルドする

その前に、コマンドラインツールをインストールします。この時に一緒にGHCをインストールします。

stack install yesod-bin --install-ghc

GHCをインストールして、yesod-binの依存をダウンロードして、yesod-binをビルドするので、少し時間がかかります。
ここまで準備ができたら、実際にプロジェクトをビルドします!

stack build

こちらも依存をダウンロードしてビルドするので、少し時間がかかります。

Webアプリケーションを起動する!

ビルドが完了したら、早速アプリケーションを起動します!

stack exec -- yesod devel

3000ポートでアクセスすることができます。

open http://localhost:3000/

FireShot Capture 032 - Welcome To Yesod! - localhost
表示されました!

おわりに

「YesodでHello World」というタイトルにしたのに、Hello Worldと表示されませんでした。このページを書き換えたりしたいところですが、HaskellもStackもYesodもまだよく分からないので、本当のHello Worldはこれからです。
Haskell面白いので、しばらく勉強して、書き記していくかもしれません!

タイトルとURLをコピーしました