CPU アーキテクチャ情報を取得する

Recipe ID: sys-002

実行環境の CPU アーキテクチャ(x86_64, aarch64 など)を取得する方法を解説します。
これは、アーキテクチャ固有のバイナリをダウンロードさせたり、機能のサポート状況を判別したりする場合に役立ちます。

前提条件

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

npm run tauri add os

Permissions (権限) の設定

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

{
    "permissions": [
        ...,
        "os:default"
    ]
}

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

@tauri-apps/plugin-osarch() 関数を使用すると、現在のシステムの CPU アーキテクチャを示す文字列を取得できます。

主な戻り値

戻り値説明一般的な呼称
"x86_64"64-bit Intel/AMD プロセッサx64, AMD64
"aarch64"64-bit ARM プロセッサARM64, Apple Silicon (M1/M2/M3)
"x86"32-bit Intel プロセッサx86, i686
"arm"32-bit ARM プロセッサARM

Tauri で Sidecar(外部バイナリ)を使用する場合、ターゲットトリプルを含めたファイル名が必要になりますが、この arch() の値はその識別にも利用できます。

1. 基本的な使用法

現在のアーキテクチャを取得してログに出力するシンプルな例です。

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

const currentArch = arch();
console.log(`CPU Architecture: ${currentArch}`);
// 出力例: "x86_64", "aarch64"

2. Apple Silicon かどうかの判定

特定のアーキテクチャかどうかを判定するヘルパー関数の例です。例えば、Apple Silicon (M1/M2/M3) では aarch64 となります。

import { arch, type } from '@tauri-apps/plugin-os';

// Apple Silicon (ARM64 macOS) かどうかを判定
function isAppleSilicon(): boolean {
  return type() === 'Darwin' && arch() === 'aarch64';
}

if (isAppleSilicon()) {
  console.log('Apple Silicon 上で動作しています。ネイティブパフォーマンスが期待できます。');
} else {
  console.log('Intel Mac、またはその他の環境です。');
}

3. アーキテクチャに応じたリソースの選択

アーキテクチャによってダウンロードすべきファイルの URL を切り替えるといった実用的な例です。

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

function getDownloadUrlForTools() {
  const architecture = arch();
  const baseUrl = 'https://example.com/downloads/tools';

  switch (architecture) {
    case 'x86_64':
      return `${baseUrl}/tools-x64.zip`;
    case 'aarch64':
      return `${baseUrl}/tools-arm64.zip`;
    case 'x86':
      return `${baseUrl}/tools-x86.zip`;
    default:
      console.warn(`未対応のアーキテクチャです: ${architecture}`);
      return null;
  }
}

const url = getDownloadUrlForTools();
if (url) {
  console.log(`ダウンロードURL: ${url}`);
}

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

Rust 側でも std::env::consts::ARCH を使用してアーキテクチャを取得できます。

Rust 実装

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

#[command]
fn get_backend_arch() -> String {
    // "x86_64", "aarch64" などの文字列が得られます
    env::consts::ARCH.to_string()
}

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

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

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

invoke<string>('get_backend_arch').then(arch => {
    console.log(`Backend reported arch: ${arch}`);
});