無料プログラミング教室 Pスクール Rust スタートブック 第8章: Rustのモジュールとパッケージ管理

第8章: Rustのモジュールとパッケージ管理

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経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

Related Post