12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tauriでデスクトップアプリを作ってみた

Posted at

こんにちは。また久しぶりに投稿させていただきます。
だいぶ前にGodotの開発について投稿していたが、あれ以来イラストに詰まってあまり進んでなくてね…
Stable Diffusionを活用してイラストを作ろうと思うので、何か出来たらまた投稿する。
さて、今回はTauriについて話をしよう。

どんなデスクトップアプリ

仕事であらゆる案件を担当して、昔から案件の資料をどう管理するか悩んでいた。
Notionを使おうとも考えていたが、「データはクラウドまで上げられるからNG」と上司に言われて断念した。
その後、Notionと似ていたOSSを見つけて、使い始めたが、このOSSの開発チームはクラウドサービスを提供しているために、ローカルで保存されているデータも暗号化をかけている。そして、バージョンアップでデータが復旧できなくなり、私の大事な資料がローカルで保存されているものの、見えなくなってきた。
あの時はショックを受けて、「いっそ自分でNotionみたいなやつをつくろう」と思い切った。
それは半年前のことでした。

なぜTauri

READMEには書いてあるので、ここで同じことを書くね。
ローカルで暗号化・圧縮をせず、ありのまま保存されている資料を読み取って、一元管理のアプリが欲しい。そしてできるだけ軽いやつが良い。左記の方針でいくつかフレームワークを調べてみた。

  • Electron:有名なFWだったが、重い。Chromiumなんかいらんわ
  • Flutter:バックエンドはさておき、フロントエンドも新しい言語を勉強しては負担が大きい。そもそも私はフロントエンドにそんなに興味を持っていない。Reactでできたらそれで良い
  • Wails:これを聞いていた時点で本プロジェクトがすでに始まった…
  • Tauri:軽くて簡単。そしてRustを勉強するチャンス

というわけで、Tauriを選んでた。

プロジェクトの立ち上げに

Tauriの公式サイトを見ながらプロジェクトを作った。特に問題はなかった。

ファイル構成

Root
├ src:フロントエンド。どこでも見れるViteで立ち上げたReact
├ src-tauri:バックエンド
│├ capabilities:アプリの権限配置。windowのタイトルを変更できるかなどはここで設定
│├ src:Rustソースファイル
│├ target:デバッグファイル。開発とともに膨大化するので定期的にクリアして良い
│├ Cargo.toml:Rustのライブラリー管理
│└ tauri.conf.json:アプリの基本配置。中身を見たらわかるだろう
├ package.json:Tauri(Nodejs)のライブラリー管理
├ tsconfig.json:TypeScriptの基本配置
└ vite.config.ts:Viteの基本配置

ライブラリー利用

フロントエンド

  • react-dnd-treeview:ファイルツリー用。Tauriのdndと競合しているので、tauri.conf.jsonでTauriのdndを無効にしないと動けない
  • MUI:紹介するまでもないだろう
  • dayjs:日付&時刻解析用。今は未使用
  • i18next:i18n用。機能が強いわりに実装が簡単
  • react-markdown:markdownレンダー用
  • remark-gfm:同じくmarkdownレンダー用
  • react-syntax-highlighter:markdownソースコードレンダー用
  • zustand:Hook化状態管理。神

バックエンド

  • uuid:ファイル&フォルダー(ノードと呼ばれる)のidを作成用。v4のみ使っている
  • trash:ノードを削除する時、ゴミ箱に入れる用
  • regex:正規表現(こいつはRustのstdに入れてないのは意外だった)

感想

「Tauriのバグが多くて最悪」

と聞いていたが私のアプリが簡単のせいか、バグとかは特になかった。
ただ、公式資料が少なすぎて「これどうすれば?」と思っていた時が多かった。特にバックエンドのほう。
実際にできたアプリは、サイズが20MB程度で、メモリー使用は~200MB程度です。私は満足している。

「Rustは難しくて醜い」

まぁ、難しさは否定しない。最初は練習としてコンパイルエラーのないコードを書くだけでかなりの手間がかかっていた。
その後GitHub Copilotに書いてもらったコードをしっかり読んで、隅々まで理解してきたら、だいぶ楽になってきた。
Rustはメモリーリーク防止と型安全性に結構工夫している。慣れたら苦労せずにRustを書ける。そして厳しい型安全性が確保されているうえで、ソースコード全体をしっかり把握しているのは気持ちいいです。

レポジトリ

12
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?