0Pricing
Learn Rust Coding · レッスン

モジュールとmod

コードを整理します

「モジュールとmod」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

モジュールとは何か

プログラムが大きくなると、すべてを1つのファイルに置くのは扱いにくくなります。モジュールを使うと、関連するコードをまとめ、公開範囲を制御し、名前の衝突を避けられます。

modキーワードでモジュールを宣言します。

インラインモジュールを宣言する

mod name { ... }を使うと、ファイル内に直接モジュールを定義できます。波かっこの中にあるものはすべて、そのモジュールに属します。

mod greetings {
    fn hello() {
        println!("hello from the module");
    }
}

fn main() {
    println!("module declared above");
}

モジュールの関数を呼び出す

モジュール内のアイテムは、デフォルトでは非公開です。外部から呼び出すにはpubで公開し、::を使ったモジュールパスで参照する必要があります。

mod greetings {
    pub fn hello() {
        println!("hello!");
    }
}

fn main() {
    greetings::hello();
}

ネストしたモジュール

モジュールは他のモジュールを含むことができ、ツリー構造を形成します。パスには各階層が::で区切って記述されます。

mod app {
    pub mod ui {
        pub fn draw() {
            println!("drawing ui");
        }
    }
}

fn main() {
    app::ui::draw();
}

モジュールには関数以外もまとめられる

モジュールには、関数、構造体、列挙型、定数、さらには他のモジュールも含められます。これにより、関連する型と振る舞いをまとめて管理できます。

mod shapes {
    pub struct Circle {
        pub radius: f64,
    }
    pub const PI: f64 = 3.14159;
}

fn main() {
    let c = shapes::Circle { radius: 2.0 };
    println!("area = {}", shapes::PI * c.radius * c.radius);
}

モジュールツリー

すべてのクレートにはルートモジュールがあります。宣言したモジュールは、その下にツリーを形成します。パスは、ファイルシステムのフォルダーと同じように、アイテムがどこに存在するかを表します。

super: 親モジュール

モジュール内では、superは親モジュールを指します。子モジュールから、1つ上の階層で定義されたものを呼び出せます。

fn top_level() {
    println!("called via super");
}

mod inner {
    pub fn run() {
        super::top_level();
    }
}

fn main() {
    inner::run();
}

self: 現在のモジュール

selfは現在のモジュールを指します。主に、パス内でアイテムがどこにあるかを明示するときに使います。

mod tools {
    pub fn helper() {
        println!("helper running");
    }
    pub fn run() {
        self::helper();
    }
}

fn main() {
    tools::run();
}

別ファイルのモジュール

インラインモジュールのほかに、mod network;(セミコロンを付け、本文は書かない)と記述すると、Rustはnetwork.rsまたはnetwork/mod.rsから内容を読み込みます。

これにより、モジュールツリーを保ったまま、実際のプロジェクトのコードを複数のファイルに分割できます。

公開範囲の境界

モジュールは公開範囲の境界を形成します。子モジュールからは祖先の非公開アイテムを参照できますが、親モジュールから子モジュールの非公開アイテムにアクセスすることはできません。

このカプセル化によって、内部の詳細を隠せます。

mod bank {
    fn secret() -> i32 { 42 }
    pub fn reveal() -> i32 { secret() }
}

fn main() {
    println!("{}", bank::reveal());
}

実際のプロジェクトを整理する

ドメインに合わせてモジュールを構成します。たとえばauth、db、handlersなどです。それぞれの役割を絞り、公開する範囲を小さくして、残りは隠します。

明確なモジュール境界があると、大規模なコードベースでも目的の場所を見つけやすくなります。

クイックチェック

モジュールについての知識を確認しましょう。

まとめ

モジュールを使ってコードを整理する方法を学びました。

  • mod name { ... }はインラインモジュールを宣言します
  • アイテムはデフォルトで非公開です。公開するにはpubを使います
  • パスでは::を使ってモジュールツリーをたどります
  • super、self、mod name;を使ってモジュールを移動したり分割したりします

よくある質問

「モジュールとmod」レッスンは無料ですか?

はい。「モジュールとmod」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「モジュールとmod」で何を学びますか?

コードを整理します ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「モジュールとmod」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. モジュールとmod
  2. pubと可視性
  3. useとパス
  4. クレートとクレートルート
← Learn Rust Codingに戻る