リリースプロファイルでビルドをカスタマイズする
Rustにおいて、リリースプロファイルとは、プログラマがコードのコンパイルオプションについてより制御可能にしてくれる、 定義済みのカスタマイズ可能なプロファイルです。各プロファイルは、それぞれ独立して設定されます。
Cargoには2つの主なプロファイルが存在します: dev
プロファイルは、cargo build
コマンドを実行したときに使用され、
release
プロファイルは、cargo build --release
コマンドを実行したときに使用されます。
dev
プロファイルは、開発中に役に立つデフォルト設定がなされており、release
プロファイルは、
リリース用の設定がなされています。
これらのプロファイル名は、ビルドの出力で馴染みのある可能性があります:
$ cargo build
Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
$ cargo build --release
Finished release [optimized] target(s) in 0.0 secs
このビルド出力で表示されているdev
とrelease
は、コンパイラが異なるプロファイルを使用していることを示しています。
プロジェクトのCargo.tomlファイルに[profile.*]
セクションが存在しない際に適用される各プロファイル用のデフォルト設定が、
Cargoには存在します。カスタマイズしたいプロファイル用の[profile.*]
セクションを追加することで、
デフォルト設定の一部を上書きすることができます。例えば、こちらがdev
とrelease
プロファイルのopt-level
設定のデフォルト値です:
ファイル名: Cargo.toml
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
opt-level
設定は、0から3の範囲でコンパイラがコードに適用する最適化の度合いを制御します。
最適化を多くかけると、コンパイル時間が延びるので、開発中に頻繁にコードをコンパイルするのなら、
たとえ出力結果のコードの動作速度が遅くなっても早くコンパイルが済んでほしいですよね。
これが、dev
のopt-level
のデフォルト設定が0
になっている唯一の理由です。
コードのリリース準備ができたら、より長い時間をコンパイルにかけるのが最善の策です。
リリースモードでコンパイルするのはたった1回ですが、コンパイル結果のプログラムは何度も実行するので、
リリースモードでは、長いコンパイル時間と引き換えに、生成したコードが速く動作します。
そのため、release
のopt-level
のデフォルト設定が3
になっているのです。
デフォルト設定に対してCargo.toml
で異なる値を追加すれば、上書きすることができます。
例として、開発用プロファイルで最適化レベル1を使用したければ、以下の2行をプロジェクトのCargo.tomlファイルに追加できます:
ファイル名: Cargo.toml
[profile.dev]
opt-level = 1
このコードは、デフォルト設定の0
を上書きします。こうすると、cargo build
を実行したときに、
dev
プロファイル用のデフォルト設定に加えて、Cargoはopt-level
の変更を適用します。
opt-level
を1
に設定したので、Cargoはデフォルトよりは最適化を行いますが、リリースビルドほどではありません。
設定の選択肢と各プロファイルのデフォルト設定の一覧は、Cargoのドキュメンテーションを参照されたし。