システムの環境変数を取得する

Recipe ID: sys-011

システムの環境変数(PATH, HOME など)を取得する方法を解説します。
セキュリティ上の理由から、Tauri のフロントエンド (JavaScript) からは直接すべての環境変数にアクセスすることはできません。
Rust 側でコマンドを作成して、必要な変数だけを安全にフロントエンドに渡す方法が推奨されます。

解説

Rust の std::env モジュールを使用します。

Rust 側の実装

指定された環境変数の値を取得するコマンドを実装します。

src-tauri/src/lib.rs (または main.rs):

use tauri::command;
use std::env;

#[command]
fn get_env_var(name: String) -> Option<String> {
    env::var(name).ok()
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![get_env_var])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

サンプルコード (Frontend)

JavaScript からコマンドを呼び出します。

import { invoke } from '@tauri-apps/api/core';

async function checkEnv() {
  try {
    // Windows の場合は 'USERNAME', Mac/Linux の場合は 'USER' など
    const user = await invoke<string | null>('get_env_var', { name: 'USER' });
    console.log('User Env:', user);
    
    // PATH 変数の取得
    const path = await invoke<string | null>('get_env_var', { name: 'PATH' });
    console.log('PATH:', path);

  } catch (err) {
    console.error(err);
  }
}

checkEnv();

※ アプリケーションの本番ビルドでは、ユーザー環境の環境変数は取得できますが、開発環境(.env ファイル等)の読み込みには dotenv クレートなどが別途必要になる場合があります。