LoginSignup
5
5

More than 5 years have passed since last update.

Yesodのテンプレートから生成されるファイルの役割

Last updated at Posted at 2016-12-02

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ファイルはこのディレクトリの下に格納することになるので、その場合は非常に頻繁に触ることになります。

・・・他のファイルの役割は、随時追加していきます。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5