Stack の小ネタ
はじめに
こんにちは、ishiy(@ishiy1993)です。
この記事は CAMPHOR- Advent Calendar 2018 6日目の記事です。
今回は、Haskell のビルドツールである Stack に関係する小ネタを2つ紹介します。
- stack new でカスタムテンプレートを使用する方法
- ローカルにしかないライブラリを stack runghc などで使用する方法
私の現在の環境は次の通りです。
- Arch Linux
- stack 1.9.1.1
カスタムテンプレートを使用する方法
stack で新しいプロジェクトをはじめるとき stack new
を実行しますが、このときテンプレートを指定することができます。 ここでテンプレートとは、 stack new
によって生成されるディレクトリの構造とファイルの内容を記述したものです。
テンプレートを指定しない場合は、new-template が使用されます。 他のテンプレートを使用したい場合は、stack-templates にあるテンプレート名を指定しましょう。
$ stack new sample
$ stack new sample simple-hpack
現在のstackでは、自分でテンプレートを作成し、使用することができます。 やることは、
- hsfiles を作成する
- そのパスを指定し、
stack new
する
だけです。 hsfiles は、作成されるファイル名とその内容を記述したものです。 このファイルでは mustache が使用されており、 ~/.stack/config.yaml
に定義されたパラメータ値を使ってプレースホルダーを埋めてくれます。 stack-templates にあるものをベースに好きなように編集してみましょう。 ここでは、作成したもののパスは ~/work/my-template.hsfiles
であるとします。 次のコマンドでこのテンプレートを使用することができます。
$ stack new sample ~/work/my-templates
最後に、GitHub 上で公開されているテンプレートを使用する方法を紹介します。 例として私が先日作成したテンプレートを使ってみましょう。
$ stack new sample ishiy1993/app
このコマンドは、GitHub の ishiy1993
というユーザーの stack-templates
リポジトリにある app.hsfiles
を使用することを意味します。 もし自分で作成したテンプレートを公開する場合は、リポジトリ名を stack-templates
にすることを忘れないようにしましょう。
(補足: stack new
は直接URLを指定することもできるため、リポジトリ名が stack-templates
でなくとも使うことはできます。)
ローカルのライブラリを使用する方法
次に、ローカルにしかないライブラリを stack runghc
で使用する方法を紹介します。 stack runghc
では、Hackage に公開されているライブラリを手軽に使用することができます。 さらに少し設定を行うことでローカルにしかない(= Hackage で公開していない)ライブラリを使うこともできます。
やることは、 ~/.stack/global-project/stack.yaml
の extra-deps
に使いたいライブラリへのパスを追加するだけです。 例えば、 /home/someone/myutil
というライブラリを使用したい場合を考えます。 (ここで /home/someone
はユーザーのホームディレクトリを意味します。) まず ~/.stack/global-project/stack.yaml
に次のような記述を追加します。
extra-deps:
- /home/someone/myutil
そして
$ stack runghc --package myutil sample.hs
とすることで sample.hs
において myutil
が使用できるはずです。
(補足: 一般に stack でスクリプトを実行するときは stack script
の使用が推奨されています。しかし、このコマンドは、resolver に基づいて依存関係を解決するため Hackage に公開されていないライブラリを使用するのはできないと思います。stack script
でもローカルにしかないライブラリを使う方法をご存知の方はぜひ教えていただきたいです。)
まとめ
- stack new でカスタムテンプレートを使用する方法
- ローカルにしかないライブラリをstack runghc などで使用する方法
について紹介しました。 皆さまの快適な Haskell ライフの役に立てば幸いです。
参考ページ:
- https://docs.haskellstack.org/en/stable/GUIDE/#templates
- https://github.com/commercialhaskell/stack-templates/blob/master/README.md
- https://docs.haskellstack.org/en/stable/yaml_configuration/#local-file-path
間違いなどありましたら、@ishiy1993に連絡していただけると助かります。
CAMPHOR- Advent Calendar 2018 の明日の担当は shiba6v です。お楽しみに。
ではでは。