LoginSignup
22
19

More than 5 years have passed since last update.

快適Haskell環境構築! (ghc-modがエラーで動かない方へ)

Posted at

なんちゃってvimmerな私。
最近はAtomというエディターをvimモードで使っています。
Atomのいいところは、Packageが充実しているところと、そしてなによりvimの補完よりもはるかに(私のvimプラグインが脆弱なのかもしれないけど)Atomの補完の方が強力なところです。

さて、最近Haskellの勉強をはじめました。
いいHaskell環境をAtom (or Vim)で構築したいということでやってみましたが、結構難儀したので手順をまとめておきます。

  • ghc-modを使いたいがインストール手順がわからない
  • ネットで調べた手順でインストールし、PATHも通してるのに機能しない
  • Atomのhaskell-ghc-modプラグインがspawn ghc-mod ENOENTというエラーを吐く

などでお困りの方に向けた記事です。

なお、私の環境としては、

  • Mac OSX Yosemite (10.10.5)
  • bashじゃなくてzshつかってます。
  • vim 7.4.769
  • Atom 1.1.0

Haskellの導入

Glasgow Haskell Compiler、いわゆるGHCをインストールします。
こちらの記事を参考にしました。

基本的には、こちらの記事の通りに進めていきます。

手順0 クリーンアンインストール(必要な場合のみ)

私はすでにGHCを入れていたので、クリーンアンインストールをしました。
上記引用サイトの通り、私の場合も/usr/local/bin/usr/local/libの2ヶ所にGHC関係のファイルは入っていたようなので、

/usr/local/bin

$ ls -l | grep ghc

/usr/local/lib

$ ls -l | grep ghc

とそれぞれやって関連ファイルを確認したのち、

$ sudo rm -rf ghc-7.8.3

とかこんな感じで関連ファイルを削除していきました。
さらに~/.ghc~/.cabalも同様に削除します。

シェルで

$ ghc
bash: ghc: command not found
$ cabal
bash: cabal: command not found

と出たらアンインストール完了です。

手順1 GHC, GHCiのインストール

次に、新しくGHCをインストールしていきましょう。
アーカイブをダウンロードして解凍していきます。

$ curl -O http://downloads.haskell.org/~ghc/7.10.2/ghc-7.10.2-x86_64-apple-darwin.tar.xz
$ tar -xvzf ghc-7.10.2-x86_64-apple-darwin.tar.xz
$ cd ghc-7.10.2

ここで、先ほどのサイトのアドバイス通り、--prefixオプションをつけてインストールすることにします。
私の場合はsudoをつけないと--prefixオプションなんかてめぇが使うんじゃねぇって怒られました笑

$sudo ./configure --prefix=/usr/local/ghc-7.10.2
$sudo make install

次に/usr/local/ghc-7.10.2/binのフォルダにパスを通すのですが、.zsh_profileでexport PATHみたいなことしても機能しなくて、私の場合は.zshrcの中で次の一行を追加しました。

.zshrc
export PATH="/usr/local/ghc-7.10.2/bin:$PATH"

最後に、確認。

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.10.2

ちゃんと出てきたら、GHCはインストールできたことになります。

関連パッケージのインストール

cabalのインストール

$ curl -O https://hackage.haskell.org/package/cabal-install-1.22.6.0/cabal-install-1.22.6.0.tar.gz
$ tar -xzf cabal-install-1.22.6.0.tar.gz
$ cd cabal-install-1.22.6.0
$ sudo ./bootstrap.sh
$ sudo cabal update

その他

$ cabal install happy
$ cabal install hlint

でその他必要なものもインストール完了です。
基本的に、ここまでのことはわりとすんなりいくはずです。

ghc-modのインストール

さて、ここからが本題です。
ghc-modを使いたいうまくインストールできない、という人がいっぱいいるらしく、少しググるだけでghc-modのインストール方法はけっこう出てきます。
しかし、私の場合はそれをやってもうまくいきませんでした。

これも、はじめに参考にしたのは先ほど紹介したのと同じ方が書いてるこちらの記事。

要するに、ふつうに$ cabal install ghc-modとやってもうまくインストールできないよ、ということですね。
上記サイトによると、

  1. gitをclone
  2. ローカルビルド

とすればうまくいくと書いてありますが、私の場合はこれではうまくいきませんでした!

ということで、ここからがこの記事の本領です笑

まずは指示通りにgit cloneしてローカルビルド

$ git clone https://github.com/kazu-yamamoto/ghc-mod.git

(注) 参考サイトの通り、$ git clone git@github.com:kazu-yamamoto/ghc-mod.gitだと、私の場合はエラーが出てダメでした汗

そしてローカルビルドしましょう。

$ cd ghc-mod
$ cabal install

なにがダメなのか?

上記の通りビルドしたバイナリは、本来なら~/.cabal/binに配置されるようなのですが、私の場合はホームディレクトリ直下にghc-modフォルダが作られていました。
だからでしょうか、.vimrcでPATHをちゃんと指定してもvimでghc-modが使えません。
もちろん、AtomにHaskell用のPackageを入れてもエラーで動いてくれません。

cabalで再インストールするとなぜか直る!

次のコマンドを叩いて再インストールすると、なぜかうまくいくようになります汗

$ sudo cabal install --reinstall --force-reinstalls ghc-mod

ためしに、typeしてみましょう。

$ type ghc-mod
ghc-mod is ~/.cabal/bin//ghc-mod

おおーなぜかはわかりませんが、ちゃんと~/.cabal/binに配置されています!

Atom側の設定

これでghc-modが入ったので、エディターの設定をしていきましょう。

各種Packageのインストール

AtomでHaskellをいじるときに入っていると便利なPackageは、こちら(atom.io) にある6つ+他1つくらいでしょうかね。
リストアップすると、

  • language-haskell
  • autocomplete-haskell
  • haskell-ghc-mod
  • ide-haskell
  • ide-haskell-cabal
  • ide-haskell-repl
  • haskell-pointfree

haskell-ghc-mod パッケージの設定

特に、今回入れるのに苦労したghc-modなわけですが、haskell-ghc-modプラグインの設定画面でちゃんとghc-modghc-modiのパスを設定しないとこのプラグインは使えません。
パスはさっきのtypeコマンドを使って、$ type ghc-modとか$ type ghc-modiとやると特定することができます。

vimのケース

力尽きました笑
ghcmod-vimというのがあるのでそれを使っています。
ググればこちらの使い方はたくさん出てくるとおもいます。
作者のサイトリンクだけ貼っときます。

まとめ!

要するに、

  • Webで出てるみたいにインストールしてるのにghc-modが使えねぇ!なんでだ!
  • 正攻法でインストールしたあと、再インストールするとうまくいくぜ!

ということを伝える記事でした。
ここらへんの内容がまとまって書いてあるサイトも記事も見当たらなかったので書いてみました。どなたかの参考になれば幸いです。

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19