環境変数

環境変数を取得するには標準ライブラリの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()でエラーは特に起こらないようです。