Haskellに入門するべくUbuntu18.04でNixを使って環境構築をした
大学が春休みに入ったので,以前から興味があったHaskellに入門することにしました.となると最初に待ち構えるのは環境構築となるわけで,ネット上の様々な記事を読んで作業を進めていたわけですが,結構詰まった部分があって苦労しました.ですから,備忘録としてブログにその過程を残しておきます.誰かの役に立てればいいな.
なお私が環境構築を行ったOSは Ubuntu 18.04.4 LTS です.
今回用いるソフトウェアたち
ネット上の記事によると,ひとえに環境構築といえども異なるツールの組み合わせが存在するようです.そこで今回は
- Nix (パッケージマネージャ)
- stack, cabal (ライブラリやコンパイラを管理したりビルドしたり色々してくれるやつ)
- GHC (コンパイラ)
- HIE (コードの補完とか色々してくれるやつ)
- hoogle (API検索エンジン)
- VSCode (エディタ)
の組み合わせでやっていきます.VSCodeはインストールされていることを前提とします.
NixとHIEをインストールする
Nixでシュッと入れるのがバージョン管理も含めて一番手軽に思えたので以下のページに従ってNixとHIEをインストールします.
stackをインストールする
せっかくNixというパッケージマネージャをインストールしたのですから,有効活用します.ということで早速stackもNixでインストールします.
nix-env -iA nixpkgs.stack nixpkgs.cabal-install
インストールしたら以下のコマンドを実行します.
stack update
次に ~/.local/bin/
へのパスを通します.私はfishを使っているので以下のコマンドを ~/.config/fish/config.fish
に追加しました.
set PATH ~/.local/bin $PATH
ここで,GHC8.6.5を利用するために~/.stack/global-project/stack.yaml
の
resolver: lts-15.0
を
resolver: lts-14.27
に変えておきます.GHC8.6.5以外のコンパイラを用いる場合は https://www.stackage.org の Latest LTS per GHC version のところから適宜選択して変更してください.
GHC をインストールする
GHC は gmp に依存しているようなので apt でインストールしておきます.
sudo apt install libgmp-dev
以下のコマンドでGHCをインストールします.
stack setup
なお私の環境では以下のエラー
<stderr>: commitAndReleaseBuffer: invalid argument (invalid character)
が出たので,ググったらなんか出てきたこのイシューを参考に,
env LC_ALL="C.UTF-8" stack setup
とすることでインストールできました.
hoogleをインストールする
HIEはAPIドキュメントの表示にhoogleを用いるので以下のコマンドでインストールします.
stack install hoogle
GHCのインストールで述べたものと同様のエラーが出る場合は
env LC_ALL="C.UTF-8" stack install hoogle
を実行するとうまくいきます.
hoogleをインストールしたら
hoogle generate
を実行してセットアップも済ませておきましょう.
プロジェクトの作成
プロジェクトのディレクトリを置きたいディレクトリで以下を実行します.<プロジェクト名>
の部分には自由に名前を入れて下さい.
stack new <プロジェクト名> --resolver lts-14.27
すると <プロジェクト名>
の名前がついた以下のような構成のディレクトリが生成されます.なお私が用いたstackのバージョンは 2.1.3.1 x86_64 hpack-0.33.0
ですが,他のバージョンではディレクトリの構成が異なるかもしれません.
<プロジェクト名> ├── app │ └── Main.hs ├── ChangeLog.md ├── <プロジェクト名>.cabal ├── LICENSE ├── package.yaml ├── README.md ├── Setup.hs ├── src │ └── Lib.hs ├── stack.yaml ├── stack.yaml.lock └── test └── Spec.hs
作成したプロジェクトのディレクトリに移動して以下のコマンドを実行します.もしかするとこのコマンドを実行する必要は無いかもしれませんが,一応,念のため.
stack setup
するとGHC8.6.5がインストールされます.
VSCodeのセットアップ
VSCodeに Haskell Language Server という拡張機能をインストールします.これにより,VSCodeでHIEの恩恵にあずかることができます.
場合によってはエラーが出ることがあるので,その際は
を参考にするといいかもしれません.私の場合はトラブルシューティングの一番最初に載っているエラーが発生しました.
実行する
作成したプロジェクトのディレクトリ内で
stack run
あるいは
stack runhaskell <main関数があるファイルへのパス>
を実行しましょう.以上で環境構築は終わりです.
まとめ
正直なところ環境構築をしてて詰まるところが私は多かったので一旦は入門を諦めようかとも思いましたが,なんとかなってよかったです.