[OSS紹介#18] pytauri:PythonとRustを活用した新しいデスクトップアプリ開発のアプローチ

この記事について

この記事では、オープンソースソフトウェア(OSS)の中でも特に注目すべきツール「pytauri」を紹介します。連載第17回目となる今回は、Pythonによるアプリケーション開発の新たなアプローチについて掘り下げていきます。前回の記事では、PyInstallerNuitkaといった実行ファイルに変換する方法を取り扱い、その利点や限界を探りましたが、今回は全く異なるビルド手法を提供するツールを取り上げます。

「pytauri」は、TauriのPythonバインディングであり、Pyo3を介してPythonでの開発を簡単にします。このツールは、PythonとRustの利点を組み合わせて、軽量かつ高速なデスクトップアプリケーションの開発を可能にします。特に、企業や開発者にとっては、信頼性の高いアプリを効率的にビルドできることが大きな魅力です。また、「pytauri」を使用することで、Pythonの文法を活かしつつ、Rustの高速性を享受できます。

今後の開発プロジェクトにおいて、どのように「pytauri」を活用できるのか、その可能性について詳しく解説していきます。このツールの採用が、あなたの開発プロセスをどのように変革するか、ぜひお楽しみに!

リンク:https://github.com/pytauri/pytauri


本コンテンツは、弊社AI開発ツール「IXV」を用いたOSSツール紹介です。情報の正確性には努めておりますが、内容に誤りが含まれる可能性がございますのでご了承ください。

1. pytauriでできること

pytauriは、Pythonを通じてTauriの機能を活用するためのバインディングです。このツールを使用することで、以下のようなことが可能になります。

1.1 Rustの利用

pytauriは、Rustコンパイラが必要ですが、ほとんどRustのコードを書く必要がありません。Pythonのみでの開発が可能です。スタンドアロンアプリケーションとしてパッケージング可能で、Pyinstallerを使用したビルドとは異なり、tauri-cliが提供するすべての利点を享受できます。

1.2 高速で安全なIPC

pytauriは、Pyo3のおかげで、プロセス間通信(IPC)のオーバーヘッドがなく、セキュリティが高く、非常に高速です。

1.3 プラグインのサポート

Tauriの公式プラグイン(例えば、通知プラグイン)をサポートしており、自分自身でプラグインを作成することも可能です。

1.4 フルスタック開発のサポート

niceguiやgradioなどのフレームワークと統合することで、Node.jsを使用せずにフルスタックPython開発が実現できます。

1.5 スタンドアロンバイナリのビルド

pytauriはPythonホイールとして配布できるほか、通常のTauriアプリケーションとしてスタンドアロン実行ファイルにコンパイルすることも可能です。この際、python-build-standaloneを利用してポータブルなPython環境をバンドルします。

2. セットアップ手順

pytauriを使用するためのセットアップは以下の通りです。

2.1 必要な環境

  • Python 3.8以上
  • Rustのインストールが必要ですが、pytauri-wheelを使用すればRustコンパイラは不要です。
  • 推奨ツール:
    • create-tauri-app: v4.5.9
    • uv: v0.5.11(Pythonパッケージマネージャー)
    • tauri-cli: v2.1.0
  • 必要なライブラリやツールは、以下のようにインストールできます。
pip install pytauri

2.2 ライセンス

pytauriは、Apache-2.0ライセンスのもとで公開されています。このライセンスにより、自由に使用、変更、配布が可能です。

2.3 動作環境

pytauriは、主要なオペレーティングシステム(Windows、macOS、Linux)で動作します。

3. 簡単な使い方

pytauriを使った基本的なアプリケーションの例を以下に示します。

3.1 新規Tauriプロジェクトの作成

    pnpm create tauri-app
    • プロジェクト作成時の選択:
      • プロジェクト名: tauri-app
      • フロントエンド言語: TypeScript / JavaScript (pnpm)
      • UIテンプレート: Vanilla
      • UIフレーバー: TypeScript

    3.2 仮想環境の作成と依存関係のインストール

    # 仮想環境の作成
    uv venv --python-preference only-system
    
    # 仮想環境の有効化(bash)
    source .venv/bin/activate
    
    # 仮想環境の有効化(PowerShell)
    .venv\Scripts\Activate.ps1

    3.3 pyproject.tomlの設定

    [project]
    name = "tauri-app"
    version = "0.1.0"
    description = "Add your description here"
    requires-python = ">=3.9"
    dependencies = ["pytauri == 0.5.*"]
    
    [project.entry-points.pytauri]
    ext_mod = "tauri_app.ext_mod"
    
    [build-system]
    requires = ["setuptools>=61"]
    build-backend = "setuptools.build_meta"
    
    [tool.setuptools.packages]
    find = { where = ["python"] }

    3.4 Pythonコード例

    import sys
    from pydantic import BaseModel
    from pytauri import AppHandle, Commands
    from pytauri_plugin_notification import NotificationExt
    
    commands = Commands()
    
    class Person(BaseModel):
        name: str
    
    class Greeting(BaseModel):
        message: str
    
    @commands.command()
    async def greet(body: Person, app_handle: AppHandle) -> Greeting:
        notification_builder = NotificationExt.builder(app_handle)
        notification_builder.show(title="Greeting", body=f"Hello, {body.name}!")
    
        return Greeting(
            message=f"Hello, {body.name}! You've been greeted from Python {sys.version}!"
        )

    3.5 フロントエンドとの連携

    フロントエンド側では、以下のように呼び出すことができます。

    import { pyInvoke } from "tauri-plugin-pytauri-api";
    
    export interface Person {
        name: string;
    }
    
    export interface Greeting {
        message: string;
    }
    
    export async function greet(body: Person): Promise<Greeting> {
        return await pyInvoke("greet", body);
    }

    4. ビルド/開発

    4.1 ポータブルPythonの準備

    python-build-standaloneから必要なバージョンをダウンロードし、src-tauri/pyembedに展開します:

    • Windows: cpython-*-x86_64-pc-windows-msvc-install_only_stripped.tar.gz
    • Linux: cpython-*-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
    • macOS: cpython-*-aarch64-apple-darwin-install_only_stripped.tar.gz

    4.2 組み込みPython環境へのインストール

    # Windowsの場合
    $env:PYTAURI_STANDALONE="1"
    uv pip install --exact --python=".\src-tauri\pyembed\python\python.exe" --reinstall-package=tauri-app .\src-tauri
    
    # Unix系の場合
    export PYTAURI_STANDALONE="1"
    uv pip install --exact --python="./src-tauri/pyembed/python/bin/python3" --reinstall-package=tauri-app ./src-tauri

    4.3 ビルドとバンドル

    tauri-cliを使用してアプリケーションをバンドルします:

    pnpm -- tauri build --config="src-tauri/tauri.bundle.json" -- --profile bundle-release

    4.4 開発時のホットリロード

    pytauriは開発時にPythonコードの変更を検知して自動リロードする機能を提供します。Rustコードの再コンパイルは不要で、開発効率が大幅に向上します。

    設定ファイル:

    // vite.config.ts
    export default defineConfig(async () => ({
      server: {
        watch: {
          ignored: ["**/src-tauri/**", "**/.venv/**"],
        },
      },
    }));

    5. 結論

    pytauriは、Python開発者にとって非常に魅力的なツールであり、Tauriの機能をフルに活用できる環境を提供します。Rustの知識がなくても、Pythonだけでアプリケーションを開発できるため、特にPythonエコシステムを活用したい開発者にとって優れた選択肢となります。興味のある方はぜひ、公式ドキュメントを参照し、プロジェクトを開始してみてください。