2016年7月12日火曜日

[haskell][yesod] stackのnewコマンドで指定できるyesod関連templateの説明

現状、stackで指定できるyesod関連のtemplatesには以下のものがあります。どのtemplateに何が用意されているのか、知りたかったのですがどこにも説明されていないようなので、調べてまとめてみました。
% stack templates | grep yesod
yesod-hello-world (←現時点では削除されています)
yesod-minimal
yesod-mongo
yesod-mysql
yesod-postgres
yesod-postgres-fay
yesod-simple
yesod-sqlite

以下、各テンプレートの説明です。後に出てくるテンプレートほど内容が複雑になっています。テンプレートを指定して新しいプロジェクトを生成する場合は以下のコマンドを実行します。
% stack new プロジェクト名 yesod-???

yesod-hello-world

  • 最もシンプルなテンプレート
  • app.hs内のコードで"/"に対応するHomeハンドラだけが登録されている。
  • configurationファイルなどは一切なし。
  • Home
    • "Hello World"を表示するだけ
(2016/12/03 追記:githubの情報によるとこのテンプレートは削除されたようです。)


yesod-minimal

  • 次にシンプルなテンプレート。
  • 以下のroutesファイルによって、Home, Addの2つのハンドラが登録されている。
    • routes
    • /              HomeR GET
      /add/#Int/#Int AddR  GET
      
  • Home, Addハンドラの実装は以下の通り。
  • Home
    • 5+7の通常(HTML形式)リンクと、JSON形式のリンクを表示
  • Add
    • 5+7の結果を出力(通常はHTML形式でレスポンスを返す)
      • accept=application/jsonの場合のみJSON形式でレスポンスを返す

yesod-simple

  • 各DB用のテンプレートのベースになるテンプレート。
  • HTML, javascript, CSSの動的生成、リンク切れ検知など、DB接続と認証機能を除いて一通りの機能を確認できる。
  • 以下のフォルダ構成が生成される
    • app
      • 通常起動、devel起動用のエントリ関数
      • 通常起動は、引数で設定ファイル(yaml)を指定可能。
        % yesod-simple config/settings.yml
        
        以下のコマンドでdevel起動。
        % stack exec -- yesod devel
        
    • config
      • routesファイル(ハンドラリスト)
      • /static StaticR Static appStatic
        
        /favicon.ico FaviconR GET
        /robots.txt RobotsR GET
        
        / HomeR GET POST
        
        /comments CommentR POST
        
        
      • 設定ファイル
    • static
      • 静的ファイル置き場。デフォルトではcss, fontが配置される。
    • templates
      • テンプレートファイル置き場。Haskellコードを埋め込むことができる。
      • *.hamlet: HTML
      • *.julius: javascript
      • *.lucius: CSS
    • test
      • テストコード置き場。
      • 以下のコマンドでテスト実行。
        % stack test
        
  • 以下はコードが格納されるディレクトリ
    • Handler
      • 以下のHome, Common, Commentハンドラが生成されている。
      • Home.hs
        • ホーム画面定義。
      • Common.hs
        • FaviconR(favicon.ico)、RobotsR(robots.txt)への参照を定義。
        • これらはFoundation.hsから参照される。
      • Comment.hs
        • DB接続がないため単にエラーを表示するだけ。
    • Import
      • Import宣言まとめ。
    • Settings
      • staticディレクトリ内のファイル参照を記載しておき、コンパイル時にリンク切れのチェックを行う。

yesod-mongo/mysql/postgres/sqlite

  • 各DB用のconnectionコードと認証機能が追加されたテンプレート。
    • それぞれ、MongoDB, MySQL, PostgreSQL, SQLiteと接続するためのコードが自動生成されます。
  • yesod-simpleとの違いは下記の通り
    • config
      • route
      • 下記の通り"/auth"が追加されています。
        /static StaticR Static appStatic
        /auth   AuthR   Auth   getAuth
        
        /favicon.ico FaviconR GET
        /robots.txt RobotsR GET
        
        / HomeR GET POST
        
        /comments CommentR POST
        
      • setting.yml, test-setting.yml
        • DB接続のためのパラメタ追加。
    • Handler
      • Comment.hs
        • クライアントから送信されたコメントをDBに格納・参照する処理が定義されている。
        • 認証済みの場合はユーザー情報も合わせて格納。

yesod-postgres-fay

  • PostgreSQL+Fayを利用するためのテンプレート環境。
  • 調査が追いついていないのですが、FayではHaskellの仕様のサブセットがサポートされていて、Haskellのコードをjavascriptにコンパイルしてくれるとこのこと。

参考:

0 件のコメント:

コメントを投稿