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-dialogのopen/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 をそのまま載せられるのは強くて、自前のエディタ系ツールを作るときの選択肢として頭に置いておく。