More than 1 year has passed since last update.
最初に以下のリンクのいずれかを一読することをオススメします。
Real World OCaml に記載されている方法
OCaml Programming: Correct + Efficient + Beautiful に記載されている方法
京都大学工学部専門科目「プログラミング言語処理系」講義資料
OPAM のインストール
- OPAM とは
OCaml PAckage Manager - パッケージマネージャだけど、OCaml本体もOPAMを通してインストールできる
- なので最初にOPAMを入れる
- OPAMのインストール時にOCamlが入るが、特に関係ない
Mac なら brew install opam する。
OPAM uses ~/.opam by default for its package database, so you need to
initialize it first by running (as a normal user):
$ opam init
Run the following to initialize your environment variables:
$ eval `opam config env`
To export the needed variables every time, add them to your dotfiles.
* On Bash, add them to `~/.bash_profile`.
* On Zsh, add them to `~/.zprofile` or `~/.zshrc` instead.
Documentation and tutorials are available at https://opam.ocaml.org, or
via "man opam" and "opam --help".
Bash completion has been installed to:
/usr/local/etc/bash_completion.d
zsh completions have been installed to:
/usr/local/share/zsh/site-functions
==> Summary
🍺 /usr/local/Cellar/opam/1.2.2_4: 31 files, 16.3MB
OPAMの設定
- OPAMパッケージデータベース全体は、
~/.opamに保存される - OPAMがおかしくなったら、
~/.opamを削除すれば初期化できる -
opam initのときに聞かれる質問は初心者はyしておけばよい-
opam initは初回の1回でOK
-
- opamは基本的に管理者権限が必要なシステム領域に何かをインストールすることはない
- 普通はホームディレクトリ
$HOMEに入る - よってホームディレクトリ配下のコマンドを叩けるように
PATHを設定するコマンドがあるeval `opam config env`
-
opamの$PATHが設定済みかどうかはecho $OCAML_TOPLEVEL_PATHを確認すれば分かる
- 普通はホームディレクトリ
コンパイラのバージョンを調べる
opam switch コマンドを使う
$ opam switch
-- -- 4.00.0 Official 4.00.0 release
-- -- 4.00.1 Official 4.00.1 release
-- -- 4.01.0 Official 4.01.0 release
-- -- 4.02.0 Official 4.02.0 release
-- -- 4.02.1 Official 4.02.1 release
-- -- 4.02.2 Official 4.02.2 release
4.02.3 I 4.02.3 Official 4.02.3 release
-- -- 4.03.0 Official 4.03.0 release
-- -- 4.04.0 Official 4.04.0 release
-- -- 4.04.1 Official 4.04.1 release
-- -- 4.04.2 Official 4.04.2 release
-- -- 4.05.0 Official 4.05.0 release
4.06.0 C 4.06.0 Official 4.06.0 release
system I system System compiler (4.06.0)
# 163 more patched or experimental compilers, use '--all' to show
もしシステムコンパイラが古い場合は以下のコマンドを叩く
$ opam switch 4.06.0 # 最新バージョンを指定する
switch コマンドは .opam 以下にOCamlコンパイラをソースからインストールする(なので時間かかる)。
新しいコンパイラと関連ライブラリは .opam 以下に入る。
上記の例だと ~/.opam/4.06.0 にインストールされる。
# PATHを反映する
$ eval `opam config env`
# ~/.opam 以下にOCamlコンパイラがインストールされている
$ which ocaml{,c,opt}
/Users/hoge/.opam/4.06.0/bin/ocaml
/Users/hoge/.opam/4.06.0/bin/ocamlc
/Users/hoge/.opam/4.06.0/bin/ocamlopt
あとは opam install core utop hoge fuga などして欲しいパッケージをインストールする
utop の設定
utop はOCamlの対話環境
$HOME に設定ファイル .ocamlinit を置いておくと、ファイルに書かれた内容で初期化されて実行される。
なお #foo という表記はコメントではなく、対話環境向けの設定ディレクティブ。
.ocamlinit の例
#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
open Core.Std
上記の設定ファイル例のように、utopでOPAM等で入れたモジュールを読み込む際には #require "base" とディレクティブで読み込んだあとに、open Base;; などする。
utop を入れるほどでもないときは rlwrap ocaml でも問題ない。
Merlin
Merlin は OCaml の開発支援ツール。vim, emacs, vscode など様々なエディタで利用されている。
opam install merlin で入る。
使用するためにはブロジェクトの設定を .merlin ファイルで行う必要がある。
ただし Dune を使う場合は .merlin が自動生成されるので手書きすることは少ない。
公式リポジトリのWikiの merlin の設定方法 を参考に .merlin を記述する。
以下のブログ記事もとても参考になります。
Sディレクティブ
ソースファイル(ml, mli)が置かれるディレクトリを指定する
# hoge と fuga ディレクトリをソースパスに指定する
S hoge
S fuga
# サブディレクトリを全部追加する
$ piyo/*
# foo以下のサブディレクトリを再帰的に追加する
S foo/**
Bディレクティブ
cmi, cmtファイルの設置場所を設定する
B _build/hoge
B _build/fuga
B _build/*
PKGディレクティブ
findlib(ocamlfind)で探せるパッケージを指定して、それを補完する。
PKG lwt lwt.unix
EXTディレクティブ
camlp4 で作成された拡張構文をサポートするが、廃止予定とのこと。
EXT lwt
FLGディレクティブ
merlinのオプションを有効にする, オプションの一覧は ocamlmerlin server -flags-help で参照可能
FLG -ppx path-to-executable
FLG -rectypes
RECディレクティブ
.merlinファイルの設定を親ディレクトリからも探すようにする
./.merlin # RECの設定なし
./lib/.merlin # RECディレクティブを記述した
./lib/first/.merlin # RECディレクティブを記述した
./lib/second/.merlin # RECディレクティブを記述した
./src/.merlin # RECディレクティブを記述した
./.merlin はその .merlin の設定のみ有効になる。
./src ディレクトリでは、./src/.merlin と親ディレクトリにある ./.merlin の設定が有効になる
./lib/first ディレクトリでは、./lib/first/.merlin と親ディレクトリの ./lib/.merlin と更にその親ディレクトリの ./.merlin の設定が有効になる
ocamlfind(findlib)
ocamlfind は OCaml のサードパーティ製のライブラリを、よしなに管理したり見つけたりしてくれるコマンドで、findlib を使って実装されている。
ただし最近は OPAM を使う場合がほとんどなので ocamlfind を直接使う機会は少ない。
使い方は以下を公式サイトを参照のこと。
ビルドツール
ocamlbuild, OMake, Oasis などがあるが、識者の発言を読む限り今後新しくOCamlを書く場合は Dune(jbuilder) を使えばよさそう。
Dune (旧 jbuilder)
元々はJaneStreetというOCamlを使っていることで有名な会社が jbuilder という名前で作っていたが、dune という名前に変更しOCamlの公式リポジトリ下に移管された。
すでに Dune に変更されており 3.x までリリースされている。
使い方は以下を参考にする
- Quickstart
- duneプロジェクトの雛形
VSCode
ReasonML 向けのVSCode拡張がいくつか存在し OCaml もサポートされているが、あくまで ReasonML 向けなので OCaml 向けの拡張を使用するなら VSCode OCaml Platform が良い。
作成元が ocamllabs なので継続的な開発も期待できそう。
この拡張は ocaml-lsp を利用する前提のため、開発で使用する OPAM 環境にインストールしておく。
ocaml-lsp は内部で Merlin を使用しているため補完などを行うには .merlin ファイルが必要だが dune でプロジェクトを構築しているなら dune build を実行すると .merlin が生成されるので、とりあえず dune build を実行してみると良い。
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
