Rust で環境変数
envy
参考資料
envy の利用
-
使用する crate(
Cargo.toml
)[dependencies]envy = "0.4" -
公式の使い方の例
- 外部で
FOO=123, BAR=true, BAZ=example, BOOM=1,2,3
を設定しておく - 構造体のフィールドに
#[serde(default = "path")]
アトリビュートを適用することで、パラメータのデフォルト値を設定することが可能
use serde::Deserialize;#[derive(Deserialize, Debug)]struct Config {foo: u16,bar: bool,baz: String,boom: Vec<u64>,#[serde(default="default_port")]port: u16,}fn default_port() -> u16 {8080}fn main() {let config = match envy::from_env::<Config>() {Ok(val) => println!("{:#?}", val),Err(error) => panic!("{:#?}", error)}println!("{:#?}", config);assert_eq!(config.foo, 123);assert_eq!(config.bar, true);assert_eq!(config.baz, example);assert_eq!(config.boom, vec![1,2,3]);assert_eq!(config.port, 8080);} - 外部で
dotenv
- TypeScript でも同様のライブラリがある
- 環境変数を
.env
なる外部ファイルに 書き出ししておいておける
参考資料
使い方
-
使用する crate
[dependencies]# .envファイルの内容を環境変数として読み込むdotenv = "0.15.0"# .envの内容をConfigに保存するcrateconfig = "0.10.1"# 実行時にstatic変数を初期化するcrateonce_cell = "1.9.0"serde = {version = "1.0.116", features = ["derive"]} -
コードの内容はこんな感じ
extern crate lazy_static;use config::ConfigError;use dotenv::dotenv;use once_cell::sync::Lazy;use serde::Deserialize;/// .evnの内容を保存するstruct#[derive(Deserialize, Debug)]pub struct Config {pub address: String,pub port: i32,}impl Config {/// 環境変数からデータを読み込むpub fn from_env() -> Result<Self, ConfigError> {let mut cfg = config::Config::new();cfg.merge(config::Environment::new())?;cfg.try_into()}}/// static変数の初期化static CONFIG: Lazy<Config> = Lazy::new(|| {dotenv().ok();Config::from_env().unwrap()});fn main() {println!("address: {}", CONFIG.address);println!("port: {}", CONFIG.port);} -
.dotenv
は以下のように書いておけば良いADDRESS=localhostPORT=6379