Yesodのセットアップ手順:
- cabalでyesod関連のパッケージをインストール
- コマンドラインから以下のコマンドを実行。20分くらい?かかります。
- cabal install yesod-platform yesod-bin cabal-dev
- プロジェクトの生成
- 以下のコマンドを実行
- yesod init
- プロジェクト名に"Yosog"を入力
- DBは's' (sqlite) を選択
- 生成されたYesogディレクトリに移動
- cd Yosog
- サーバーのテンプレートをセットアップ、ビルドして起動?こちらは30分以上かかりました。
- cabal-dev install
- yesod --dev devel
- サーバーへの接続確認
- ブラウザで以下のURLにアクセス
- http://localhost:3000/
% yesod init
Welcome to the Yesod scaffolder.
I'm going to be creating a skeleton Yesod project for you.
What do you want to call your project? We'll use this for the cabal name.
Project name: Yosog
Yesod uses Persistent for its (you guessed it) persistence layer.
This tool will build in either SQLite or PostgreSQL or MongoDB support for you.
We recommend starting with SQLite: it has no dependencies.
s = sqlite
p = postgresql
pf = postgresql + Fay (experimental)
mongo = mongodb
mysql = MySQL
simple = no database, no auth
url = Let me specify URL containing a site (advanced)
So, what'll it be? s
That's it! I'm creating your files now...
---------------------------------------
___
{-) |\
[m,].-"-. /
[][__][__] \(/\__/\)/
[__][__][__][__]~~~~ | |
[][__][__][__][__][] / |
[__][__][__][__][__]| /| |
[][__][__][__][__][]| || | ~~~~
ejm [__][__][__][__][__]__,__, \__/
---------------------------------------
The foundation for your web application has been built.
There are a lot of resources to help you use Yesod.
Start with the book: http://www.yesodweb.com/book
Take part in the community: http://yesodweb.com/page/community
Start your project:
cd Yosog && cabal install && yesod devel
or if you use cabal-dev:
cd Yosog && cabal-dev install && yesod --dev devel
これでサンプルサーバーが起動され、ブラウザからのアクセスに対して上記のようなレスポンスを返してくれる状態になりました。さらに、自前のハンドラを登録してエコーバックするweb serviceを動作させるには以下の作業を行います。
エコーバックハンドラの登録:
- ハンドラの追加
- 以下のコマンドで空のハンドラが生成されます。
- yesod add-handler
- Name of routeに"Echo"を指定
- route patternに"/echo/#String"を指定
- list of methodsに"GET"を指定
- echoハンドラの実装
- add-handlerで生成されたHandler/Echo.hsを以下のように編集
- サーバーを起動
- 以下のコマンドを実行する。このコマンドでビルドもされます。
- yesod --dev devel
- ブラウザからechoサーバーのuriをたたく。
- 以下のURLを指定してブラウザを開きます。
- http://localhost:3000/echo/Hello%20Echo%20Server
% yesod add-handler
Name of route (without trailing R): Echo
Enter route pattern (ex: /entry/#EntryId): /echo/#String
Enter space-separated list of methods (ex: GET POST): GET
module Handler.Echo where
import Import
getEchoR :: String -> Handler Html
getEchoR theText = defaultLayout [whamlet|<h1>#{theText}|]
これで上記のような画面が表示されます。
チュートリアルを一通りなぞった後の感想
最新のサーバーフレームワーク事情に精通している訳ではないのですが、ちょっと触った感覚としてはYesodが想像以上に多機能で本格的なフレームワークであることがわかりました。rubyのWEBrick的なプリミティブなものをイメージしていたのですが比較になりません。ざっとみただけでも以下のような機能、仕組みが用意されており「恐れ入りました」という感じです。- ビルド→サーバー起動がyesodコマンド一発
- サーバー起動中もコードの変更を検知して自動的にビルド&デプロイ
- ログ出力
- Handlerの登録がadd-handler一発
- 空のハンドラコード
- ハンドラの登録
- 各種DB対応
- SQLite, PostgreSQL, MySQL, MongoDB
- config/modelsにORマップ定義ができる
- 認証・認可の仕組みも備わっている模様
- OAuthのためのライブラリも存在
- viewをtemplate(.hamlet)として分離できる
- hamletの中でhaskellコードを書くことも可能
- ループを書ける!
- コードから参照しているhamletが存在しないと、ビルド時にエラー!
- 自動生成されるhtmlをみていると各種ブラウザの振る舞いの違いも吸収してくれそう?
- cabal-devってなんのためのパッケージ?
- どうもcabalの代わりにcabal-devを利用することで、cabalでインストール済みのパッケージ群から独立して、個別のパッケージ群をインストールすることができるようです。これにより特定の環境で利用するパッケージのバージョンを固定し、cabalによるパッケージ更新の影響を受けなくできます(こことここのブログエントリ参考にしました)。
- cabal-dev installは具体的には何をやっているの?
- 前述の通りcabal-devを用いると既存のパッケージを参照しないように、必要なパッケージを全て0からダウンロード&インストールすることになります。これによりyesodでは30分という時間がかかるようです。
- チュートリアル中に"It is a good practice to use Data.Text instead of String."とあったが、その心は?
- hackageのData.Textのページを見ると、「時間的・空間的に効率の良いユニコードテキストの実装」「正規化、正規表現、非標準的なエンコーディング、ロケール等の便利な機能がそろっている」ということらしい。
github上のリポジトリでチュートリアルで利用されたコード類が公開されているようです。
終わり。
0 件のコメント:
コメントを投稿