Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Env

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

Flix は、環境変数、システムプロパティ、およびプラットフォーム情報にアクセスするためのライブラリエフェクト(Library effect)として Env を提供しています。Env エフェクトにはデフォルトハンドラがあるため、main の中で明示的に runWithIO を呼び出す必要はありません。主要なモジュールは Sys.Env です。

Env エフェクト

Env エフェクトは、プログラムの環境を読み取るための操作を提供します:

pub eff Env {
    /// コマンドラインからプログラムに渡された引数を返します。
    def getArgs(): List[String]

    /// 現在のシステム環境の Map を返します。
    def getEnv(): Map[String, String]

    /// 指定された環境変数の値を返します。
    def getVar(name: String): Option[String]

    /// 名前で指定されたシステムプロパティを返します。
    def getProp(name: String): Option[String]

    /// オペレーティングシステム名を返します。
    def getOsName(): Option[String]

    /// オペレーティングシステムのアーキテクチャを返します。
    def getOsArch(): Option[String]

    /// オペレーティングシステムのバージョンを返します。
    def getOsVersion(): Option[String]

    /// ファイル区切り文字を返します。
    def getFileSeparator(): String

    /// パス区切り文字を返します。
    def getPathSeparator(): String

    /// システムの行区切り文字を返します。
    def getLineSeparator(): String

    /// ユーザーの現在の作業ディレクトリを返します。
    def getCurrentWorkingDirectory(): Option[String]

    /// デフォルトの一時ファイルのパスを返します。
    def getTemporaryDirectory(): Option[String]

    /// ユーザーのアカウント名を返します。
    def getUserName(): Option[String]

    /// ユーザーのホームディレクトリを返します。
    def getUserHomeDirectory(): Option[String]

    /// JVM が利用できる仮想プロセッサ数を返します。
    def getVirtualProcessors(): Int32
}

ディレクトリと OS 情報

Env のもっとも簡単な使い方は、現在のディレクトリ、ホームディレクトリ、あるいはオペレーティングシステムを問い合わせることです:

use Sys.Env

def main(): Unit \ { Env, IO } =
    let home = Env.getUserHomeDirectory();
    println("Home: ${home}");
    let cwd = Env.getCurrentWorkingDirectory();
    println("CWD: ${cwd}");
    let os = Env.getOsName();
    println("OS: ${os}")

環境変数

単一の環境変数を読み取るには getVar を、すべての環境変数を Map として取得するには getEnv を使います:

use Sys.Env

def main(): Unit \ { Env, IO } =
    let path = Env.getVar("PATH");
    println("PATH: ${path}");
    let all = Env.getEnv();
    println("Total env vars: ${Map.size(all)}")

システム情報

Env エフェクトは、OS のアーキテクチャや利用可能なプロセッサ数といったプラットフォームの詳細情報も公開しています:

use Sys.Env

def main(): Unit \ { Env, IO } =
    let name    = Env.getOsName();
    let arch    = Env.getOsArch();
    let version = Env.getOsVersion();
    let cpus    = Env.getVirtualProcessors();
    println("OS:   ${name}");
    println("Arch: ${arch}");
    println("Ver:  ${version}");
    println("CPUs: ${cpus}")