StackでHaskell開発環境を整える(ArchLinux)
Haskellの開発環境はStackが良いようなので調べながら自分なりのまとめを書いておく。
目次
Stackのインストールと初期操作
Stack制作サイドへのアクセスなど
- 詳しくは「The Haskell Tool Stack」で調べる
- Stackについての質問等は「Stack Overflow」で聞く
- 改善依頼等は「issues」で投稿する
Stack利用時のディレクトリ構成
Stackで生成されるディレクトリ等の配置を図にしてみた。
※Stack用プロジェクトディレクトリを「~/hsproject/」に作成している仮定で図にしている。
黄色のディレクトリは「stack Build」して自動で作成されるディレクトリ。
以下簡単な説明。
「stack」、「ghc」、「ghci」コマンド実行ファイルは「/bin」や「/usr/bin」などパスの通った場所にインストールされるようになった
「~/hsproject/
/stack.yaml」ファイル(下で解説) 「~/hsproject/
/.stack-work/」ディレクトリは「stack build」してできた実行ファイルなどが格納される 「~/.local/bin/」ディレクトリは「stack install <パッケージ名>」でインストールしたパッケージ等実行ファイルが格納される
「~/.stack/」ディレクトリにStackシステムファイル等が生成される
ArchLinuxへStackのインストール
$ sudo pacman -S haskell-stack
version確認は下記コマンドで確認。
$ stack --version
stackのupdateが有れば下記コマンド実行時に行われる。
$ sudo pacman -Syy $ sudo pacman -Syu
基本的に使用するコマンド
プロジェクト生成
まずはプロジェクトディレクトリを置く場所(今回は~/hsproject/)に移動しプロジェクトディレクトリ(今回はtest-project)を下記コマンドで生成。
$ cd ~/hsproject $ stack new test-project new-template
新規プロジェクトを立ち上げる度にstack new
コマンドを実施。
ビルドと実行ファイルの実行
コーディングファイル(.hs)等は~/hsproject/test-project/
ディレクトリ内の「app」、「src」、「test」ディレクトリ内に置けるように自動生成されている。何かコードを書いたら下記コマンドでビルドする。
$ cd ~/hsproject/test-project $ stack build
実行ファイルの実行
buildしてできた実行ファイルは下記コマンドで実行する事ができる。
$ cd ~/hsproject/test-project $ stack exec test-project-exe
実行ファイルが保存されてる場所は「~/hsproject/test-project/.stack-work/install/x86_64-linux/lts-5.4/7.10.3/bin」ディレクトリ。
その他のコマンドなど
stack.yamlの作成
「stack.yaml」ファイルが必要なプロジェクトを作成した場合のみ行う。
例)
外部から使いたいプロジェクトをインストールした。
以前、自作したプロジェクトをstackで管理したい。
など...
「~/hsproject/
$ cd ~/hsproject/<Project name> $ stack init
何かプロジェクトを作成していればプロジェクト内で使用されている.cabalのスキャンと、マッチするresolverの自動選択が行われる。
Packageのインストール
stackがラップしているパッケージマネージャーのcabalファイルに必要なパッケージ名を追記。以下が手順。
プロジェクトディレクトリ「~/hsproject/
/」に入っている「 .cabal」ファイルを開く 「library」ブロックの「build-depends:」行に下記のように追記し保存
library hs-source-dirs: src exposed-modules: Lib build-depends: base >= 4.7 && < 5 , <package name> , <package name> ・ ・ ・ ・ // ↑このようにパッケージ名を追記してゆく default-language: Haskell2010
- cabalファイル編集後に「stack build」コマンドを実行すると自動でインストールしてくれる。こちらの記事を読むと詳しく書かれている。
Program/Libraryのインストール
$ stack install <パッケージ名>
「stack install」についてはこちらの記事を読むと詳しく書かれている。
アップグレード
$ stack upload
「stack upload」についてはこちらの記事を読むと詳しく書かれている。
最後に
stackを触り始めて間もないしHaskell自体もまだまだ未熟なので分かってない部分も多い。徐々に慣れていきたい。
stack自体も進化していくプロジェクトのよう。今までのHaskell環境構築で結構つまずいてた事が排除されつつあるのはよく分かりましたので、真剣度が増せて喜んでいるところ。stackプロジェクトと関連プロジェクトの皆様ありがとう。