UbuntuのRustでTauriを使おうと思ったら手こずった話

タイトル通りです。Rustは動く前提で話を進めます。では解決した方法だけ先にドン。
20231119追記 Appimageが書き出せなかったので追記。

## 解決方法

それぞれ何を参考にしたかを下に載せてます

```
cargo install tauri-cli
```
↑ https://tauri.app/v1/guides/getting-started/setup/vite/#create-the-rust-project を参考にしました。

```
sudo apt install libsoup2.4-dev
```

```
sudo apt-get install javascriptcoregtk-4.1 libsoup-3.0 webkit2gtk-4.1 -y
```

↑ https://github.com/tauri-apps/tauri/issues/3701 にあったものを参考にさせていただきました。

追記20240115 環境構築し直したら"webkit2gtk-4.1" が "libwebkit2gtk-4.0-dev"になってました。webkit2gtk-4.1が無かったらsearchコマンドとかでwebkit2gtk*を探してやってください。

```
sudo apt-get install libjavascriptcoregtk-4.0-dev
```
↑ **BingのAIくん**に教えてもらいました。

```
sudo apt-get install libssl-dev
```

↑これはいらない気がする

```
sudo apt install libwebkit2gtk-4.0-dev
```

↑自力で探しました。

```
sudo apt install build-essential
```
↑gccとかしか入れてないならいるかも  
  
  
#### 追記:AppImageが書き出せないときの対処

```
rm src-tauri/target
```

場合によっては
```
sudo apt-get install librsvg2-dev
```
↑ https://github.com/tauri-apps/tauri/issues/3278 より
## 環境

- (ほぼKubuntuの)Ubuntu 22.04.3 LTS & Windows 11(バージョンわすれた)
- Visual Studio Code
- Rust 1.73.0

## 背景

rustでもGUI作れるのかーと思い、Tauriを使ってみようと思ったのです。で、早速サンプルを動かそうとしました。tauriはパッケージの管理方法をnpmとかyarnとかから選べるわけですが、cargoにするとフレームワークが使えません...
が、僕はフレームワークなんて言うのはjQueryすら知らない系の人間なので「Cargoでいっかー」と思ってcargoを選んだのです。まあcargo選んでる日本語サイトありませんでしたが...。で、`cargo tauri dev`してみるとどうでしょう。
動きません。そもそもサンプルが動かせません。これがcargoにしたためか他の原因があるのかわからなかったので、とりあえずcargoで動かす方法を探してみました。

## エラーたち

### tauriがない

まず出てきたのはこいつです。

```
cargo tauri dev error: no such command: `tauri`
```

えぇ？！tauriがないって？！って思いました。サンプルプロジェクトの作成に使ったはず...と思ったら、インストールしていたのは`cargo install create-tauri-app`で、`create-tauri-app`でした。cliツールとかじゃなくて雛形の作成マンでした。

```
cargo install tauri-cli
```
で解決。

### libsoupとか各種Cライブラリがない

Cライブラリを要求してきました。githubで同じことで躓いていた方がいたのでそれを参考にして解決。

```
sudo apt install libsoup2.4-dev
```
と
```
sudo apt-get install javascriptcoregtk-4.1 libsoup-3.0 webkit2gtk-4.1 -y
```
を入れたら...解決してませんでした。

```
error: failed to run custom build command for webkit2gtk-sys v0.18.0
```

が出現。あれ？でもさっき確かに「webkit2gtk-4.1」をインストールしましたよね？devが後ろについてるパッケージもいるのか？と思い、`sudo apt search webkit2gtk-4.0`をしてみると...

```
$ sudo apt search webkit2gtk-4.0
Sorting... Done
Full Text Search... Done
libwebkit2gtk-4.0-37/jammy-updates,jammy-security,now 2.42.1-0ubuntu0.22.04.1 amd64 [installed]
  Web content engine library for GTK

libwebkit2gtk-4.0-dev/jammy-updates,jammy-security 2.42.1-0ubuntu0.22.04.1 amd64
  Web content engine library for GTK - development files
```

ビンゴでした。で、早速

```
sudo apt install libwebkit2gtk-4.0-dev
```

をしてから、`cargo tauri dev`を実行したら
![Screenshot_20231113_215036.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3530797/ec70e0c6-3f7e-8574-65db-24c2f470610f.png)

動いてくれました。ここまで10分くらいしかかかってないのでラッキーでハッピーです。

## ビルドしてみる

せっかくなのでリリース向けのビルドしてみることに。`cargo tauri build`でできます...
が、サンプルプロジェクトの場合は`/src-tauri/tauri.conf.json`をいじらなくてはビルドができないようになっています。

```
Error You must change the bundle identifier in `tauri.conf.json > tauri > bundle > identifier`. The default value `com.tauri.dev` is not allowed as it must be unique across applications.
```

単純にjson内のbundleからidentifierを適当に変えます。今回はtestにしてみました。
そしてもう一度 `cargo tauri build` をすればビルドできます。
なんか `Error failed to bundle project: error running appimage.sh`とか言う苦情が出ますが無視です。これにてビルドもできました。

これはちょっとした雑談なのですが、rustの諸々の便利さはいい意味でイカれてますよね。今回もリリース用のビルドが`cargo tauri build`だけでできるのはもちろん、クロスコンパイルの性能とかもイカれてます。`rustup target list`から一覧を確認できますが、linuxからwindowsにビルドができるだけでも最高です。
tauriでも、`cargo tauri build -t x86_64-pc-windows-gnu`でできます。

少し前に僕は「linuxからwinにGUIアプリ作りてー」という適当な理由でCとGTKを使って試したことがありますが、一日stack overflowをさまよって、結局出来ませんでした。あの日の自分にこのことを教えてやりたい。

## 追記 AppImageが書き出せない

debやexeなら書き出しができるのに、何故かAppImageだけ
`
Error failed to bundle project: error running appimage.sh
`
というエラーが出て使えませんでした。
結論から言うと書き出したものが溜まってると書き出せないことがあるみたいです。

```
rm src-tauri/target
```
消し方は何でも構わないので消してやりましょう。cliから消すときは自分がどこにいるかお忘れなく。

また、場合によってはこれをインストールする必要があるようです。
```
sudo apt-get install librsvg2-dev
```

## 結論

Rustは便利で楽しくていいぜ...

## 参考記事一覧
それぞれの解決法を提供してくださってる方に感謝します。

https://tauri.app/v1/guides/getting-started/setup/vite/#create-the-rust-project

https://github.com/tauri-apps/tauri/issues/3701

https://github.com/tauri-apps/tauri/issues/3278