OS の種類(Windows/Mac/Linux)を取得する

Recipe ID: sys-001

OS の種類(Windows/Mac/Linux)や、バージョン、アーキテクチャ、ホスト名などのシステム情報を取得する方法を解説します。

前提条件

このレシピを使用するには、@tauri-apps/plugin-os プラグインのインストールが必要です。

npm run tauri add os

Permissions (権限) の設定

src-tauri/capabilities/default.json に以下の権限を追加します。

{
    "permissions": [
        ...,
        "os:default",
        "os:allow-hostname"
    ]
}

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

Tauri の @tauri-apps/plugin-os プラグインを使用すると、アプリが実行されている OS に関する様々な情報を取得できます。これらは、プラットフォームごとの処理の分岐や、システム情報の表示などに役立ちます。

主な関数

関数名説明戻り値の例
platform()プラットフォーム識別子を返します。"windows", "macos", "linux", "android", "ios"
type()OS の種類を返します。"windows", "macos", "linux", "android", "ios"
version()OS のバージョンを返します。"10.0.19045", "23.0.0"
arch()CPU アーキテクチャを返します。"x86_64", "aarch64"
family()OS ファミリーを返します。"windows", "unix"
locale()システムのロケールを取得します。"ja-JP", "en-US"
hostname()ホスト名を取得します。"my-pc-name"
eol()システム固有の改行コードを取得します。"\r\n" (Win), "\n" (Unix)

1. 基本的なシステム情報の取得

OS の種類、プラットフォーム、バージョン、アーキテクチャなどの基本情報を取得してコンソールに表示する例です。

import { platform, version, arch, family, eol } from '@tauri-apps/plugin-os';

// プラットフォーム情報
console.log(`Platform: ${platform()}`); // 例: windows
console.log(`OS Family: ${family()}`); // 例: windows

// 詳細情報
console.log(`Version: ${version()}`);  // 例: 10.0.22631
console.log(`Arch: ${arch()}`);        // 例: x86_64

// 改行コードの確認 (JSON.stringifyで見える化)
console.log(`EOL: ${JSON.stringify(eol())}`); // 例: "\r\n"

2. ロケールとホスト名の取得

非同期関数である locale()hostname() を使用する例です。これらは Promise を返すため、await を使用します。

import { locale, hostname } from '@tauri-apps/plugin-os';

async function fetchSystemDetails() {
  try {
    const currentLocale = await locale();
    const currentHostname = await hostname();
    
    console.log(`Locale: ${currentLocale}`);     // 例: ja-JP
    console.log(`Hostname: ${currentHostname}`); // 例: desktop-12345
  } catch (error) {
    console.error('情報の取得に失敗しました:', error);
  }
}

fetchSystemDetails();

3. OSに基づいた処理の分岐

OS の種類に応じて、ファイルパスの区切り文字や特定の処理を切り替える実用的な例です。

import { platform } from '@tauri-apps/plugin-os';

const osPlatform = platform();

if (osPlatform === 'windows') {
  console.log('Windows 向けの処理を実行します。');
  // Windows 特有のパス処理など
  const pathSeparator = '\\';
} else if (osPlatform === 'macos') {
  console.log('macOS 向けの処理を実行します。');
  // macOS 特有のキーボードショートカット表示など
} else if (osPlatform === 'linux') {
  console.log('Linux 向けの処理を実行します。');
}

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

Rust 側(バックエンド)でも OS 情報を取得してロジックに使用することができます。
単純な OS 判定であれば標準ライブラリの std::env::consts が便利です。

Rust 実装

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

#[command]
fn get_backend_os_type() -> String {
    // 定数として OS 識別子を取得 ("linux", "macos", "windows", "android", "ios" など)
    let os = env::consts::OS;
    format!("Backend detected: {}", os)
}

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

フロントエンドからの呼び出し

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

invoke<string>('get_backend_os_type').then(console.log);
// Output: "Backend detected: windows" など