8.1 モジュールの基本概念
モジュールは、Rustにおけるコードのグループ化・整理のための仕組みです。大規模なコードベースでは、関数、構造体、列挙型、定数などを一つのファイルに全て書くことは管理が難しく、またコードの可読性も低下してしまいます。そのため、Rustではコードをモジュール単位で分割し、必要に応じて呼び出す形で構築することが推奨されています。
モジュールは mod
キーワードで定義され、他のモジュールやファイルに分割してコードを再利用可能にします。例えば、mod my_module;
とすることでmy_module.rs
というファイルを読み込み、独自のモジュールとして管理できます。
// src/main.rs
mod utilities; // utilities.rsというモジュールを利用する
fn main() {
utilities::print_message(); // モジュール内の関数を呼び出し
}
// src/utilities.rs
pub fn print_message() {
println!("Hello from utilities module!");
}
8.2 モジュールの公開と非公開
モジュール内の関数や構造体などはデフォルトで非公開です。そのため、モジュール外部からアクセスするためにはpub
修飾子を使って公開(public)に設定する必要があります。pub
を使用することで、そのモジュール内のアイテムをモジュールの外部で利用可能にします。
// src/main.rs
mod utilities;
fn main() {
utilities::greet(); // エラーが発生
}
// src/utilities.rs
fn greet() { // 関数は非公開
println!("Hello!");
}
上記のコードはエラーが発生しますが、関数にpub
をつけると次のように呼び出すことが可能になります。
// src/utilities.rs
pub fn greet() { // 関数を公開
println!("Hello!");
}
このようにモジュールの公開・非公開を調整することで、コードのアクセス制御を強化し、意図したものだけが外部から利用できるようにします。
8.3 モジュールの階層化
Rustでは、複数のモジュールを階層構造で管理できます。たとえば、プロジェクトが大規模化していくと、機能ごとにモジュールを分けて、さらにその中でサブモジュールとして分類することが一般的です。
// src/main.rs
mod network;
fn main() {
network::server::start(); // 階層構造のモジュールの呼び出し
}
// src/network/mod.rs
pub mod server;
pub mod client;
// src/network/server.rs
pub fn start() {
println!("Server started.");
}
このようにファイルシステム上でディレクトリを用いてモジュールの階層化が可能です。モジュールは複雑な機能を適切に管理し、メンテナンス性を高めます。
8.4 Cargoによるパッケージ管理
CargoはRustに組み込まれたパッケージマネージャーであり、プロジェクトの作成、ビルド、依存関係の管理、テストの実行、リリースビルドの作成といった機能を提供します。Cargoを用いることで、プロジェクトの効率的な管理が可能になります。
Cargoのインストールと基本コマンド
通常、RustをインストールするとCargoも同時にインストールされます。Cargoの基本コマンドは以下の通りです。
cargo new <プロジェクト名>
– 新しいプロジェクトの作成cargo build
– プロジェクトのビルドcargo run
– プロジェクトの実行cargo test
– テストの実行cargo doc
– ドキュメントの生成
$ cargo new my_project # 新しいCargoプロジェクトを作成
$ cd my_project
$ cargo run # プロジェクトをビルドして実行
Cargoを使ってプロジェクトを初期化すると、Cargo.toml
というファイルが作成されます。このファイルはプロジェクトのメタデータを保持し、パッケージ名、バージョン、依存関係などを記述します。
# Cargo.toml
[package]
name = "my_project"
version = "0.1.0"
edition = "2021"
[dependencies]
8.5 依存関係の管理
Cargoでは、プロジェクトの外部依存関係を簡単に追加、管理できます。Cargo.toml
ファイルの[dependencies]
セクションに依存パッケージを記述することで、自動的に依存関係が管理され、プロジェクト内にダウンロードされます。
例えば、乱数生成ライブラリ rand
を使用したい場合、次のように記述します。
# Cargo.toml
[dependencies]
rand = "0.8.5"
その後、以下のコマンドを実行してrand
パッケージをプロジェクトにインストールします。
$ cargo build
Cargoは依存関係を自動でダウンロードし、プロジェクトに組み込みます。また、Cargo.lockファイルが生成され、依存関係のバージョンが固定されるため、同じバージョンでの再ビルドが可能です。
8.6 サードパーティライブラリの利用
Rustのエコシステムには、Cargoのcrates.io
と呼ばれる豊富なサードパーティライブラリのリポジトリがあります。これらのライブラリは「クレート」と呼ばれ、cargo add <クレート名>
コマンドで簡単に追加できます。以下は、HTTPリクエストを扱うために用いられる「reqwest」クレートを使った例です。
$ cargo add reqwest
これにより、Cargo.toml
に依存関係が追加されます。
# Cargo.toml
[dependencies]
reqwest = "0.11"
以下のコードは、reqwest
クレートを使ってHTTPリクエストを行う例です。
use reqwest;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let response = reqwest::get("https://www.rust-lang.org")
.await?
.text()
.await?;
println!("{}", response);
Ok(())
}
このように、Cargoとcrates.io
を使うことで、プロジェクトにサードパーティライブラリを迅速に導入し、機能を拡張できます。
8.7 Cargoによるテストとドキュメント生成
Cargoでは、テストやドキュメントの生成も簡単に行えます。テストは、Rustの標準的な単体テスト機能を利用し、Cargoを通じて管理できます。また、コードにコメントを記述することで、cargo doc
コマンドを用いてドキュメントが自動生成され、プロジェクトのAPIドキュメントを確認できます。
まとめ
Rustのモジュール機能とCargoによるパッケージ管理について学びました。モジュールによるコードの分割とCargoによる依存関係の管理によって、Rustのプロジェクト構成が大幅に整理され、他の開発者ともスムーズに協力が可能になります。
初心者におすすめ!プログラミングスクールのススメ
未経験でも気軽に!サブスク型プログラミングスクール【Freeks】
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学の挫折率、驚きの87.5%!
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
有料と無料、スクールの違いは?
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
- 受講条件が異なる
- 学べるスキルやカリキュラム内容が異なる
- 就職や転職のサポート内容が異なる
どちらが自分に合っているか、よく考えて選ぶのが大事です。
サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
- 未経験者向けのわかりやすいカリキュラム
- 経験豊富なエンジニアのサポート
- オンラインで自分のペースで学習可能
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
終了後は副業もサポート!
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