私が作った stack template
今回の記事に関連して作成したテンプレートは gist に置いています。
- hspeck + hpack
https://gist.github.com/algas/0ec303769e09a8c9188b83a3d7a8990c#file-hspec-hpack-hsfiles - servant + hspec + hpack
https://gist.github.com/algas/0ec303769e09a8c9188b83a3d7a8990c#file-servant-hpack-hsfiles
hpack も stack template も知ってるし使ってるという方は、記事を読まなくてもいいので上記のテンプレートを使ってみてください。
独自にカスタマイズしたい方もご自由にどうぞ。
hpack とは?
hpack は .cabal
ファイルを package.yaml
から生成する機能を提供します。
(hpack を使わずに) Haskell のプログラムを作成するには .cabal
ファイルを書く必要があります。
.cabal
の代わりに package.yaml
を作成・編集することによって開発時の煩わしさを軽減できます。
hpack を使うメリットを知るには下記の記事が参考になります。
これからのHaskellプロジェクトではcabalではなくpackage.yaml(hpack)を使いましょう
stack template
stack template は Haskell (stack) のプロジェクトの雛形を作成するときに使います。
例えば simple-hpack
template を使ってプロジェクト(YOUR_PROJECT)を作成するには、以下のコマンドを実行します。
stack new YOUR_PROJECT simple-hpack
template 一覧を表示する
テンプレートは上記以外にも複数あります。
以下のコマンドでテンプレート一覧を表示します。
stack templates
独自テンプレートを使う
筆者がよく使うのは hspec というテストフレームワークと servant というWebフレームワークです。
毎度、新しいアプリケーションを作る度に雛形を用意するのは大変なので、独自のテンプレートを用意しました。
以下のコマンドでテンプレートからプロジェクトを作成できます。
- hspec + hpack
stack new hspec-example https://gist.githubusercontent.com/algas/0ec303769e09a8c9188b83a3d7a8990c/raw/e88e90e8bcf319077a3f4391e13088e73901aed3/hspec-hpack.hsfiles
- servant + hspec + hpack
stack new servant-example https://gist.githubusercontent.com/algas/0ec303769e09a8c9188b83a3d7a8990c/raw/e88e90e8bcf319077a3f4391e13088e73901aed3/servant-hpack.hsfiles
プログラムの実行
- ビルド
stack build
- テスト実行
stack test
- プログラム実行(前後の空白を除去する)
stack build && stack exec hspec-example
echo ' foo bar ' | stack exec hspec-example
- プログラム実行(Webサーバ)
stack build && stack exec servant-example
curl http://localhost:8080/users
参考文献
https://github.com/sol/hpack
https://github.com/commercialhaskell/stack-templates
https://www.ncaq.net/2017/07/31/