mofoolog

再検索を省きたいから書いてるログ

StackでHaskell開発環境を整える(ArchLinux)

f:id:mofoolog:20160227030207p:plain

Haskellの開発環境はStackが良いようなので調べながら自分なりのまとめを書いておく。

目次

 

Stackのインストールと初期操作


Stack制作サイドへのアクセスなど

  • 詳しくは「The Haskell Tool Stack」で調べる

Home - The Haskell Tool Stack

  • Stackについての質問等は「Stack Overflow」で聞く

  • 改善依頼等は「issues」で投稿する

 

Stack利用時のディレクトリ構成

Stackで生成されるディレクトリ等の配置を図にしてみた。

f:id:mofoolog:20160227224329p:plain:w600

※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/」ディレクトリ内で「stack init」コマンドを実行する事で「stack.yaml」ファイルを生成する。

$ 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プロジェクトと関連プロジェクトの皆様ありがとう。