1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rustのファイル分割方法

Last updated at Posted at 2022-03-20

1. はじめに

ファイル分割ができると、ファイル管理がしやすくなります。今までは Rust で何回も cargo new をして分けていましたが、容量が圧迫してきたので分割方法を探りました。

記事を見ながらコードを書くことを想定して執筆したため、講義形式の記事になります。

完成後のサンプルコードは下記 URL にあります。
file_split URL:
https://github.com/DiaSird/files_split

2. プロジェクトの作成

今回は Hello World!を例にファイル分割を行います。
まず、cargo new で新規プロジェクトを作ります。

$ cargo new files_split

ここで、main プログラムにある出力形式(println!())を関数 say_hello();に書き換えておきましょう。

// main.rs
fn main() {
    // Hello, world!
    say_hello();
}

3. モジュールで整理する

次に、src フォルダに lib.rs と module フォルダを作成します。下のように、lib.rs で module の宣言を行います。

// lib.rs
// pub mod <directory name>
pub mod module;

続いて module フォルダ内の操作に移ります。

module フォルダでは、最初に mod.rs を作成します。
mod.rs 内では下記のように、モジュールとクレート(モジュールツリー)の宣言を行います。

// mod.rs
// pub mod <module file name>
pub mod hello;
// pub use crate::<module name>::<module file name>
pub use crate::module::hello::say_hello;

module フォルダの中での module は、次に作成する hello.rs に該当します。

hello.rs を作成し、下のように say_hello 関数を作成しましょう。pub は public の略称で、rust はデフォルトの状態が外部から呼び出せない private な関数となっています。

// hello.rs
pub fn say_hello() {
    println!("Hello, world!");
}

4. 実行

最後に src/main.rs に戻り、ワイルドカード * 形式でファイル(or ファイル群)にある関数を呼び出します。中継役は lib.rs が担当しています。

main.rs の変更:

// main.rs
// use <project name>::<module name>
use files_split::module::*;

fn main() {
    // Hello, world!
    say_hello();
}

以上でファイル分割は完成です。サンプルコードでは module フォルダ内で hello2.rs を追加していますが、main 関数で say_hello2();をコメントアウトすれば自由に出力形式が切り替えられます。

この記事の応用例として、構造体ではimplを複数ファイルに分離して書けることから、各ファイルでパスを通せば大規模なプログラムも作成可能です。

実行:

$ cargo run

実行結果:

Hello, world!

参考資料

Rust をやってみる(ファイル分割)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?