OCaml: Windows環境でOCamlをセットアップする
はじめに
この記事では、Windows環境で関数型プログラミング言語OCamlを容易にセットアップする方法を紹介します。
DkMLインストーラーを使用することで、OCamlのビルドとインストールを自動化し、手間を大幅に削減できます。
OCamlは、型推論、パターンマッチング、モジュールシステムなどを特徴とし、型安全性と高パフォーマンスを提供する関数型プログラミング言語です。
Windows環境では、WSL上に OCaml環境を構築することが推奨されています。
しかし、Windows環境にOCamlをインストールすることで、使い慣れた Windows環境でOCamlが使用できます。
技術用語
この記事で取り上げる重要な技術用語を以下に解説します。
-
OCaml: 型推論、パターンマッチング、モジュールシステムを特徴とする関数型プログラミング言語。 -
DkML: Windows環境でOCamlをインストールするためのインストーラー。複雑な依存関係を自動で解決し、インストールプロセスを簡素化する -
opam:OCamlのパッケージマネージャー。依存関係の管理やパッケージの更新を容易にする -
XDG Base Directory: UNIX系OS のディレクトリ標準仕様。Windows でも、この仕様に従うことでファイルの整理が容易になる -
Visual Studio BuildTools: コマンドラインで使用する開発ツールセット、OCamlのビルドに使用される -
utop:OCamlのREPLを拡張し、高度な編集機能やタブ補完機能を提供するパッケージ
1. 前提条件
この記事を始める前に、以下の条件が満たされている必要があります。
これらの条件を確認し、必要なら準備してください。
-
wingetコマンドが使用可能: Windows パッケージマネージャーを使用してソフトウェアをインストールする。 -
OCamlのインストール先:c:\lang\ocaml: このディレクトリはインストール中に指定できる。 -
XDG Base Directoryの採用:Windows でも UNIX系OS のファイルシステム標準に従うことで、設定やデータファイルの管理を一元化する。これは、$XDG_DATA_HOME環境変数を設定することで達成される。 -
環境変数の設定: 環境変数
OPAMROOTを$XDG_DATA_HOME/opamに設定します。これにより、opamが管理するファイルを整理しやすくします。
以上です。
2. 初期設定
OCamlをインストールする前に、あらかじめ必要な設定を行います。
注意:
この記事ではPowerShellを使用しています。他のシェルを使用している場合は、適宜コマンドを調整してください。
2.1 Pathの設定
環境変数PathにOCamlの実行ディレクトリc:\lang\ocaml\binを追加します。
このためには、システムの環境設定画面を開いてシステム環境変数Pathにc:\lang\ocaml\binを追加します。
次の手順で、Pathを設定します。
-
システムのプロパティを開く:
[設定]>[システム > バージョン情報]>[システムの詳細設定]として、[システムのプロパティ]を開く。あるいは、
[Win]+Rかコマンドラインから、次のコマンドを実行する。SystemPropertiesAdvanced.exe以上で、[システムのプロパティ]を開く。

システムのプロパティ -
[環境変数]ダイアログを開く:
[環境変数]ボタンをクリックして、[環境変数]ダイアログを開く

