カテゴリ: Rust 更新日: 2026/01/12

Rustプロジェクト管理とビルドの完全ガイド!Cargoの使い方とCargo.tomlの設定を初心者向けに徹底解説

Rustプロジェクトの基本構成とCargo.tomlの役割
Rustプロジェクトの基本構成とCargo.tomlの役割

先生と生徒の会話形式で理解しよう

生徒

「Rustでプログラミングを始めたいんですが、プロジェクトってどうやって作るんですか?」

先生

「RustではCargoという公式のビルドツール兼パッケージマネージャーを使います。これがプロジェクト管理からビルド、依存関係の解決まで全部やってくれるんです。」

生徒

「Cargoを使えば、自分で複雑な設定をしなくてもいいんですか?」

先生

「その通りです!Cargo.tomlというファイルに必要な情報を書くだけで、あとはCargoが自動的に処理してくれます。今日はRustプロジェクトの基本構成とCargo.tomlの役割を詳しく学んでいきましょう!」

1. Rustプロジェクトの基本構成とは

1. Rustプロジェクトの基本構成とは
1. Rustプロジェクトの基本構成とは

Rustでアプリケーションやライブラリを開発するには、まずプロジェクトを作成する必要があります。Rustのプロジェクトは、ソースコードやビルド設定、依存ライブラリの情報などを含む一連のディレクトリとファイルで構成されています。

Rustプロジェクトの標準的な構成は以下の通りです。

  • プロジェクトルート:プロジェクト全体のディレクトリ
  • Cargo.toml:プロジェクトのメタデータや依存関係を記述する設定ファイル
  • src/:Rustのソースコードを格納するディレクトリ
  • src/main.rs:実行可能なバイナリのエントリーポイント
  • src/lib.rs:ライブラリのエントリーポイント(ライブラリプロジェクトの場合)
  • target/:ビルド成果物が出力されるディレクトリ(自動生成)

この構成により、Rustプロジェクトは統一された形式で管理され、チーム開発でも混乱が起きにくくなっています。

2. Cargoとは?Rustの公式ビルドツール

2. Cargoとは?Rustの公式ビルドツール
2. Cargoとは?Rustの公式ビルドツール

Cargoは、Rustの公式ビルドツールであり、パッケージマネージャーでもあります。Cargoを使うことで、プロジェクトの作成、ビルド、テスト、依存関係の管理、パッケージの公開など、Rust開発に必要なほぼすべての作業を効率的に行えます。

Cargoの主な機能は以下の通りです。

Cargoの主要機能
  • プロジェクト作成cargo newコマンドで新規プロジェクトを自動生成
  • ビルドcargo buildでコンパイルと依存関係の解決を実行
  • 実行cargo runでビルドと実行を一度に実施
  • テストcargo testで単体テストや統合テストを実行
  • 依存関係管理:Cargo.tomlに記述した外部クレート(ライブラリ)を自動ダウンロード
  • ドキュメント生成cargo docでAPIドキュメントを自動生成

RustをインストールするとCargoも同時にインストールされるため、別途インストールする必要はありません。ターミナルでcargo --versionと入力すれば、Cargoのバージョンを確認できます。

3. 新規Rustプロジェクトの作成方法

3. 新規Rustプロジェクトの作成方法
3. 新規Rustプロジェクトの作成方法

Cargoを使ってRustプロジェクトを作成するのは非常に簡単です。ターミナルで以下のコマンドを実行するだけで、必要なディレクトリとファイルが自動的に生成されます。


cargo new my_project

このコマンドを実行すると、my_projectという名前のディレクトリが作成され、その中に基本的なプロジェクト構成が展開されます。生成されたディレクトリ構造は以下のようになります。


my_project/
├── Cargo.toml
└── src/
    └── main.rs

src/main.rsには、デフォルトで簡単な「Hello, world!」プログラムが記述されています。これをそのまま実行することもできます。


fn main() {
    println!("Hello, world!");
}

プロジェクトをビルドして実行するには、プロジェクトディレクトリに移動してからcargo runコマンドを使います。


cd my_project
cargo run

実行結果は以下のように表示されます。


   Compiling my_project v0.1.0
    Finished dev [unoptimized + debuginfo] target(s) in 0.50s
     Running `target/debug/my_project`
Hello, world!

この簡単なコマンド操作だけで、Rustプロジェクトの作成からビルド、実行まで完了します。

4. Cargo.tomlファイルの役割と基本構造

