モジュール化
コードが増えてくると、1ファイルの実装では見通しが悪くなってくるため、このタイミングでモジュール化を行います。
モジュール概要
モジュールについては The Rust Programming Language 日本語版 の7章にて解説されているため、そちらに沿ってファイルに分割していきます。
階層化のポイント
rustでは ファイルを作って mod
宣言しただけではモジュールにならない ので注意が必要です。特にディレクトリを階層構造にする場合に、整理整頓のためだけのサブディレクトリであっても、rustではモジュールとして扱うため、モジュール宣言をする必要があります。サブディレクトリを含むモジュール宣言にはいくつか方式があります。
方式A) ディレクトリ構造は lib.rs
に記載する
階層化の階数やファイル数が多くなると lib.rs
の記載量が多くなりますが、作成するファイルが少なくてすむため、今回はこの方式で実装してみます。
src
└── lib.rs
├── dir_a
│ └── module_b.rs
└── module_c.rs
src/lib.rs
mod dir_a {
mod module_b;
pub use module_b::fn_b;
}
mod module_c;
pub use dir_a::fn_b;
pub use module_c::fn_c;
方式B) ディレクトリ名と同名のファイルを作成する
ディレクトリと同名のファイルを作成することで、そのディレクトリの内部にあるモジュールを宣言することができます。
src
└── lib.rs
├── dir_a.rs
├── dir_a
│ └── module_b.rs
└── module_c.rs
src/lib.rs
mod dir_a;
mod module_c;
pub use dir_a::fn_b;
pub use module_c::fn_c;
src/dir_a.rs
mod module_b;
pub use module_b::fn_b;
方式C) mod.rs
を作成する
mod.rs
をディレクトリ内に作成することで、そのディレクトリにあるモジュールを宣言することができます。
Note: Rust 2018 Editionからは方式Bがスタンダードになりました。この方式はRust 2015 Editionとの後方互換のために残されているようです。
src
└── lib.rs
├── dir_a
│ ├── mod.rs
│ └── module_b.rs
└── module_c.rs
src/lib.rs
mod dir_a;
mod module_b;
pub use dir_a::fn_b;
pub use module_c::fn_c;
src/dir_a/mod.rs
mod module_b;
pub use module_b::fn_b;