MIRI は UB (Undefineded Behavior) の検出ツールである。
unsafe を含む Rust コードの健全性の確認に使われる。

現状と必要性

2025 年現在、MIRI はまだ実験段階のためナイトリー版でのみ動作する。

とはいえ、unsafe なコードを扱う場合、筆者はこのツールはほぼ必須だと考えている。

なぜなら、健全性の問題は人間にとって盲点になるものが多い。また、不健全なコードはその時点では問題なく動作しても、将来的な Rust の更新の影響を受ける可能性がある。MIRI はそれらの予防にもなる。

実行方法

それぞれ以下のコマンドから実行できる。

インストール


> rustup +nightly component add miri

バイナリの実行


> cargo +nightly miri run

テストの実行


> cargo +nightly miri test

検出精度

実用的な範囲では十分な精度がある。

そのため、MIRI がエラーを検出した場合、そのコードはほぼ確実に不健全である。ただし、MIRI がエラーを検出しない場合でも、その API が確実に健全だとは言えない。なぜなら、UB になるパターンがテストされていないだけの可能性は常にある。

モデル

2025 年現在、Rust の unsafe まわりにはまだ曖昧さが残っている。

これに対して、MIRI は二つのモデル Stacked BorrowsTree Borrows を用意している。どちらでもメモリ安全性は守られるが、後者は制限がより少ない。既定は前者で、後者を試用する場合、環境変数 MIRIFLAGS-Zmiri-tree-borrows を指定するとよい。

事例集