Yesodを使ってWebアプリケーションを作るとき、よほどのことがなければYesodのベストプラクティスが詰まったテンプレートをベースに開発するのが、無難な選択です。
HaskellのビルドツールであるstackにはYesodのテンプレートが提供されています。
このエントリではテンプレートが生成するファイルの中でも、特に重要なものを解説します。
各ファイルの役割を知ることで、独自のカスタマイズや拡張を施したいときに、どうすればいいか当たりが付けやすくなります。
stackでYesodプロジェクトを作る
例えば、データベースがPostgreSQLのYesodプロジェクトをテンプレートから生成するコマンドは次のようになります。
stack new <プロジェクト名> yesod-postgres
stackが生成する初期ファイル
▸ app/
▸ config/
▸ Handler/
▸ Import/
▸ Settings/
▸ static/
▸ templates/
▸ test/
Application.hs
Foundation.hs
Import.hs
Model.hs
Settings.hs
stack.yaml
test.cabal
app/ディレクトリ
さわることはありません!
config/ディレクトリ
▾ config/
favicon.ico
keter.yml
models
robots.txt
routes
settings.yml
test-settings.yml
名前の通り、設定系のファイルがあります。
favicon.ico
ファビコンファイルです。自分のサイトのファビコンを作って上書きします。
keter.yml
Yesodをデプロイするツールであるketerの設定ファイルです。
keterを使うと非常にデプロイが便利なので、利用をおすすめします。
keter.ymlはそのままでは使えません。環境に合わせて編集が必要です。
models
データベースのスキーマを書きます。
とても重要です。
私は新しい機能を開発するときは、まずこのファイルを編集します。
robots.txt
Googleのクローラーなどに指令を出します。
Yesod独自のファイルというわけではなくWebサイトでは一般的に使うファイルです。
routes
どのURLにどのメソッドでリクエストが来た時に、どのハンドラ関数が動くかを書きます。
とても重要です。
settings.yml
その名の通り、各種設定です。
データベースの設定やコピーライトなどを書きます。
独自の設定を追加することもできます。
test-settings.yml
テスト時の設定です。
Handler/ディレクトリ
最もよく触るファイルが格納されています。
いわゆるハンドラ関数、つまりURLにリクエストが来た時に動作する関数が定義されたファイルを格納します。
Yesodでの開発は、ハンドラ関数を作るのがメインの作業です。
Import/ディレクトリ
NoFoundation.hs
というファイルが1つだけ格納されています。
たまに触ります。
ハンドラ関数の中でよく使うパッケージをまとめたファイルで、トップレベルにある Import.hs
から参照されています。
ハンドラ関数の中で頻繁に使うユーティリティを書いた時に編集することがあります。
Settings/ディレクトリ
StaticFiles.hs
というファイルが1つだけ格納されています。
触ることはありません。
static/ディレクトリ
その名の通り、静的なファイルを格納するため、「触るときは触る」とい感じです。
重要なのは、YesodとReactを組み合わせるときです。
Reactをコンパイルした結果のJavaScriptファイルはこのディレクトリの下に格納することになるので、その場合は非常に頻繁に触ることになります。
・・・他のファイルの役割は、随時追加していきます。