ファイルシステム階層

モジュールの定義内容を省略すると、Rust はそれを別のファイルで探します。

mod garden;

This tells Rust that the garden module content is found at src/garden.rs. Similarly, a garden::vegetables module can be found at src/garden/vegetables.rs.

crate ルートは以下の場所にあります。

  • src/lib.rs(ライブラリ クレートの場合)
  • src/main.rs(バイナリ クレートの場合)

ファイルで定義されたモジュールに対して、「内部ドキュメント用コメント」を使用して説明を加えることもできます。これらのコメントは、それが含まれるアイテム(この場合はモジュール)に対する説明になります。

//! このモジュールは畑を実装します(パフォーマンスの高い発芽の
//! 実装を含む)。

// このモジュールから型を再エクスポートします。
pub use garden::Garden;
pub use seeds::SeedPacket;

/// 指定された種をまきます。
pub fn sow(seeds: Vec<SeedPacket>) {
    todo!()
}

/// 十分に実っている畑で作物を収穫します。
pub fn harvest(garden: &mut Garden) {
    todo!()
}
This slide should take about 5 minutes.
  • Rust 2018 より前では、モジュールを module.rs ではなく module/mod.rs に配置する必要がありました。これは 2018 以降のエディションでも依然としてサポートされています。

  • filename/mod.rs の代わりに filename.rs が導入された主な理由は、mod.rs という名前のファイルが多くあると、それらをIDEで区別するのが難しい場合があるからです。

  • より深いネストでは、メイン モジュールがファイルであっても、フォルダを使用できます。

    src/
    ├── main.rs
    ├── top_module.rs
    └── top_module/
        └── sub_module.rs
    
  • Rust がモジュールを検索する場所は、コンパイラ ディレクティブで変更できます。

    #[path = "some/path.rs"]
    mod some_module;

    これは、たとえば Go でよく行われているように、some_module_test.rs という名前のファイルにモジュールのテストを配置する場合に便利です。