環境変数を取得するには標準ライブラリのstd::env::var
を使います。これは単体の値を取得する為のもので、すべてを取得したい場合はstd::env::vars
です。
env::var
は引数で渡された名前の環境変数があるかどうかをResult
で返します。ある場合はOk<String>
、ない場合はErr<VarError>
を返します。
例えばこのようなコードがあるとして、
use std::env;
fn main() {
let var = env::var("VAR").expect("VAR is not defined");
println!("{}", var);
}
単にcargo run
するとエラー(thread 'main' panicked at 'VAR is not defined: NotPresent'
)になります。($VAR
が設定されてない前提)VAR=foo cargo run
とちゃんと環境変数を設定して実行するとfoo
がプリントされます。
dotenv
dotenv
というクレートを使うとそのプロジェクトだけの環境変数が使いやすくなります。これはプロジェクトルートに.env
というファイルを作り中に環境変数をまとめて書けば、1行実行するだけでそれらを環境変数として扱えるクレートです。
使う前にCargo.toml
の依存に追加が必要です。
[dependencies]
dotenv = "0.15.0"
次に.env
を以下のような感じで作ります。
VAR=foo
main
コードを書き換えます。
use std::env;
use dotenv::dotenv;
fn main() {
dotenv().ok();
let var = env::var("VAR").expect("VAR is not defined");
println!("{}", var);
}
dotenv()
の行で.env
の中身をプログラム中だけ環境変数に追加します。よってこの実行はコンソールにfoo
と表示します。
ちなみに.env
が無くてもdotenv().ok()
でエラーは特に起こらないようです。