2024年11月、iwarerugamama-editor で Tauri + React + TypeScript のデスクトップエディタを試作した。Web の知識のまま、ネイティブアプリがどこまで作れるか試したかった回。

Tauri を選んだ理由

  • Electron より軽い(Rust バックエンド + WebView)
  • フロントは普段どおり React + Vite で書ける
  • ファイル読み書きみたいな OS 寄りの処理だけ Rust 側に投げられる

作ったもの

中身は Monaco エディタを載せたシンプルなテキストエディタ@monaco-editor/react を貼って、ファイルの open / save は Tauri 経由でやる構成にした。

  • @tauri-apps/plugin-dialogopen / save でファイル選択ダイアログ
  • Rust 側に read_file / save_file コマンドを置いて invoke で呼ぶ
  • 編集中かどうかを isDirty で持って、保存ボタンに * を出す
  • 30秒ごとの自動保存setInterval
  • 未保存のまま閉じようとしたら beforeunload で警告

フロントから invoke("save_file", { fileName, content }) でRust側に渡す、という JS ↔ Rust の往復が Tauri の肝で、ここさえ掴めば「ファイルを扱う Web アプリ」がそのままデスクトップアプリになる感覚だった。

学び

作ってみて分かったのは、デスクトップアプリは Web とは別の配布・更新フローが必要 だということ。署名やアップデータをちゃんとやろうとすると、Web みたいに「push したら反映」とはいかない。

個人開発なら まず Web 版を出して、本当に必要になったら Tauri で包む のが無難そう。逆に、ローカルファイルをガリガリ触るツールだと、最初から Tauri にした方が素直なケースもありそうだった。

おわり

init 1コミットで止まっている試作だけど、Tauri 2.0 で「Web の延長でネイティブが書ける」感触は掴めた。Monaco をそのまま載せられるのは強くて、自前のエディタ系ツールを作るときの選択肢として頭に置いておく。