🐪

書籍「プログラミング基礎」のためのOCamlセットアップ

2021/05/22に公開
2

プログラミングの基礎という書籍を読んでいます。この書籍では OCaml というプログラミング言語を使用しますが、環境構築について記します。

環境

  • mac OS Big Sur(11.3.1)
  • CPU: Intel

OCaml のインストール

OCaml には opam というパッケージマネージャがあります。OCaml 自体も opam でインストールできます。

# OCaml用のパッケージマネージャopamをインストール
$ brew install opam

# opamの初期設定
# コマンド実行時に聞かれる質問はとりあえずy
$ opam init

# opam init 実行した際に表示されるメッセージに従い環境変数を設定
$ eval $(opam env)

# シェルの再読み込み
$ source ~/.zshrc

# コンパイラのバージョン確認
$ opam switch
#  switch   compiler                    description
→  default  ocaml-base-compiler.4.12.0  default

# 対話環境の起動
$ ocaml
        OCaml version 4.12.0

#

rlwrap のインストール

ocamlコマンドで対話環境が起動するようになりますが、矢印キーでのカーソル移動ができません。矢印キーを使うためには、rlwrapをインストールします。

# 対話環境で矢印キーを使えるようにする
$ brew install rlwrap

# 対話環境の起動
$ rlwrap ocaml
        OCaml version 4.12.0

日本語入力、表示の確認

対話環境で日本語の入力、表示が問題なければ、書籍を読み進めていくための準備は完了です。

# "あ";;
- : string = "あ"

VSCode で書きたい

拡張機能は、インストール数が多い、OCaml and Reason IDEを利用します。この拡張機能を利用するために、Ocaml の LanguageServerProtocol と、Merlin という Ocaml の開発支援ツールをインストールする必要があります。

OCaml Language Server Protocol のインストール

# OCaml Language Server Protocolのインストール
$ opam pin add ocaml-lsp-server https://github.com/ocaml/ocaml-lsp.git
$ opam install ocaml-lsp-server

Merlin のインストール

# OCamlの開発支援ツールであるMerlinのインストール
$ opam install merlin

エラー: Cannot find merlin binary at "ocamlmerlin"が出る場合

ocaml-lsp-servermerlinをインストールすれば、VSCode の拡張機能が利用できるはずですが、私の環境ではCannot find merlin binary at "ocamlmerlinのエラ〜メッセージが表示され、利用できませんでした。

VSCodeのsettings.jsonに以下の設定を追記して利用できるようになりました。

{
  "reason.path.ocamlmerlin": "/Users/{UserName}/.opam/default/bin/ocamlmerlin"
}

参考資料

以下の記事、issue を参考にさせて頂きました。
OCaml の環境構築 | Qiita
OCaml を始める | Qiita
OCaml の補完とフォーマットを VSCode 上で実現するための試行錯誤 | blog.ojisan.io
Cannot find merlin binary at "ocamlmerlin" | GitHub

Discussion

mskmsk

書籍「プログラミングの基礎」を読もうと思ったときに、本記事に辿り着きました。
非常に参考になり、無事に環境構築を終えることができました。ありがとうございます🙇‍♂️
1点だけ気になったのが、rlwrapのインストールでタイポを見つけました。
# 対話環境の起動rlwrap が rlwarpになっております。コピペするとエラー(zsh: command not found: rlwarp)が発生するので、もし可能でしたら、修正をお願いしたいです。

# 対話環境で矢印キーを使えるようにする
$ brew install rlwrap

# 対話環境の起動
$ rlwarp ocaml
        OCaml version 4.12.0
fufu

ほんとですね!ご指摘ありがとうございます。修正しました!