クレート【crate】
クレートとは?

クレートには二種類がある。一つは「バイナリクレート」で、コンピュータ上で直接実行できるプログラムを生成するものである。もう一つは「ライブラリクレート」で、他のプログラムから呼び出して使う機能群をまとめたものである。文字列処理や通信、暗号化といった用途のライブラリが世界中の開発者によってクレートとして公開されており、自分のプロジェクトに取り込んで活用できる。
クレートの管理にはRust標準の開発支援ツール「Cargo」を使う。Cargoはクレートの作成、ビルド、テスト、依存関係の取得を自動化する。プロジェクトで使う外部クレートは「Cargo.toml」というファイルにクレート名とバージョンを記述するだけでよく、ビルド時にCargoが自動でダウンロードして組み込む。公開クレートは「crates.io」という公式レジストリで共有されており、そこから必要なものを入手できる。
クレートはコンパイルの単位でもある。Rustのコンパイラはクレート単位で処理を行い、変更のあったクレートだけを再コンパイルするため、大規模なプロジェクトでもビルド時間を抑えられる。また、クレートごとに名前空間が分離されているため、異なるクレートで同名の関数が存在しても互いに干渉しない。
クレートの内部はさらに「モジュール」で整理できる。モジュールは機能ごとにコードを分割する仕組みであり、Rustでは外部に公開する機能と内部専用の機能を明確に区別して管理できる。複数のクレートを束ねる「ワークスペース」という仕組みもあり、規模の大きなシステムでは機能単位でクレートを分割して開発・保守する手法が一般的に取られる。