選挙の街宣車やら何やらに殺意を覚えながら、このブログを書いています。
とくに立憲民主党がひどくうるさいです。
日本共産党は、この間、怒ったからまだまし?にはなったけど、まだうるさいようにも思います。
静けさは権利です。

前回までのあらすじ
PythonとElectronを使って、GUIアプリを作る方法を調べていたら、
tauriという、もっと早い実行速度でGUIを作れるものを見つけました。

tauriとは?
Electronの代理を目指した、Rustというプログラム言語で作られたElectronもどきです。
ただ、Electronよりめんどくさい代わりに、ものすごく高性能だとか。

tauriを使う準備その1
動かしてみなければわからない。
というわけで、やってみましょう。
というよりも、前準備が多いので、心が折れないか心配になりそうですが、やってみましょう。

tauriを始める前に、準備なのですが、このページに従ってもらうとして、
TauriでRustもフロントエンドも身につけたいので、最初の一歩を踏み出した(Zenn)
https://zenn.dev/sakai_nako/articles/starting-tauri

Windowsで使う場合は、
VisualStudio C++ build toolsと、WebView2と、Rustが必要です。
nvm-windowsやらNode.jsやらyarnやらは、どちらかが必要です。
リンクは割愛します。
Linuxやmacで使う場合でも、前準備が必要です。
コマンド使って、いろんなものをインストールするのですが、
前準備の内容については、こちらを。
なお、tauriそのものは、MITライセンスまたはApache2ライセンスの選択制なのですが、
Linuxの場合はGTK(LGPLライセンス)を使うので、LGPLライセンス汚染が発生します。

準備その2
Rustをインストールすると、
cargoと呼ばれる、コマンド打ち込んでいろんなことをするものがインストールされます。
とりあえずは、このコマンドを、PowerShellまたはターミナルで打ち込みましょう。
cargo install tauri-cli
cargo install create-tauri-app --locked
上の2つのコマンドは、必要なものをインストールするコマンドも兼ねています。
そのあと、このコマンドを打ち込みます。
cargo create-tauri-app

あとは、自分の理想とするものを自由に打ち込んでいきます。
このあと書くサンプルでは、HTMLをごりごり動かすので、
Choose which language to use for your frontend の項目は、
TypeScript / JavaScript - (pnpm, yarn, npm)を選んでください。
Rustには、私がまだ対応できないので、サンプル作れません。

準備その3
あとはPowerShellやターミナルで表示されたコマンドをコピペして、打ち込みます。
cd なんとか とか、npm install とか、npm run tauri dev とか)、
ビルドに時間をかけたあと、こんなのが出ます。



debugフォルダの中に、ぱっと見、実行ファイルができているけど、
これは1回閉じると実行できないダメファイルなので、
実行ファイルの姿だけ見て「わ~い、ビルド簡単だな~♪」と勘違いしないように。
あとは、index.htmlとmain.jsとmain.rsと、styles.cssと、tauri.conf.jsonを、
ぐちょぐちょと改造していきます。
そして完成したら、このコマンドをやるんだけど、
npm run tauri build
tauri.conf.jsonの、identiferの中身を変えないとエラーになります。
しばらく時間かかったあとに、releaseフォルダの中に、肝心のブツが出来上がります。
インストーラーは、さらにbundleフォルダを探してみましょう。

Electronとの決定的な違い
Windowsのことは、Windowsで、macのことはmacで、LinuxのことはLinuxで。
tauriは、Electronと違って、OSが違うものをビルドできません。
でも、中には抜け道を作ってくれる人もいるようで。
抜け道については、こちらに書かれています(この方法はテストしていません)。
Rust GUI の決定版! Tauri を使ってクロスプラットフォームなデスクトップアプリを作ろう
 Chapter08 アプリをビルドして配布してみよう(Zenn)

Pythonをtauriで使う
PythonとtauriでGUIアプリを作る方法を調べていたら、
このページを見つけました。
how to use tauri app and python script as a back end(stack overflow)
https://stackoverflow.com/questions/75913627/how-to-use-tauri-app-and-python-script-as-a-back-end

内容は「tauri使うなら、JavaScriptかTypeScriptを使うべきだ!」という愚痴と、
「あえてやるのなら、方法は2つ」。
ということで、PyScriptというものを導入する方法と、
RustPythonを使って、Rustスクリプトを改造してバックエンドで動くようにする方法とあるそうです。
「で、思い通りに事が運ばない場合は、これは本当に理にかなっていることなのかを考えるべき」。
とも書かれています。
・・・JSかTSを使い倒すか、Rustでバックエンドを書くことを推奨しているっぽい。

そんなこんなで、こんなことを考えてみました。
「PythonでGUIを作って、それをRustPythonでコンパイルすれば良くね?」
やってみたら、外部モジュールを読み込まないのでだめでした。
ということは、外部モジュールを使ったPythonスクリプトをバックエンドで動かすのも、
たぶんだめですねきっと。
というわけで、2つ目の方法はだめ。
というわけで、1つ目の方法をやってみます。

Pythonを無理やり使うサンプル作ってみた
やることは、HTMLとJavaScriptの改造がメインなので、
慣れていないとものすごく苦労するかもしれませんが、
ここではJavaScriptの知識はほぼ使いません。
ここはPyScriptというものを使います。

入手先は、
使い方は、こちらのほうが詳しいかもしれません。
PyScript Webブラウザ上(HTML内)でPython実行(みやしんのプログラムスキル通信)
https://miyashinblog.com/pyscript/
WebブラウザでPythonが動作する!PyScriptの詳解(gihyo.jp)
https://gihyo.jp/article/2023/04/monthly-python-2304

「index.html」

<!DOCTYPE html>
<html lang="ja">
    <head>
    <meta charset="UTF-8" />
    <link rel="stylesheet" href="styles.css" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Tauri App</title>
    <script type="module" src="/main.js" defer></script>
    <link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
    <script defer src="https://pyscript.net/latest/pyscript.js"></script>
    </head>

    <body>
        <py-script>
        import random
        def botan():
            pyscript.write("raberu200","{0}+{1}={2}"\
            .format(random.randrange(10),random.randrange(10),random.randrange(1000000)))
        pyscript.write("raberu1","ボタン押して")

        </py-script>
        <div id="raberu1"></div>
        <input type="button" value="ぼたん" py-click="botan()">
        <div id="raberu200"></div>
    </body>
</html>

ボタンをクリックして、いかれた計算をすれば、それは正しい反応。
見た目はアレだけど、PythonでTkinter使うより早いし、
PyInstallerとかなんかよりも実行ファイルは小さいし、
いつもエラーを起こすようなアレと違って、まともにビルドしてくれるし、
使えるモジュール(ライブラリ)も、それなりにあるし、
そんなかんじです。

ビルドしたものがオフラインで使えるのか?
一度ビルドしてしまえば、
何とか動いてくれますが、
何も入れていないまっさらなパソコンでも動くかどうかの保証は、
ちょっと何とも言えないところがあります。
あとで詳しく調べてみます。
調べたら、ここに追記します。

Rustに興味を持ったら
こちらをどうぞ。
Rustの日本語ドキュメント/Japanese Docs for Rust
https://doc.rust-jp.rs/
PDF版もあります。Kindleとかに転送してどうぞ。
The Rust Programming Language 日本語版
https://doc.rust-jp.rs/book-ja-pdf/book.pdf



参考資料
【HTML入門】ボタンを使いこなして正しくリンクを作成してみよう!(SamuraiEngineerBlog)
https://sejuku.net/blog/82466