Dev Study
← 解説「pub — 公開範囲を制御する」に戻る

サンプルコードで身につける: pub — 公開範囲を制御する

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1pub の関数と非公開の関数

モジュールの中身はデフォルトで非公開、pub を付けたものだけ外から呼べる、という基本ルールの例です。非公開の prepare はモジュールの中からは普通に呼べますが、main から呼ぼうとするとコンパイルエラーになります。「外に見せるのは order だけ」という意思表示がコードに刻まれます。

Rust

2pub struct とフィールドの pub は別もの

struct を pub にしても、フィールドは個別に pub を付けない限り非公開のままであることを示す例です。この Point は x も y も pub なので、外から構築もアクセスも自由にできます。「pub は付けた対象だけを公開する」という原則を最小の形で確認できます。

Rust

3入り口だけ公開して計算式を隠す

公開するのは total という入り口だけにして、税計算の実装 with_tax を非公開ヘルパーとして隠す例です。税率の計算方法を変えたくなっても、外から見える total のシグネチャはそのままなので呼び出し側の修正は不要です。これが「非公開は変更に強い」という pub 設計の実利です。

Rust

4非公開フィールドはメソッド経由で読ませる

owner は pub、balance は非公開にして、残高はメソッド経由でしか読めないようにした例です。impl の中のメソッドや関連関数にも pub が必要な点に注目してください。「勝手に残高を書き換えられない」ことを型のレベルで保証する、カプセル化の基本形です。

Rust

5リポジトリ層の公開 API 設計

データ取得を担うリポジトリ層を想定し、公開 API を find だけに絞った実務寄りの例です。名前の解決方法(lookup_name)は非公開なので、ハードコードを後でデータベース問い合わせに差し替えても外部には影響しません。「公開関数 = 守るべき契約、非公開関数 = 自由に変えられる実装」という線引きの実例です。

Rust