ユーザーのホームディレクトリパスを取得する

Recipe ID: fs-020

現在のユーザーのホームディレクトリ(Windows なら C:\Users\{UserName}、macOS/Linux なら /Users/{UserName}/home/{UserName})のパスを取得する方法を解説します。
Tauri では @tauri-apps/api/path モジュールを使用して、プラットフォームに依存しない方法で取得できます。

前提条件

この機能を使用するには、@tauri-apps/api パッケージが必要です。

使用方法

@tauri-apps/api/path から homeDir をインポートして使用します。

OSパス (例)
WindowsC:\Users\TauriUser
macOS/Users/TauriUser
Linux/home/tauriuser

1. フロントエンドから作成する (TypeScript)

@tauri-apps/api/pathhomeDir 関数を使用します。

ホームディレクトリを表示する

import { homeDir } from '@tauri-apps/api/path';

async function showHomePath() {
  try {
    const homePath = await homeDir();
    console.log('Home Directory:', homePath);
    return homePath;
  } catch (err) {
    console.error('Failed to get home path:', err);
  }
}

ホームディレクトリ配下の特定のファイルへのパスを作成する

ホームディレクトリ直下の .ssh フォルダや、独自の設定ファイルにアクセスしたい場合などに join と組み合わせて使用します。
(※ 一般的なドキュメントやダウンロードフォルダへのアクセスには、専用の documentDir()downloadDir() 関数の使用を推奨します)

import { homeDir, join } from '@tauri-apps/api/path';

async function getSshConfigPath() {
    try {
        const home = await homeDir();
        // ~/.ssh/config のパスを作成
        const sshConfigPath = await join(home, '.ssh', 'config');
        return sshConfigPath;
    } catch (err) {
        console.error(err);
    }
}

2. バックエンドから作成する (Rust)

Rust では dirs クレート、または Tauri v2 の AppHandle から取得可能です。
Tauri v2 では app.path().home_dir() が利用できます(内部で dirs に相当する処理を行っています)。

ホームディレクトリ取得

use tauri::Manager;

#[tauri::command]
fn get_user_home(app: tauri::AppHandle) -> Result<String, String> {
    app.path().home_dir()
        .map(|p| p.to_string_lossy().to_string())
        .map_err(|e| e.to_string())
}

パスの構築(推奨)

Rust 側でも、パスの結合は PathPathBufjoin メソッドを使用します。

use tauri::Manager;

#[tauri::command]
fn get_ssh_path(app: tauri::AppHandle) -> Result<String, String> {
    let home = app.path().home_dir().map_err(|e| e.to_string())?;
    
    // ~/.ssh/config
    let ssh_config = home.join(".ssh").join("config");
    
    Ok(ssh_config.to_string_lossy().to_string())
}

補足

  • パス区切り文字: Rust の PathBuf や JS の join を使用することで、Windows (\) と macOS/Linux (/) の違いを吸収できます。手動で文字列結合することは避けてください。
  • プライバシー: ホームディレクトリ以下の構造はユーザーによって大きく異なるため、決め打ちのパス(例: ~/MyTools)を使用する際はディレクトリの存在確認と作成をセットで行う必要があります。