stack コマンドを使ってみた

6月9日に FP Complete から stack コマンドがリリースされました(公式ブログ)。とりあえずブログ1文目を訳すとこんな感じです。

stack は新しく、完璧で、クロスプラットフォームで動作する開発ツールで、新参も古参も対象にしていて、コンパイラーをインストールしてセットアップして、必要なパッケージをインストールして、ビルドして、プロジェクト内の1つ以上のパッケージのテストをするもしくはベンチマークを取るためのものです。

stack is a new, complete, cross-platform development tool aimed at both new and experienced Haskell developers alike, for installing and setting up the compiler, installing packages needed, and building, testing or benchmarking one or more packages in a project at a time.

とりあえずこれさえ入れておけば Haskell に必要なコマンドはこれで完結するというような謳い文句です。1つのプロジェクトをビルドしたら別のプロジェクトがビルドできなくなったというようないわゆる deps hell も解決すると書かれています。

stack コマンド

stack ghcGHC が起動します。インストールされていなければダウンロードしてインストールからしてくれます。同じように stack ghcistack runghc が使えます。

stack build でプロジェクトのビルドができます。設定は stack.yamlproject-name.cabal ファイルに書きます。stack は cabal を置き換えるものらしいですが、.cabal ファイルは使うようです。

cabal install に当たるようなコマンドはなさそうです。

設定ファイル

.cabal ファイルは cabal が使っていたものと同じです。stack.yaml は Stackage のどのバージョンを使用するかを表す resolver が必須になります。なので、最低限下記な感じ。

resolver: lts-2.13

Stackage に存在しないパッケージを利用する場合は extra-deps を追記します。

extra-deps:
- foo-1.2.3.4
- bar-9.8.7.6

パッケージ

インストールされるパッケージは、GHC と一緒についてくるものについては global に、Stackage にあるものについては snapshot に、extra-deps で指定したものについては local に保存されます。global には追加では一切パッケージは保存されなくて、snapshot はプロジェクト間で共有、local はプロジェクトごとに固有になっていて、deps hell を避けるようになっています。

感想

とりあえず Windows での Haskell 環境がめっちゃ楽になったぞい、です。

詳しい内容はこの辺Wiki を見てください。

ちなみにまだバージョン 0.0.0 ですが、0.1 が出ると tanakh さんがもっと詳しい記事を書いてくれると思います。

今見たら 0.0.1 は欠番?で 0.0.2 が出てた。

(2015.06.25 追記) tanakh さんがもう少し詳しくて新しい情報をまとめてくれました。