#17 Rustで学ぶモジュールとパッケージの基本
Rustのモジュールは、modというキーワードを使って管理する、少し独特な仕組みを持っています。この記事では、Rustにおけるモジュールとパッケージの基本を、つまずきやすいポイントも含めて解説します。
modでモジュールを定義する
mod utils {
pub fn greet(name: &str) {
println!("こんにちは、{}さん", name);
}
}
utils::greet("太郎");
関数の前にpubを付けないと、モジュールの外から使えません。Rustでは他の言語と違い「デフォルトで非公開」という設計思想が徹底されているため、公開したい要素には自分で明示的にpubを付ける必要があります。
別ファイルに分ける
実際のプロジェクトでは、mod utils;と書くことで、utils.rsという別ファイルの中身をモジュールとして読み込めます。プロジェクトが大きくなると、さらにutils/mod.rsやutils/helper.rsのようにフォルダ単位でモジュールを階層化することもできます。
useでパスを短縮する
モジュールの中身を呼び出すたびにutils::greet(...)のようにフルパスを書くのは面倒です。useキーワードを使うと、呼び出しを短縮できます。
use utils::greet;
greet("太郎"); // utils:: を省略できる
複数の要素をまとめて使いたい場合はuse utils::{greet, farewell};のように波括弧でまとめて書くこともできます。
クレートとパッケージの関係
以前の記事で触れた「クレート」(外部ライブラリ)は、それぞれが独自のモジュール構造を持っています。1つの「パッケージ」(Cargo.tomlで管理される単位)は、実行可能なバイナリを作るsrc/main.rsクレートと、ライブラリを作るsrc/lib.rsクレートを、それぞれ1つずつまで含められます。自分のプロジェクトも、大きくなるにつれて複数のモジュールに整理していくことになります。
Rustならではの注意点
Rustでは、デフォルトで全てが「非公開」として扱われます。以前のクラスの記事でも触れた考え方と同じく、公開したい部分には明示的にpubを付ける必要がある点を覚えておきましょう。なおpubには、外部に完全公開する通常のpubのほかに、同じクレート内だけに公開するpub(crate)という指定もあります。「ライブラリの利用者には見せたくないが、クレート内の別モジュールからは使いたい」という場合に便利なので、あわせて覚えておくとよいでしょう。
まとめ
Rustのモジュールはmodで定義し、公開する部分にはpubを付けます。useによるパス短縮やpub(crate)による公開範囲の調整もあわせて使いこなすと、デフォルトが非公開である設計を活かしたコード整理がしやすくなります。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