Rust で環境変数
envy#
参考資料#
envy の利用#
使用する crate(
Cargo.toml)公式の使い方の例
- 外部で
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
コードの内容はこんな感じ
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は以下のように書いておけば良い
ここに掲載する記事はまだありません。
