🐫

opamを用いたOCamlプロジェクトのセットアップ方法

2021/01/09に公開

OSはOSXを想定している。

事前準備

事前準備としてopamを導入する。

  1. opamをインストールする

    brew install opam
    
  2. opamを初期化する。任意のディレクトリで次のコマンドをたたく

    opam init
    

    このコマンドをたたくと、~/.opamが作成され、そこに最新のOCamlがインストールされる。
    またこのコマンドをたたくと質問されるのでそれに答える。

    Do you want opam to modify ~/.zshrc? [N/y/f]
    (default is 'no', use 'f' to choose a different file)
    

    yと答える

    A hook can be added to opam's init scripts to ensure that the shell remains in sync with the opam environment when they are loaded. Set that up? [y/N]
    

    yと答える
    この質問は、opamの設定(たとえば使うOCamlのバージョンなど)を更新するスクリプトをなにかにhookさせて走らせるかどうか。Zshの場合、$HOME/.opam/opam-init/env_hook.zshが作成され、プロンプト表示にhookして更新スクリプトが走るようになる。作業ディレクトリごとにopamの設定は異なるのでyと答えておくのがよい。残念ながら、もともと.zshrcにopamによるコード追加が含まれている方もyと答える。.opam/opam-init/env_hook.zshはyと答えないと作成されない。

  3. opamで用いる環境変数の更新をする

    eval $(opam env)
    
  4. OCamlがインストールされていることを確認する

    ocaml --version
    which ocaml      # => `~/.opam/default/bin/ocaml`になっているはず
    

プロジェクトでOCamlをセットアップ

  1. インストールしたいOCamlのバージョンを探す
    opam switch list-available
    
    #Name列がocaml-base-compilerとなっている行を確認すればOK。
  2. バージョンを指定してOCamlをインストールする
    # cd /path/to/your_project して
    opam switch create . ocaml-base-compiler.4.11.1
    
    /path/to/your_project配下に、_opamディレクトリができる。
    このディレクトリにocamlコマンドや必要なパッケージがインストールされていく。
  3. 2でOCamlがインストールできたか確認する
    eval $(opam env)
    ocaml --version
    which ocaml      # => `/path/to/your_project/_opam/bin/ocaml`になっているはず
    
  4. 必要なパッケージをインストールする準備としてopamファイルを作成する
    # cd /path/to/your_project して
    touch ${your_project_name}.opam
    
    このopamファイルが、npmでいうpackage.jsonにあたるもの。ただnpmと違って、opamパッケージをインストール、アンインストールする[1]たびに自動で更新されるわけではないので手動で更新する必要がある。次の例[2]に従って必要なパッケージを${your_project_name}.opamに記載する。
    opam-version: "2.0"  # => opam自体のバージョンが2以上でも"2.0"と書いておけばOK
    depends: [           # => 必要なパッケージを記載
      "merlin"
      "dune" {= "2.7.1"} # => バージョン指定したい場合の書き方
      "ocamlformat"
      "ocaml-lsp-server"
    ]
    
  5. opamファイルに記載された情報をもとに必要なパッケージをインストールする
    # cd /path/to/your_project して
    opam install . --deps-only
    
脚注
  1. opamファイルを作らずにパッケージを個別にインストールするコマンドはopam install ${package_name}。ただプロジェクトでは必要なパッケージを共有するだろうと思いopamファイルに記載するやり方を紹介している。 ↩︎

  2. 5のコマンドを通すための最小限のコードであることに注意。opam lintコマンドでopamファイルをチェックするとエラーや警告が出る。 ↩︎

Discussion