Rust クレートとは 使い方と注意点について
Rustの「クレート」はコンパイル単位を示す概念であり、Rustプログラムを構成する最小のユニットです。
クレートはプログラム全体やライブラリ、モジュールの集まりとして機能するため、クレートを使ってプログラムの構造を整理し、外部のコードやライブラリと連携することが可能です。
クレートの種類
バイナリクレート
バイナリクレートは、実行可能なプログラムを生成するクレートです。main.rsファイルが含まれており、fn main()関数がプログラムのエントリポイントとして機能します。
main.rs
fn main() {
println!("Hello, world!");
}
main.rsがバイナリクレートであり、実行可能なプログラムを生成します。
ライブラリクレート
ライブラリクレートは他のクレートからインポートして使用するためのコードやモジュールを提供します。
lib.rsファイルが含まれており、外部からアクセス可能な項目を定義します。
lib.rs
pub fn hello() {
println!("Hello from the library!");
}
lib.rsがライブラリクレートであり、hello関数をパブリックにして外部からアクセス可能にしています。
クレートの使い方
外部クレートのインポート
Rustでは、外部クレートをインポートして、ライブラリやパッケージを利用できます。
Cargo.tomlファイルで依存関係を定義し、useキーワードを使ってインポートします。
Cargo.toml
regex = "1.5"
use regex::Regex;
fn main() {
let re = Regex::new(r"\d+").unwrap();
println!("{}", re.is_match("123"));
}
Cargo.tomlで外部クレートregexを指定し、useキーワードを使ってプログラム内でインポートしています。
内部モジュールとクレート
Rustではクレート内にモジュールを定義して、プログラムを整理できます。モジュールは、クレート内の項目をカプセル化するのに役立ちます。
pub mod my_module {
pub fn my_function() {
println!("Hello from my_module!");
}
}
fn main() {
crate::my_module::my_function();
}
my_moduleというモジュールを定義し、クレート内からアクセスしています。
注意点
クレートの依存関係
クレートは、他のクレートに依存することができますが、依存関係が複雑になると、ビルドや管理が難しくなることがあります。
依存関係を整理し、必要最低限の外部クレートを使用するように心掛けることが必要です。
アクセスレベルとカプセル化
クレートでは、アクセスレベルとカプセル化が必要です。
パブリックにする項目とプライベートにする項目を適切に区別し、クレートのインターフェイスを保護することが必要です。
クレートの名前空間
クレートは名前空間として機能しますが、名前の衝突や重複を避けるため、適切な命名規則を使用することが必要です。
Rustをもっと詳しくなりたい方に
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。
Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。
基礎から学ぶRustプログラミング入門
本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。
この記事が気に入ったらサポートをしてみませんか?