↓ メインコンテンツへスキップ

Rust で環境変数

envy
#

参考資料
#

envy の利用
#

  • 使用する crate( Cargo.toml )

    1[dependencies]
    2envy = "0.4"
  • 公式の使い方の例

    • 外部で FOO=123, BAR=true, BAZ=example, BOOM=1,2,3 を設定しておく
    • 構造体のフィールドに #[serde(default = "path")] アトリビュートを適用することで、パラメータのデフォルト値を設定することが可能
     1use serde::Deserialize;
     2
     3#[derive(Deserialize, Debug)]
     4struct Config {
     5  foo: u16,
     6  bar: bool,
     7  baz: String,
     8	boom: Vec<u64>,
     9	#[serde(default="default_port")]
    10  port: u16,
    11}
    12
    13fn default_port() -> u16 {
    14    8080
    15}
    16
    17fn main() {
    18		let config = match envy::from_env::<Config>() {
    19       Ok(val) => println!("{:#?}", val),
    20       Err(error) => panic!("{:#?}", error)
    21    }
    22
    23		println!("{:#?}", config);
    24
    25		assert_eq!(config.foo, 123);
    26    assert_eq!(config.bar, true);
    27		assert_eq!(config.baz, example);
    28    assert_eq!(config.boom, vec![1,2,3]);
    29		assert_eq!(config.port, 8080);
    30}

dotenv
#

  • TypeScript でも同様のライブラリがある
  • 環境変数を .env なる外部ファイルに書き出ししておいておける

参考資料
#

使い方
#

  • 使用する crate

    1[dependencies]
    2# .envファイルの内容を環境変数として読み込む
    3dotenv = "0.15.0"
    4# .envの内容をConfigに保存するcrate
    5config = "0.10.1"
    6# 実行時にstatic変数を初期化するcrate
    7once_cell = "1.9.0"
    8serde = {version = "1.0.116", features = ["derive"]}
  • コードの内容はこんな感じ

     1extern crate lazy_static;
     2
     3use config::ConfigError;
     4use dotenv::dotenv;
     5use once_cell::sync::Lazy;
     6use serde::Deserialize;
     7
     8/// .evnの内容を保存するstruct
     9#[derive(Deserialize, Debug)]
    10pub struct Config {
    11    pub address: String,
    12    pub port: i32,
    13}
    14
    15impl Config {
    16    /// 環境変数からデータを読み込む
    17    pub fn from_env() -> Result<Self, ConfigError> {
    18        let mut cfg = config::Config::new();
    19        cfg.merge(config::Environment::new())?;
    20        cfg.try_into()
    21    }
    22}
    23
    24/// static変数の初期化
    25static CONFIG: Lazy<Config> = Lazy::new(|| {
    26	dotenv().ok();
    27	Config::from_env().unwrap()
    28});
    29
    30fn main() {
    31    println!("address: {}", CONFIG.address);
    32    println!("port: {}", CONFIG.port);
    33}
  • .dotenv は以下のように書いておけば良い

    1ADDRESS=localhost
    2PORT=6379

ここに掲載する記事はまだありません。