クレートとモジュール――Rustのモジュールシステムを理解する:基本からしっかり学ぶRust入門(12)
Rustについて基本からしっかり学んでいく本連載。第12回は、Rustアプリケーションを構成するクレートやパッケージ、関数等の要素に論理的な階層構造を導入するモジュールについて。
本連載で紹介してきたRustのサンプルコードは基本的に1つのソースファイルで完結していたので、ソースファイルを1つ作成→コンパイル→実行、という流れで何の問題もありませんでした。しかし、アプリケーションの規模が大きくなり、構成するソースファイルも増えてきて、ライブラリなども作成するとなってくると、これらをまとめて整理する仕組みが必要になります。それがモジュールシステムです。今回は、以下の表と図に示すRustのモジュールシステムの各要素を紹介します。
要素 | 概要 |
---|---|
パッケージ | Cargoパッケージマネージャで管理されるクレートの集合 |
クレート | パッケージ内の個々の実行バイナリとライブラリ |
モジュール | 関数などの要素の論理的な階層 |
パス | 関数などの要素やモジュールの論理的な場所を示す名前 |
表 モジュールシステムの各要素 |
パッケージ
パッケージとクレートは、アプリケーションを物理的に構成する要素です。パッケージ(package)は小包とか包み箱という意味で、1個以上のクレート(後述。ここでは単純にソースファイルと思ってください)をまとめたものをいいます。通常、パッケージはRustの備えるCargoパッケージマネージャ(以降、Cargo)によって作成され、ビルド、テストの対象となります。
Cargoの実体であるcargoコマンドによるパッケージの作成については、第1回で紹介しました。そこでも触れたように、パッケージではCargoの管理ファイルであるCargo.tomlによってアプリケーションの属性を指定するほか、ビルドの方法が管理されます。
本連載のサンプルのような学習用のアプリケーションであれば、Cargo.tomlファイルを触る機会はほとんどありません。ただし、広く配布するアプリケーションであれば正しくバージョン情報を設定する必要がありますし、複数のパッケージからなるアプリケーションを作成する場合には、Cargo.tomlファイルを積極的に触っていくことになります。
クレートはソースファイルなので、Rustのコンパイラであるrustcで個別にコンパイルすることは可能です。ただし、複数のファイルでアプリケーションが構成されたり、簡便にテストを実行したり、アプリケーションを配布したりするには、パッケージを利用した方が便利です。rustcはCargoから間接的に呼び出すことにして、通常はcargoコマンドによるパッケージ管理の機能を利用しましょう。
クレート
Copyright © ITmedia, Inc. All Rights Reserved.