Node.js サイドカー
この章では、Node.js アプリケーションを自己完結型バイナリにパッケージ化して、エンドユーザーが Node.js をインストールすることなく Tauri アプリケーションの「サイドカー」として利用できるようにします。 このチュートリアル例は、デスクトップ・オペレーティング・システムにのみ適用可能です。
「Tauri サイドカー」の仕組みをより深く理解するために、まずは一般的な サイドカー・ガイド を読むことをお勧めします。
以下の事例では、コマンドライン process.argv から入力を読み取り、console.log を使用して出力を stdout(標準出力)に書き込む Node.js アプリケーションを作成します。
「ローカルホスト・サーバー」、「stdin/stdout」(標準入出力)、「ローカル・ソケット」などといった代替のプロセス間通信システムを活用できます。
これらはそれぞれに利点、欠点、セキュリティ上の懸念があることに注意してください。
シェル・プラグインを使用してセットアップされた「既存の Tauri アプリケーション」。このシェル・プラグインは、ローカルでコンパイルおよび実行を行ないます。
-
サイドカー実装を格納する新しい Node.js プロジェクトを作成しましょう。 Tauri アプリケーションのルート・フォルダー に新しいディレクトリを作成し(この事例では
sidecar-appと呼びます)、そのディレクトリ内で、好みの Node.js パッケージ・マネージャーのinitコマンドを実行します。npm inityarn initpnpm initpkg コマンドを使用して、Node.js アプリケーションを自己完結型バイナリにコンパイルします。
《訳注》自己完結型バイナリ 原文 a self contained binary: この語は本稿一行目にも記載あり。ただし、この「ガイド」項目内では a self container binary と記載されており、表記のゆらぎか誤記かは不明。翻訳では self contained の意味として表記を統一してあります。
それを開発依存関係としてインストールしましょう:
npm add @yao-pkg/pkg --save-devyarn add @yao-pkg/pkg --devpnpm add @yao-pkg/pkg --save-dev -
では、Tauri アプリケーションによって実行される JavaScript コードの作成を始めましょう。
この事例では、コマンドライン引数からコマンドを処理し、出力を stdout(標準出力)に書き出します。 つまり、このプロセスは短命で、一度に一つのコマンドのみを処理します。 もしあなたのアプリケーションが「長い存続時間」(長命のプロセス)を必要としている場合には、別の「プロセス間通信システム」の使用を検討してください。
sidecar-appディレクトリにindex.jsファイルを作成し、基本的な Node.js アプリを記述しましょう:sidecar-app/index.js const command = process.argv[2];switch (command) {case 'ping':const message = process.argv[3];console.log(`pong, ${message}`);break;default:console.error(`unknown command ${command}`);process.exit(1);} -
Node.js アプリケーションを自己完結型バイナリにパッケージ化するには、以下の
pkgコマンドを実行します:npm run pkg -- --output appyarn pkg --output apppnpm pkg --output appこれにより、Linux および macOS では
sidecar-app/appバイナリが作成され、Windows ではsidecar-app/app.exe実行可能ファイルが作成されます。 このファイル名を Tauri サイドカー・ファイル名で要求される形式に変更するには、次の Node.js スクリプトを使用します:import { execSync } from 'child_process';import fs from 'fs';const ext = process.platform === 'win32' ? '.exe' : '';const rustInfo = execSync('rustc -vV');const targetTriple = /host: (\S+)/g.exec(rustInfo)[1];if (!targetTriple) {console.error('Failed to determine platform target triple');}fs.renameSync(`app${ext}`,`../src-tauri/binaries/app-${targetTriple}${ext}`); -
Node.js アプリケーションの準備ができたので、
bundle > externalBin配列を設定して、これを Tauri アプリケーションに接続します:src-tauri/tauri.conf.json {"bundle": {"externalBin": ["binaries/app"]}}Tauri CLI は、サイドカー・バイナリが
src-tauri/binaries/app-<target-triple>として存在する限り、サイドカー・バイナリのバンドルを処理します。《訳注》target-triple 「target」はアプリが対象とするプラットフォーム、「triple」は target の内容を示す三要素 <machine>-<vendor>-<os>: 例 aarch64-apple-darwin(ARM64-apple-macOS)〔参考〕
-
サイドカー・バイナリは、Rust コードからでも、直接 JavaScript からでも実行できます。
Node.js サイドカーで
pingコマンドを直接実行してみましょう:import { Command } from '@tauri-apps/plugin-shell';const message = 'Tauri';const command = Command.sidecar('binaries/app', ['ping', message]);const output = await command.execute();const response = output.stdout;Tauri コマンド
pipeを Node.js サイドカーにパイプ処理をしてみましょう:#[tauri::command]async fn ping(app: tauri::AppHandle, message: String) -> String {let sidecar_command = app.shell().sidecar("app").unwrap().arg("ping").arg(message);let output = sidecar_command.output().unwrap();let response = String::from_utf8(output.stdout).unwrap();response}
【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
© 2025 Tauri Contributors. CC-BY / MIT