環境変数 -
[システム環境変数]の
Pathを編集する:
"システム環境変数"のPathを選び、[編集(I)]をクリックする。
環境変数: システムPath -
実行ディレクトリを追加する:
[新規]をクリックし、C:\lang\ocaml\binを追加する。
環境変数: システムPath -
ダイアログを閉じる:
各ダイアログの[OK]をクリックし、各ダイアログを閉じる。
以上で、環境変数の設定は完了です。
2.2 OPAMROOTの設定
OPAMROOTはopamがパッケージを管理する場所を指定する環境変数です。
OPAMROOTを指定しない場合は、Windows は、$USERPROFILE/.opamでパッケージを管理します。
この記事では、XDG Base Direcoryに準じたOPAMROOTを設定することで、環境をクリーンに保ちます。
次の手順で、OPAMROOTを設定します。
-
powershellで環境変数設定コマンドを実行する:[System.Environment]::SetEnvironmentVariable("OPAMROOT", $env:XDG_DATA_HOME+"/opam", "User")
以上で、OPAMROOTの設定は完了です。
2.3 Terminalの再起動
ここまでで設定したPathや環境変数をWindows Terminalに反映させるため、Windows Terminalを再起動します。
この再起動により、新しく設定した環境変数が Terminal 環境に適用され、OCaml および関連ツールを問題なく使用できるようになります。
次の手順で、Windows Terminalを再起動します:
-
exitコマンドでWindows Terminalを終了する:exit -
wtコマンドを実行し、Windows Terminalを起動する:wt
以上で、Windows Terminalの再起動は完了です。
3. OCamlのインストール
このセクションでは、まずDkMLをインストールし、DkMLを使って Windows版OCamlをインストールします。
DkMLはOCamlを Windows環境にて簡単にインストールできるインストーラーです。
これは、OCamlがもともと UNIX/Linux系OS用に設計されているためで、DkMLを使用することで Windows での運用の差異を吸収します。
3.1 DkMLのインストール
DkMLはOCamlを Windows 環境にて機能させてインストールするインストーラーです。
次の手順で、DkMLをインストールします:
-
wingetで、DkMLをインストールする:winget install Diskuv.OCaml --location c:\lang\OCaml
以上で、DkMLのインストールは完了です。
次に、インストールしたDkMLを使ってOCamlをインストールします。
3.2 Visual Studio BuildToolsのインストール
Visual Studio BuildToolsはコマンドラインでビルドを行なう開発ツールセットです。
DkMLインストーラーはBuildToolsを使ってOCamlをビルドするため、DkMLを実行する前にBuildToolsをインストールしておく必要があります。
次の手順で、BuildToolsをインストールします:
-
wingetコマンドで、BuildToolsをインストールする:
winget install Microsoft.VisualStudio.2019.BuildTools --override "--wait --passive --installPath C:\VS --addProductLang Ja-jp --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
以上で、BuildToolsのインストールは完了です。
3.3 DkMLの初期設定
次の手順で、DkMLを初期設定します:
-
dkml initでDkMLを初期化する:dkml init --disable-sandboxing --system
注意:
Windows 環境では、標準のサンドボックス機能がうまく機能しない場合があるため、--disable-sandboxingオプションを使用しています。
以上で、DkMLの初期設定は完了です。
これにより、opamコマンドが使えるようになります。
3.4 opamの初期設定
DkMLに続いてopamを初期設定します。
次の手順で、opamを初期設定します:
-
opamを初期設定する:opam init --disable-sandboxing --bare --switch=playground --shell=pwsh -a
以上で、opamの初期設定は完了です。
3.5 初期設定スクリプトの設定
OCamlを実行するためには、いくつかの環境変数を設定しておく必要があります。
次の手順で、初期設定スクリプトを設定します:
-
エディタで初期設定スクリプト
$profileを開きます -
`$profile'の末尾に次の行を追加します:
$profile(& opam env) -split '\r?\n' | ForEach-Object { Invoke-Expression $_ } -
$profileを保存して、エディタを終了します
以上で、初期設定スクリプトの設定は完了です。
opam envコマンドは、環境変数設定スクリプトを出力します。上記コマンドでは、出力された環境変数ごとにInvoke-Expressionを実行して環境変数を設定しています。
3.6 Terminalの再起動
ここまでで設定したPathや環境変数をWindows Terminalに反映させるため、Windows Terminalを再起動します。
次の手順で、Windows Terminalを再起動します:
-
exitコマンドでWindows Terminalを終了する:exit -
wtコマンドを実行し、Windows Terminalを起動する:wt
以上で、Windows Terminalの再起動は完了です。
3.7 utopのインストール
utopは、OCamlのREPLに各種拡張機能を提供するパッケージです。
次の手順で、utopをインストールします。
-
opamを使って、utopパッケージをインストールする:opam install utop -y
以上で、utopのインストールは完了です。
4. OCamlの起動、終了
OCamlを正常にインストールしたか確認します。
そのため、OCamlを起動し、そのあと、終了させます。
4.1 OCamlの起動
次のコマンドで、OCamlを起動します。
ocaml
以下のように、プロンプトが表示されれば成功です。
The OCaml version 4.14.0
Enter #help;; for help.
#
注意:
OCamlを起動する際に、"アプリを選択してください"ダイアログが表示された場合は、$OPAMROOT/playground/binにある Linux用の起動スクリプトocamlが原因です。このスクリプトは Windows 環境では不要なので、削除してください。
4.2 OCamlの終了
OCamlを終了して、PowerShellに戻ります。
以下の 2つの方法があります。
-
#quitディレクティブを使う:
#quit;;とコマンドと終端記号を入力します# #quit;; >上記のように、
powershellのプロンプトに戻ります。 -
Clrl+Z(EOF)を入力する:
プロンプトの先頭で、Ctrl+Z(EOF) を入力します注意:
Windows 環境では、EOFはCtrl+Zで入力します。# ^Z [`Ctrl+Z`を入力] >
上記のように、powershellのプロンプトに戻ります。
以上で、OCamlの終了は完了です。
5. utopの起動と終了
OCamlと同様に、utopが起動、終了することを確認します。
5.1 utopの起動
高度な編集機能を使いたいときは、OCamlの拡張REPLであるutopを起動します。
utop
─┬────────────────────────────────────┬──
│ Welcome to utop version 2.13.1 (using OCaml version 4.14!│
└────────────────────────────────────┘
Type #utop_help for help about using utop.
─( 17:59:00 )─< command 0>─────────────────{ counter: 0 }─
utop #
上記のように、プロンプトが出力されます。
以上で、utopの起動は終了です。
5.2 utopの終了
utopを終了して、PowerShellに戻ります。
以下の 2つの方法があります。
-
#quitディレクティブを使う:
#quit;;とコマンドと終端記号を入力しますutop # #quit;; >上記のように、
powershellに戻ります。 -
Ctrl+D(EOF)を入力する:
プロンプトの先頭で、Ctrl+D(EOF)を入力しますutop # [`Ctrl+D`を入力] >上記のように、
powershellに戻ります。
以上で、utopの終了は完了です。
おわりに
以上で、Windows 環境にOCamlをセットアップし、OCamlの起動と終了ができました。
これにより、関数型プログラミングの学習環境が整いました。
次のステップでは、実際にOCamlを使って簡単なプログラムを書いてみましょう。
最初は、"Hello, World!"プログラムから始め、徐々にOCamlの豊富な機能に触れていくことをオススメします。
また、関数型プログラミングの理解を深めるために、指定された参考資料も活用してください。
継続的なプログラミングと学習で、プログラミングスキルの向上を目指しましょう。
それでは、Happy Hacking!
参考資料
Webサイト
-
OCaml公式:
OCamlの基本から応用までを網羅的に学べる公式ドキュメント。初心者から上級者まで幅広く対応しています。 -
Windows版OCamlDkML:
Windows 環境でOCamlを設定する際に役立つDkMLインストーラーの詳細情報。 -
Windowsに
XDG Base Directoryを導入する:
Windows 環境でXDG Base Directoryを利用する方法について解説した記事。
Discussion