LoginSignup
2
2

More than 3 years have passed since last update.

IntelliJとWSLでOCaml

Last updated at Posted at 2020-04-05

前提

  • OCamlのことはあんまりよく分かってません
  • JetBrainsによる公式サポートではない部分を含みます

登場人物

  • IntelliJ IDEA Ultimate
    • Community Editionでも大丈夫そう
  • reasonml-idea-plugin
    • Reason MLのプラグインがOCamlもサポートしてるようです
  • Ubuntu on WSL(とbash)
  • OCamlのツール各種

概要

Windows側にある
 IntelliJとプラグインが
Windows側にある
 プロジェクトに対して
WSL側にある
 bashとOCamlのツール各種を使って色々やります12

WSLのbashをIntelliJのターミナルとして開く設定

File | Settings | Tools | Terminal
Shell Path に C:\Windows\System32\wsl.exe を設定します。
プロジェクト単位で設定しておけるので大変便利です
image.png
中略
image.png
WSLのbashからWindowsのファイルは基本的には問題無く使えます。
(どういうエッジケースがあるかなどは把握していませんが、
 改行コードおよびgitで悲しい感じになる場合があります)

以下、コマンド実行はすべてWSLのbashで行います。

OPAM

OCamlのパッケージマネージャであるOPAMを
WSLのUbuntuにインストールします
https://opam.ocaml.org/doc/Install.html#Ubuntu

add-apt-repository ppa:avsm/ppa
apt update
apt install opam

OCamlコンパイラ

OPAMでOCamlコンパイラをインストールします
https://ocaml.org/docs/install.html#OPAM

# environment setup
opam init
eval `opam env`
# install given version of the compiler
opam switch create 4.10.0
eval `opam env`
# check you got what you want
which ocaml
ocaml -version

エラー

opam switch create 4.10.0

あたりでエラーに気づきます。

### output ###
# bwrap: Creating new namespace failed, likely because the kernel does not support user namespaces.  bwrap must be installed setuid on such systems.

bwrap & sandbox

https://github.com/ocaml/opam/issues/3747#issuecomment-462339452
https://github.com/ocaml/opam-repository/issues/12050#issuecomment-393478072

  • サンドボックス機能のためにbwrapというものが必要で、WSLではそれがサポートされていないようなので、サンドボックスを無効化します。
    • 一度も初期化してない状態であれば、opam init --disable-sandboxingでできそうですが、未確認
  • 一度以上(?)初期化済みであれば~/.opam/configにあるwrap-*-commandな設定を削除します

    wrap-build-commands:
    [ [ <term> { <filter> } ... ] { <filter> } ... ]
    wrap-install-commands:
    [ [ <term> { <filter> } ... ] { <filter> } ... ]
    wrap-remove-commands:
    [ [ <term> { <filter> } ... ] { <filter> } ... ]
    

その後、opam initからやり直します。

SDKの設定

  • プラグイン公式の通りSDKを設定しますが、WSL側にあるディレクトリを選びます。
    • \\wsl$\Ubuntu\home\ユーザ\.opam\4.10.0のような感じ
  • OCamlのソースはWSL側にgit cloneしましたが、どっちでも良さそう?

補完が効いて嬉しい!

image.png

ただし、私はOCamlのことをあんまり分かってないので、何ができてどれだけ嬉しいかよく分かってません。

ocamlbuildでHello World

ついに、Hello Worldです
https://ocaml.org/learn/tutorials/basics.html

To compile an OCaml program named my_prog.ml to a native executable, use ocamlbuild my_prog.native:

ネイティブのバイナリを出力するためにはocamlbuildというのが必要なようですが、まだ入っていません。
opam search ocamlbuildで探すとやっぱり存在してたので
opam install ocamlbuildします。

あとは上記のチュートリアル通りにビルドして実行してください。


  1. (JetBrainsのC/C++向けIDEである)CLionでのCMakeサポートがだいたいこのような構成になっていて、さらにもう少しIDEとの連携ができます。 

  2. VSCodeにはWSL側のファイルを開く機能が存在しており、Ubuntu上でVSCodeを開いている状態に限りなく近い状況で操作できます。構成がシンプルになって混乱も少ないので、IntelliJに愛が無ければVSCodeを使ったほうが良いと思います。 

2
2
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
2
2