見出し画像

【メモ】OCamlをWSL上にインストールする

はじめに

もうだいぶ前の話になりますが、『プログラミングの基礎』という本を買いました。

業務上、自分はRubyやJavaScriptをメインに使っているのですが、関数型言語には殆ど馴染みがなかったので、その勉強のために購入した書籍ですね。
こちらの書籍で利用されている言語はOCamlという関数型言語です。これを早速自分のマシンにインストールしようとしたのですが、ざっくり調べた感じだと、OCamlをWindows上に直に環境構築するのはあまり推奨されていない方法のようです。
一応ブラウザ上でOCamlの動作確認を行えるサイトはあるので無理にインストールする必要もないのですが、可能であればちゃんと動かせる体裁は整えておきたいところ。
そこで、WSLにOPAMというOCamlのパッケージマネージャをインストールして環境構築することにしました。WindowsならWSLを利用するのがベターっぽいですね。

ということで、以下その環境構築作業メモです。
作業開始時点の環境はWSL1、Ubuntu 18.04 LTSとなっています。

手順

WSLやUbuntuディストリビューションのインストールは完了している前提として、まずOPAMのインストールに必要なライブラリを入れるところから始めましょう。
インストールの手順についてはこちらの『2019年度「プログラミング言語」配布資料』のページを参考にさせていただきました。
ざっくり手順を纏めると以下の通りです。

sudo apt update  ##インストール前のパッケージアップデート
sudo apt install -y bubblewrap build-essential curl git m4 unzip  ##OPAMのインストールに必要なライブラリを導入
sudo sh -c "$(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"  ##スクリプトを叩いてOPAM2のインストールを行う
opam init  ##OPAM初期化
opam switch list-available ocaml-base-compiler  ##インストールできるOCamlコンパイラのバージョンを確認
opam switch create X.XX.X  ##任意のバージョンを指定
eval $(opam env)  ##PATHを設定

これらの作業が滞りなく完了し、『ocaml -version』などのコマンドでOCamlが動作していることが確認できればOKです。
が、たぶん上手く行かないと思います。

自分がこの作業を行ったところ、途中の『opam switch list-available ocaml-base-compiler』のコマンドを実行したタイミングでocaml-base-compilerがエラーを吐きました。
調べてみると、内部で依存しているbwrapというライブラリがWSL1をサポートしていないためにエラーとなっている模様
これを避けるためには、WSL2にバージョンアップするのが手っ取り早そうです。

てことでWSLを1系統から2系統にバージョンアップしていきます。ついでにUbuntuも更新していきましょう。
まず、さっきも入力したと思いますが一応『sudo apt update』『sudo apt upgrade』を行ってパッケージの更新をしておきます。
それが済んだらUbuntuの更新を行いましょう。

$ lsb_release -a  ##バージョン確認
$ sudo do-release-upgrade  ##Ubuntuのアップデート

途中でsshdなどの設定ファイルの書き換えについて質問されることがあるかもしれません。これは差分を確認しながら、自分の環境に適したものを選択しましょう。自分の場合は特に凝った使い方もしてなかったので、基本そのまま上書きしました。
最後に再起動するかどうか聞かれると思いますが、yesと答えてもWSLの環境的な問題か再起動に失敗するので、noと答えてよいと思います。その後、自分で再起動しましょう。
再起動後、改めて『lsb_release -a』を実行してバージョンを確認してみます。表示されたバージョンが先程確認したバージョンより新しいものになっていたらOKです。(参考リンク

Ubuntuの更新が済んだらWSLの更新に移ります。
手順としては、こちらの公式のドキュメントに沿っていくだけで問題ないと思うので割愛。ドキュメント中にもありますが、バージョンやビルド番号によってはWSL2が自動更新で降りてきていない可能性があるので、先にWindows Updateを済ませておきましょう。
後はちょいちょいPowerShellを管理者として実行した上でコマンドを入力するので、そこを忘れないように。

上記の手順が完了したら、以後UbuntuをWSL2で起動することができるようになっていると思います。
その状態で改めて『opam init』以後のコマンドを入力し、各パッケージとOCamlをインストールしましょう。おそらく正常にインストールできるはずです。そして『ocaml -version』などのOCamlコマンドが動けば作業完了です!

もしインストールは出来たけどOCamlのコマンドを受け付けていないっぽい状態になったら、PATHの設定がバグっている可能性があります。
その時は~/.opamを一旦削除し、再度OPAMをインストールするところから始めましょう。たぶんこれで上手くいくと思います。

この記事が気に入ったらサポートをしてみませんか?