sys.envを使う
sys.env
という関数が用意されていて、実態はSystem.getenv()
をScalaのMapのインタフェースで包んだものが得られます。immutableなので、書き換えることはできません。
存在しない環境変数を参照と例外が送出されますので、参照する際はgetOrElse
でデフォルト値を必ず与えておくと良いでしょう。
短いので、Scala 2.13のソースコードをそのまま貼り付けてしまいます。
def env: Map[String, String] = Map.from(System.getenv().asScala).withDefault { v => val s = System.getenv(v) if (s == null) throw new NoSuchElementException(v) s }
scala.util. Propertiesを使う
Mapとして丸っとコピーするには環境変数は大きいので、必要な物だけアクセスすればいいのでは?ということで、scala.util.Properties
に、envOrElse
関数が用意されてます。
これも短いので、該当箇所をまるっと貼り付けてしまいますが、以下のようなコードになっています。
def envOrElse(name: String, alt: => String) = Option(System getenv name) getOrElse alt
sys.env
の方がタイプ数が短いのだけど、若干「なんかScalaっぽくない」感じがするので、scala.util. Properties
を使った方が好みです。また、ScalaやJDKのバージョン取得用のメソッドが用意されていたりと、便利なメソッドが用意されているので、scala.util. Properties
のメソッドは一通り見ておくと良いかも。