◾️はじめに
https://dk521123.hatenablog.com/entry/2025/11/27/145159
で、別階層のmodels/user.rs を使うときに 「models/mod.rs」を追加してコンパイルエラーを回避した そこで、今回は、rust の mod周辺について、調べてまとめてみた
目次
【0】用語整理 1)crate 2)module 【1】同系列の別ファイルを呼び出す場合 1)NG case 2)OK case 【2】別階層のファイルを呼び出す場合 1)NG case 2)OK case
【0】用語整理
* 詳細は、以下の関連記事を参照のこと
Rust ~ crate / module ~
https://dk521123.hatenablog.com/entry/2025/12/11/234320
1)crate
* 他のプログラムで言うと「ライブラリ」「パッケージ」と同義 cf. crate(クレート) = (輸送用の)木箱、ケース
2)module
* crate よりも一段階小さい構成要素。 => 共通処理をモジュールとしてまとめて、 更に複数モジュールをまとめたものがcrateになる
【1】同系列の別ファイルを呼び出す場合
ファイル構成
./src
├── util.rs
└── main.rs
1)NG case
* 以下のコードを「cargo run」するとエラーになる
main.rs
fn main() { let greeting = util::demo_module::say_hello("world"); println!("Result: {}", greeting); }
util.rs
pub mod demo_module { pub fn say_hello(name: &str) -> String { format!("Hello, {}!", name) } }
エラー内容
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `util`
--> src/main.rs:2:20
|
2 | let greeting = util::demo_module::say_hello("world");
| ^^^^ use of unresolved module or unlinked crate `util`
|
help: to make use of source file src/util.rs, use `mod util` in this file to declare the module
|
1 + mod util;
|
For more information about this error, try `rustc --explain E0433`.
error: could not compile `rust_labo` (bin "rust_labo") due to 1 previous error
2)OK case
* 使用者側(今回は「main.rs」)で、 「mod <ファイル名(拡張子なし)>;(mod utils;)」する必要がある
main.rs
// このように宣言すると、`utils`という名前のファイルを探す mod util; fn main() { let greeting = util::demo_module::say_hello("world"); println!("Result: {}", greeting); }
【2】別階層のファイルを呼び出す場合
ファイル構成
./src ├── utils | +── util.rs └── main.rs
1)NG case
* 以下のコードを「cargo run」するとエラーになる
main.rs
mod utils; fn main() { let greeting = utils::util::demo_module::say_hello("world"); println!("Result: {}", greeting); }
utils/util.rs
// 内容は、【1】と全く同じ pub mod demo_module { pub fn say_hello(name: &str) -> String { format!("Hello, {}!", name) } }
エラー内容
error[E0583]: file not found for module `utils` --> src/main.rs:1:1 | 1 | mod utils; | ^^^^^^^^^^ | = help: to create the module `utils`, create file "src/utils.rs" or "src/utils/mod.rs" = note: if there is a `mod utils` elsewhere in the crate already, import it with `use crate::...` instead For more information about this error, try `rustc --explain E0583`. error: could not compile `rust_labo` (bin "rust_labo") due to 1 previous error
2)OK case
* [Rust2015方式] utils配下に「mod.rs」を作って 「pub mod <ファイル名(拡張子なし)>;(pub mod util;)」を指定する もしくは、 * [Rust2018方式] ./src/utils.rs(内容は、utils/mod.rsと同じ)を作る
ファイル構成([Rust2015方式])
./src ├── utils | +── mod.rs << ADD | +── util.rs └── main.rs
utils/mod.rs
pub mod util;
ファイル構成([Rust2018方式])
./src ├── utils | +── util.rs ├── utils.rs << ADD └── main.rs
参考文献
https://qiita.com/kikyo_nanakusa/items/a649bed9ffac808159e2
https://zenn.dev/mebiusbox/books/22d4c1ed9b0003/viewer/c12c17
関連記事
Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ 保有権 ~
https://dk521123.hatenablog.com/entry/2023/05/04/213726
Rust ~ 関数 / クロージャ ~
https://dk521123.hatenablog.com/entry/2025/12/09/094909
Rust ~ crate / module ~
https://dk521123.hatenablog.com/entry/2025/12/11/234320
Rust ~ struct/impl/trait ~
https://dk521123.hatenablog.com/entry/2025/11/30/222255
Rust ~ Option型 ~
https://dk521123.hatenablog.com/entry/2025/12/01/223443
Rust ~ Axum / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/09/02/224707
Rust ~ Axum / REST ~
https://dk521123.hatenablog.com/entry/2025/11/27/145159