0Pricing
Learn Rust Coding · レッスン

pubと可視性

アクセスを制御します

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

デフォルトでは非公開

Rustでは、モジュール内のすべての要素がデフォルトで非公開です。pubを使って明示的に公開しない限り、他のモジュールからは見えません。

この安全なデフォルトにより、意図的に公開するまで実装の詳細を隠しておけます。

pub関数

関数にpubを付けると、モジュールの外部から呼び出せるようになります。付けない場合、呼び出しはコンパイルに失敗します。

mod math {
    pub fn square(x: i32) -> i32 {
        x * x
    }
}

fn main() {
    println!("{}", math::square(5));
}

非公開のヘルパーは隠しておく

内部ヘルパーを非公開のままにして、公開APIだけを提供できます。公開関数から非公開関数を呼び出すことはできますが、外部からは呼び出せません。

mod math {
    fn double(x: i32) -> i32 { x * 2 }
    pub fn quadruple(x: i32) -> i32 { double(double(x)) }
}

fn main() {
    println!("{}", math::quadruple(3));
}

pub構造体ではフィールドが非公開

構造体にpubを付けると型が公開されますが、各フィールドにもpubを付けない限り、フィールドは非公開のままです。

これにより、構造体の作成方法や変更方法を制御できます。

mod model {
    pub struct User {
        pub name: String,
        age: u32,
    }
    impl User {
        pub fn new(name: String, age: u32) -> User {
            User { name, age }
        }
        pub fn age(&self) -> u32 { self.age }
    }
}

fn main() {
    let u = model::User::new(String::from("Sam"), 28);
    println!("{} is {}", u.name, u.age());
}

フィールドを隠す理由

非公開のフィールドによって不変条件を守れます。呼び出し側はコンストラクターとメソッドを使う必要があるため、入力を検証したり、利用者を壊さずに後から内部構造を変更したりできます。

pub列挙型ではすべてを公開

構造体とは異なり、pubを付けた列挙型では、すべてのバリアントが自動的に公開されます。バリアントごとに可視性を指定することはできません。

mod traffic {
    pub enum Light {
        Red,
        Yellow,
        Green,
    }
}

fn main() {
    let l = traffic::Light::Green;
    let go = matches!(l, traffic::Light::Green);
    println!("go = {}", go);
}

pub(crate):クレート全体に公開

pub(crate)を付けると、同じクレート内のどこからでも要素が見えるようになりますが、依存している外部クレートからは見えません。

モジュール間で共有する内部APIに最適です。

mod config {
    pub(crate) fn default_port() -> u16 {
        8080
    }
}

fn main() {
    println!("{}", config::default_port());
}

pub(super):親モジュールだけに公開

pub(super)を付けると、要素は親モジュールにだけ公開されます。完全なpubよりも限定的な公開範囲です。

mod outer {
    pub fn run() {
        inner::helper();
    }
    mod inner {
        pub(super) fn helper() {
            println!("visible to parent only");
        }
    }
}

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

pub useによる再公開

pub useは要素を再公開し、より短く便利なパスから呼び出せるようにします。これにより、使いやすい公開APIを構成できます。

mod deep {
    pub mod nested {
        pub fn ping() {
            println!("pong");
        }
    }
    pub use nested::ping;
}

fn main() {
    deep::ping();
}

公開APIを設計する

目的を達成するために必要最小限の範囲だけを公開しましょう。ヘルパーは非公開にし、構造体のフィールドはメソッドの背後に隠し、内部で共有する場合はpub(crate)を使います。

APIの範囲を絞ると、利用者を壊さずに発展させやすくなります。

可視性レベルのまとめ

制限が厳しい順:

  • デフォルト(モジュール内のみ非公開)
  • pub(super) — 親モジュールから見える
  • pub(crate) — クレート全体から見える
  • pub — どこからでも見える

理解度チェック

可視性についての理解度を確認しましょう。

まとめ

アクセスを制御する方法を学びました。

  • アイテムはデフォルトで非公開です。pubで公開します
  • pub構造体でも、各フィールドにpubを付けない限りフィールドは非公開です
  • pub列挙型ではすべてのバリアントが公開されます
  • pub(crate)とpub(super)で、より細かく制御できます
  • pub useで再公開し、使いやすいAPIを構成できます

よくある質問

「pubと可視性」レッスンは無料ですか?

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

「pubと可視性」で何を学びますか?

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

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

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

「pubと可視性」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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