4. Cargo.tomlファイルの役割と基本構造
4. Cargo.tomlファイルの役割と基本構造

Cargo.tomlは、Rustプロジェクトの設定ファイルであり、プロジェクトのメタデータや依存関係、ビルド設定などを記述します。TOML(Tom's Obvious, Minimal Language)形式で書かれており、人間が読み書きしやすい構造になっています。

新規プロジェクトを作成したときに自動生成されるCargo.tomlの内容は以下のようになっています。


[package]
name = "my_project"
version = "0.1.0"
edition = "2021"

[dependencies]

この基本構造は主に[package]セクションと[dependencies]セクションで構成されています。各セクションの意味を詳しく見ていきましょう。

5. packageセクション:プロジェクトのメタデータ

5. packageセクション:プロジェクトのメタデータ
5. packageセクション:プロジェクトのメタデータ

[package]セクションには、プロジェクト自体に関する基本情報を記述します。ここに書かれた情報は、プロジェクトの識別やバージョン管理、クレートとして公開する際に使用されます。

主要なフィールドは以下の通りです。

  • name:プロジェクト名(クレート名)。一意である必要があります。
  • version:プロジェクトのバージョン番号。セマンティックバージョニング(メジャー.マイナー.パッチ)を使用します。
  • edition:使用するRustエディション。現在は2015、2018、2021が存在します。
  • authors(オプション):開発者の名前とメールアドレスのリスト。
  • license(オプション):ライセンス情報(例:MIT、Apache-2.0)。
  • description(オプション):プロジェクトの簡単な説明文。

より詳細な[package]セクションの例は以下の通りです。


[package]
name = "my_web_app"
version = "1.2.3"
edition = "2021"
authors = ["Taro Yamada <taro@example.com>"]
license = "MIT"
description = "A simple web application built with Rust"

エディション(edition)は、Rustの言語仕様のバージョンを指定するもので、下位互換性を保ちながら新機能を導入するための仕組みです。新規プロジェクトでは最新のエディションを使用することが推奨されています。

6. dependenciesセクション:外部クレートの依存関係管理

6. dependenciesセクション:外部クレートの依存関係管理
6. dependenciesセクション:外部クレートの依存関係管理

[dependencies]セクションは、プロジェクトが依存する外部クレート(Rustのライブラリ)を指定する場所です。ここに記述されたクレートは、ビルド時にCargoが自動的にダウンロードしてコンパイルします。

依存関係の記述方法は非常にシンプルで、クレート名とバージョンを指定するだけです。例えば、人気のあるserdeクレートを使いたい場合は以下のように記述します。


[dependencies]
serde = "1.0"
rand = "0.8"
tokio = { version = "1.0", features = ["full"] }

バージョン指定にはいくつかの方法があります。

記述方法 意味
"1.0" カレット要件(互換性のある最新版) 1.0以上2.0未満
"=1.2.3" 完全一致 バージョン1.2.3のみ
">=1.0, <2.0" 範囲指定 1.0以上2.0未満
"*" 任意のバージョン 推奨されない

また、featuresオプションを使って、クレートの特定の機能を有効化することもできます。上記の例では、tokioクレートのすべての機能を有効にしています。

7. ビルドプロファイルとリリースビルド

7. ビルドプロファイルとリリースビルド
7. ビルドプロファイルとリリースビルド

Cargoは、開発用とリリース用で異なるビルドプロファイルを提供しています。デフォルトでは、cargo buildcargo runコマンドは開発用プロファイル(dev)を使用し、最適化よりもコンパイル速度を優先します。

本番環境向けにプログラムを最適化してビルドする場合は、--releaseオプションを付けます。


cargo build --release

リリースビルドでは、実行速度を最大化するための最適化が行われ、デバッグ情報は削除されます。その結果、コンパイル時間は長くなりますが、実行ファイルのパフォーマンスは大幅に向上します。

ビルドプロファイルはCargo.tomlでカスタマイズすることもできます。


[profile.dev]
opt-level = 0

[profile.release]
opt-level = 3
lto = true

opt-levelは最適化レベル(0~3)を指定し、lto(Link Time Optimization)はリンク時最適化を有効にするオプションです。これらの設定により、プロジェクトの要件に応じたビルド戦略を構築できます。

8. ワークスペース:複数のクレートを管理する

8. ワークスペース:複数のクレートを管理する
8. ワークスペース:複数のクレートを管理する

大規模なプロジェクトでは、複数の関連するクレートを一つのリポジトリで管理したい場合があります。Cargoのワークスペース機能を使うと、複数のパッケージを効率的に管理できます。

ワークスペースを作成するには、プロジェクトルートにCargo.tomlを配置し、[workspace]セクションでメンバーを指定します。


[workspace]
members = [
    "web_server",
    "database",
    "common_utils"
]

この構成により、すべてのメンバークレートが同じtargetディレクトリを共有し、依存関係も統一的に管理されます。ワークスペース全体のビルドやテストも一度のコマンドで実行できるため、開発効率が大きく向上します。

ワークスペース内の特定のクレートだけをビルドしたい場合は、-pオプションを使います。


cargo build -p web_server

この機能は、マイクロサービスアーキテクチャやモノレポ(単一リポジトリで複数プロジェクトを管理)を採用している場合に特に有用です。

9. Cargo.lockファイルの役割

9. Cargo.lockファイルの役割
9. Cargo.lockファイルの役割

プロジェクトを初めてビルドすると、Cargo.lockというファイルが自動的に生成されます。このファイルには、実際に使用された依存クレートの正確なバージョンが記録されています。

Cargo.tomlではバージョン範囲(例:"1.0")を指定しますが、Cargo.lockには具体的なバージョン(例:1.2.5)が記録されます。これにより、チームメンバーや異なる環境で同じバージョンの依存関係を使用することが保証され、「自分の環境では動くのに他の環境では動かない」という問題を防げます。

Cargo.lockの扱い方
  • バイナリプロジェクト(アプリケーション):Cargo.lockをバージョン管理システムにコミットする
  • ライブラリプロジェクトCargo.lockは通常コミットしない(各利用者が最新の互換バージョンを使用するため)

依存関係を最新の互換バージョンに更新したい場合は、cargo updateコマンドを実行します。これによりCargo.lockが更新されますが、Cargo.tomlで指定したバージョン範囲内でのみ更新されます。

10. よく使うCargoコマンドまとめ

10. よく使うCargoコマンドまとめ
10. よく使うCargoコマンドまとめ

Rust開発でよく使用するCargoコマンドを一覧にまとめました。これらのコマンドを覚えておくと、日常的な開発作業がスムーズになります。

コマンド 説明
cargo new [name] 新規プロジェクトを作成
cargo init 既存ディレクトリをCargoプロジェクトに変換
cargo build プロジェクトをビルド(開発用)
cargo build --release 最適化ビルド(リリース用)
cargo run ビルドして実行
cargo check コンパイルエラーをチェック(実行ファイルは生成しない)
cargo test テストを実行
cargo doc ドキュメントを生成
cargo clean ビルド成果物を削除
cargo update 依存関係を更新

特にcargo checkは、実行ファイルを生成せずにコンパイルエラーだけを確認できるため、コーディング中の文法チェックに非常に便利です。ビルド時間も短縮されるため、開発サイクルが高速化します。

また、cargo clippy(別途インストールが必要)を使えば、より詳細なコード品質チェックやベストプラクティスの提案を受けられます。Rust開発においては、これらのツールを積極的に活用することで、高品質なコードを効率的に書けるようになります。

カテゴリの一覧へ
新着記事
New1
C++
C++のメンバアクセス演算子を完全解説!初心者でもわかる . → :: の使い方まとめ
New2
Rust
Rustの文字列を極める!&str(文字列スライス)の基本概念とString型との違い
New3
C++
C++のキャスト演算子を完全解説!dynamic_cast・static_cast・const_cast・reinterpret_castを初心者向けに説明
New4
C++
C++開発のIDE選びを完全ガイド!初心者でもわかるCLion・Eclipse CDT・Qt Creator比較
人気記事
No.1
Java&Spring記事人気No1
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.2
Java&Spring記事人気No2
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.3
Java&Spring記事人気No3
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.4
Java&Spring記事人気No4
C言語
C言語のソースコードとヘッダファイルの役割とは?初心者向けにわかりやすく解説!
No.5
Java&Spring記事人気No5
C言語
C言語開発でよく使われるエディタとIDEランキング【初心者向け完全ガイド】
No.6
Java&Spring記事人気No6
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.7
Java&Spring記事人気No7
C++
C++リンカとコンパイラのオプション設定を完全ガイド!初心者にもわかる開発環境の基礎
No.8
Java&Spring記事人気No8
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作