Stackは、Haskellのパッケージ管理システムです。
Stackの説明、導入方法はよい記事があります。私もそちらを参考にStackを使ってみたところ、快適に開発することができました。
実際にやってみて、便利なコマンドなども調べたので、まとめました。
Stack導入
こちらの記事が非常に参考になります。
- Haskellのビルドツール”stack”の紹介 http://qiita.com/tanakh/items/6866d0f570d0547df026
- Stackでやる最速Haskell Hello world! (GHCのインストール付き!) http://qiita.com/igrep/items/da1d8df6d40eb001a561
Stackのテンプレートの作り方
早速テンプレートを作って開発を始めましょう。
シンプルなテンプレートもありますが、mysqlなど使用するものが決まっていれば、最初から全部入ったものを入れておく方がいいと思います。
stack templates
stack new <project_name> [template_name]
cd <project_name>
Hello, world
プロジェクトを作成したら、プロジェクトディレクトリ直下で、以下を実施しましょう。
# stackを初回実行する場合。結構時間がかかります
stack setup
# ビルド
stack build --pedantic --haddock --test --exec "echo Yay, it succeeded"
# 実行
stack exec <project_name>-exe
ghci の注意点
とりあえず動きをみたいときにやってしまう、
ghci src.hs
ですが、stackベースのghciでは動かないことも。
その場合は、プロジェクト内で ghci しましょう。
プロジェクト.cabalで設定したライブラリが読み込まれます。
イテレーション
ファイル更新を検知して自動コンパイルももちろんできます。
このコマンドをバックグラウンドで実行しておきます。
stack build --haddock --test --exec "echo Yay, it succeeded" --file-watch
- –pedantic オプションは、warning一つでもコンパイルできないので、開発中は停止しておいた方がいいです。
自作ライブラリを取り込む
Stackageにないライブラリを使いたい場合は、以下の設定をします。
自作のプロジェクトをライブラリとして使いたい場合などで使えます。
ローカルにあるライブラリ
stack.yaml の packages に設置したライブラリのパスを指定します。
packages:
- '.'
- '/path/to/package'
Hackageにあるライブラリ
hackageの他のライブラリと同じです。
project.cabalのdependencyに追加します。
dependency:
(参考)
http://docs.haskellstack.org/en/stable/faq/
- I need to use a different version of a package than what is provided by the LTS Haskell snapshot I’m using, what should I do?
=> LTSに乗ってないバージョンのパッケージを使う方法。 - I need to use a package (or version of a package) that is not available on hackage, what should I do?
=> Hackageに乗ってないバージョン、パッケージを使う方法。
登録する
オープンソースプロジェクトならば、Hackage、Stackageに登録するのがオススメです。
githubで公開しておけば、だれでもダウンロードして使えますが、Hackage、Stackageにある方が断然使いやすいです。
Hackage
現在は、Webからアカウント登録/アップロードできます。
アカウント登録
以下のフォームから登録
http://hackage.haskell.org/users/register-request
アップロード
- stack コマンドの場合
cd /path/to/project
stack upload .
Stackage
Hackageに登録したら、Stackageにも登録しましょう。
Stackageのコンセプトはコンパイルが通るライブラリということ。
GitHubのstackageリポジトリにプルリクをすると、TravisCIが走ります。
checkが通れば、mergeしてもらえます。
もし、errorになっても、Stackageのコントリビュータの方にアドバイスがもらえます。
その後は、Stackageのnightlyに!
- まずは、プロジェクト内でチェックコマンドを実行
cd /path/to/project
stack --resolver nightly exec stackage-curator check
stack --resolver nightly build
- 問題なければ、Stackageリポジトリをフォーク
https://github.com/fpco/stackage - パッケージ情報を追加してコミット、プルリク
https://github.com/fpco/stackage/blob/master/build-constraints.yaml
"My Name myemail@example.com @mygithubuser":
- package1
- package2
- package3
- コミットメッセージ “add package name” にしてほしいということです。
(参考)
https://github.com/fpco/stackage/blob/master/MAINTAINERS.md
0 件のコメント:
コメントを投稿