コンピュータのホスト名を取得する

Recipe ID: sys-003

コンピュータのホスト名(デバイス名)を取得する方法を解説します。
これは、ユーザーの識別や、ログ出力時の端末情報の記録などに役立ちます。

前提条件

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

npm run tauri add os

Permissions (権限) の設定

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

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

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

@tauri-apps/plugin-oshostname() 関数を使用します。
この関数は非同期(Promise)で動作し、解決されるとホスト名の文字列を返します。

※ ブラウザのサンドボックス制限により、通常の Web API だけでは正確なシステムホスト名を取得することは難しいため、このプラグイン機能は非常に有用です。

1. 基本的な使用法(Console 出力)

ホスト名を非同期で取得して表示する基本的な例です。

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

// async 関数内で実行する必要があります
async function logHostname() {
  const name = await hostname();
  console.log(`Hostname: ${name}`);
}

logHostname();

2. デバッグ情報の収集

アプリケーションの起動時に、OS情報と合わせてホスト名をログに記録するユーティリティ関数の例です。

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

async function logSystemInfo() {
  const info = {
    host: await hostname(),
    os: platform(),
    version: version(),
    arch: arch(),
    timestamp: new Date().toISOString(),
  };

  console.table(info);
}

logSystemInfo();

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

Rust 側でホスト名を取得する場合は、通常 hostname クレートを使用します。

依存関係の追加 (Rust)

src-tauri/Cargo.toml に以下の依存関係を追加します。

[dependencies]
hostname = "0.4"
serde = { version = "1", features = ["derive"] }

Rust 実装

use tauri::command;

#[command]
fn get_backend_hostname() -> Result<String, String> {
    hostname::get()
        .map(|h| h.to_string_lossy().into_owned())
        .map_err(|e| e.to_string())
}

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

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

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

invoke<string>('get_backend_hostname')
  .then(name => console.log('Hostname from Rust:', name))
  .catch(console.error);