リリースプロファイルによるビルドのカスタマイズ
Rust では、リリースプロファイル は、コードをコンパイルするためのさまざまなオプションをプログラマーがより細かく制御できるようにする、異なる設定を持つ、あらかじめ定義されたカスタマイズ可能なプロファイルです。各プロファイルは、ほかのプロファイルとは独立して設定されます。
Cargo には 2 つの主要なプロファイルがあります。cargo build を実行したときに Cargo が使う dev プロファイルと、cargo build --release を実行したときに Cargo が使う release プロファイルです。dev プロファイルには開発向けの適切なデフォルトが定義されており、release プロファイルにはリリースビルド向けの適切なデフォルトが定義されています。
これらのプロファイル名は、ビルドの出力で見覚えがあるかもしれません。
$ cargo build
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
$ cargo build --release
Finished `release` profile [optimized] target(s) in 0.32s
この dev と release が、コンパイラによって使われる異なるプロファイルです。
Cargo には各プロファイルのデフォルト設定があり、プロジェクトの Cargo.toml ファイルに [profile.*] セクションを明示的に追加していない場合に適用されます。カスタマイズしたいプロファイルに対して [profile.*] セクションを追加すると、デフォルト設定の任意の一部を上書きできます。たとえば、dev および release プロファイルにおける opt-level 設定のデフォルト値は次のとおりです。
ファイル名: Cargo.toml
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
opt-level 設定は、Rust がコードに適用する最適化の量を制御し、その範囲は 0 から 3 です。より多くの最適化を適用するとコンパイル時間は長くなるため、開発中でコードを頻繁にコンパイルするのであれば、生成されるコードの実行速度が遅くなっても、より速くコンパイルできるように最適化は少ないほうがよいでしょう。したがって、dev のデフォルトの opt-level は 0 です。コードをリリースする準備ができたら、コンパイルにより多くの時間をかけるのが最善です。リリースモードでコンパイルするのは 1 回だけですが、コンパイル済みのプログラムは何度も実行します。そのため、リリースモードではコンパイル時間が長くなる代わりに、より高速に動作するコードが得られます。これが、release プロファイルのデフォルトの opt-level が 3 である理由です。
デフォルト設定は、Cargo.toml に異なる値を追加することで上書きできます。たとえば、開発プロファイルで最適化レベル 1 を使いたい場合は、プロジェクトの Cargo.toml ファイルに次の 2 行を追加できます。
ファイル名: Cargo.toml
[profile.dev]
opt-level = 1
このコードは、デフォルト設定である 0 を上書きします。これで cargo build を実行すると、Cargo は dev プロファイルのデフォルト設定に加えて、opt-level に対する私たちのカスタマイズも使用します。opt-level を 1 に設定したため、Cargo はデフォルトより多くの最適化を適用しますが、リリースビルドほど多くはありません。
各プロファイルの設定オプションとデフォルト値の完全な一覧については、Cargoのドキュメント を参照してください。