ML ファイル形式とは?
.ml は、パリの INRIA で開発された、オブジェクト指向および命令型の機能を備えた静的型付け関数型言語である OCaml プログラミング言語の標準的なソースファイル拡張子です。この拡張子は、OCaml の派生元である言語ファミリーである ML (Meta Language) に由来しています。
各 .ml ファイルは 1 つの OCaml モジュールを定義し、ファイル名の先頭を大文字にした名前が自動的にモジュール名になります(例: parser.ml は Parser モジュールになります)。対になる .mli インターフェースファイルは、モジュールが公開する内容を宣言し、C 言語のヘッダーファイルと同様の役割を果たします。
ソースファイルには、OCaml の宣言(let 束縛、type 定義、module やファンクタの定義、例外宣言、クラス定義など)のシーケンスが含まれます。慣習として、トップレベルの let () = ... 式がプログラムのエントリポイントとして機能します。
ファイルは ocamlc によってバイトコードに、または ocamlopt によってネイティブマシンコードにコンパイルされます。Dune ビルドシステムと opam パッケージマネージャーが標準的なプロジェクト管理ツールです。OCaml 5.x(2022年以降)ではエフェクトハンドラとマルチコア並列処理が導入され、古いコンパイラでは受け入れられない新しい構文が追加されました。
.ml 拡張子は Standard ML ファイルでも時折見られますが、そのコミュニティでは通常代わりに .sml が使用されます。主な用途は OCaml であり、2025年にはバージョン 5.3 に達しています。
セキュリティと安全性
リスク: LOWプレーンテキストのソースコードです。テキストエディタで開く際に実行のリスクはありません。リスクはコンパイルして実行する場合のみです。信頼できない .ml ファイルをコンパイルする前にコードを確認してください。
形式の詳細
概要- Standard ML (SML) ソースファイル - 一部の Standard ML 実装は .ml を受け入れますが、.sml が慣習的な拡張子です。
- Reason/ReasonML ソースファイル - Facebook の OCaml 用 Reason 構文は、同じプロジェクト内で .ml ファイルと共存することがあります。
ML ファイルを開くプログラム
技術的詳細
詳細仕様| 言語ファミリー | ML (Meta Language) - 関数型、静的型付け |
| モジュール命名 | 各 `.ml` ファイル = 1 つのモジュール。ファイル名を大文字にしたものがモジュール名になります |
| インターフェース・コンパニオン | `.mli` ファイルがモジュールの公開シグネチャを宣言します(ヘッダーに類似) |
| バイトコードコンパイラ | `ocamlc` → `.cmo` オブジェクトファイル / `.cma` ライブラリ出力 |
| ネイティブコンパイラ | `ocamlopt` → `.cmx` / `.cmxa` / ネイティブバイナリ |
| ビルドシステム | Dune(現代の標準)、OMake、Makefile(レガシー) |
| エンコーディング | UTF-8。OCaml 4.14 以降で完全な Unicode をサポート(レガシーなコードベースは ASCII) |
| 注目すべき構文の追加 | OCaml 4.02 (属性)、4.08 (束縛演算子)、5.x (エフェクト、ドメイン) |
| 型システム | GADTs、多相バリアント、ファーストクラスモジュールを備えた Hindley-Milner |
| MIME タイプ | `text/x-ocaml` |
| 標準ライブラリモジュール | `Stdlib`(OCaml 4.07 で `Pervasives` から改称) |
| 関連 OS | Linux, macOS, Windows, FreeBSD |
| リリース日 | 1973 (ML); OCaml .ml usage since 1996 |
| 最新バージョン | OCaml 5.3 (2025) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | v2.ocaml.org |
ML の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。ML ファイルについて最初の質問をしてみましょう。
よくある質問
.ml ファイルを開くプログラムは何ですか?
.ml は ML ファイルですか、それとも OCaml ファイルですか?
.ml ファイルをコンパイルするにはどうすればよいですか?
ocamlopt foo.ml -o foo(ネイティブバイナリ)または ocamlc foo.ml -o foo.byte(バイトコード)を実行します。複数のファイルで構成されるプロジェクトの場合は、dune ビルドシステムを使用してください。