#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本