コンテンツにスキップ
Tauri

Node.js サイドカー

この章では、Node.js アプリケーションを自己完結型バイナリにパッケージ化して、エンドユーザーが Node.js をインストールすることなく Tauri アプリケーションの「サイドカー」として利用できるようにします。 このチュートリアル例は、デスクトップ・オペレーティング・システムにのみ適用可能です。

「Tauri サイドカー」の仕組みをより深く理解するために、まずは一般的な サイドカー・ガイド を読むことをお勧めします。

以下の事例では、コマンドライン process.argv から入力を読み取り、console.log を使用して出力を stdout(標準出力)に書き込む Node.js アプリケーションを作成します。
「ローカルホスト・サーバー」、「stdin/stdout」(標準入出力)、「ローカル・ソケット」などといった代替のプロセス間通信システムを活用できます。 これらはそれぞれに利点、欠点、セキュリティ上の懸念があることに注意してください。

シェル・プラグインを使用してセットアップされた「既存の Tauri アプリケーション」。このシェル・プラグインは、ローカルでコンパイルおよび実行を行ないます。

  1. サイドカー実装を格納する新しい Node.js プロジェクトを作成しましょう。 Tauri アプリケーションのルート・フォルダー に新しいディレクトリを作成し(この事例では sidecar-app と呼びます)、そのディレクトリ内で、好みの Node.js パッケージ・マネージャーの init コマンドを実行します。

    npm init

    pkg コマンドを使用して、Node.js アプリケーションを自己完結型バイナリにコンパイルします。

    《訳注》

    自己完結型バイナリ 原文 a self contained binary: この語は本稿一行目にも記載あり。ただし、この「ガイド」項目内では a self container binary と記載されており、表記のゆらぎか誤記かは不明。翻訳では self contained の意味として表記を統一してあります。

    それを開発依存関係としてインストールしましょう:

    npm add @yao-pkg/pkg --save-dev
  2. では、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);
    }
  3. Node.js アプリケーションを自己完結型バイナリにパッケージ化するには、以下の pkg コマンドを実行します:

    npm run 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}`
    );
  4. 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)〔参考

  5. サイドカー・バイナリは、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;

【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】


© 2025 Tauri Contributors. CC-BY / MIT