実行環境の 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-os の arch() 関数を使用すると、現在のシステムの 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}`);
});