Tauri

Tauri v2 開発環境構築とファイル暗号化デスクトップアプリの作り方

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

開発環境の構築とバージョン確認

Tauri v2 アプリを作成するには、フロントエンド (Node.js) とバックエンド (Rust) がそれぞれ正しくインストールされていることが前提です。このセクションでは、OS を問わず共通で実施できるインストール手順と、インストール後に必ず確認すべきバージョン情報をまとめます。バージョンが期待通りであるかを確かめておくことで、テンプレート生成やビルド時の予期せぬエラーを未然に防げます。

Node.js と Rustup のインストール手順

  1. Node.js
  2. 公式サイト https://nodejs.org から LTS 系 (現在は v20 系) をダウンロードし、インストーラの指示に従ってインストールします。
  3. npm は Node と同梱されていますが、最新化しておくとトラブルが減ります。

bash
node -v # 例: v20.12.0
npm -v # 例: 10.5.0
npm install -g npm@latest # 任意で最新版に更新

  1. Rustup
  2. macOS / Linux はターミナル、Windows は PowerShell(管理者権限推奨)で以下を実行します。

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env # Linux/macOS のみ必要
rustc --version # 例: rustc 1.77.0 (2024‑07‑02)
cargo --version # 例: cargo 1.77.0

rustup がインストールされると、cargo(Rust のビルドツール)も自動的に利用可能になります。

Tauri CLI のインストールとバージョン確認

Tauri v2 用の CLI は tauri-cli パッケージとして提供されています。以下のコマンドでグローバルにインストールし、正しくインストールされたことを確認します。

インストールが完了したら、バージョン表示コマンドで tauri-cli が出力されるか確かめます(cargo tauri --version は誤りです)。

参考情報
Tauri の公式ドキュメント (https://v2.tauri.app) が常に最新のインストール手順を掲載しています。外部サイトの内容は執筆時点で確認できていないため、公式リファレンスを優先してください。


Tauri v2 プロジェクトの作成とディレクトリ構造

実務でテンプレートをすぐに利用できることは開発速度に直結します。このセクションでは create-tauri-app コマンドによってプロジェクト雛形を生成し、生成されたディレクトリの役割と主要ファイルを解説します。各フォルダが何を担当しているかを把握すれば、後続の実装作業がスムーズに進みます。

create-tauri-app によるプロジェクト雛形生成

以下のコマンドで最新のテンプレートを取得し、好きな名前のディレクトリに展開します。対話式の質問に答えるだけで、React・Vue・Svelte など任意のフロントエンドフレームワークが選択可能です。

ポイント
- my-encryptor は任意のプロジェクト名に置き換えてください。
- 初回実行時はテンプレートリストが表示されるので、ここでは「Vanilla TS(TypeScript)」を例として選択します。

ディレクトリ構造とそれぞれの役割

ディレクトリ 主な内容 実務で意識すべきポイント
src-tauri/ Rust エントリ (main.rs)・設定ファイル tauri.conf.json バックエンドロジック、プラグイン、ビルドフラッグはここに配置。
src/ フロントエンドの TypeScript / React コンポーネント UI ロジックと Tauri の invoke 呼び出しを実装する領域。
public/ 静的 HTML、CSS、アイコン等 WebView が最初に読み込むファイル群。index.html にバンドルされた JS をリンクします。

備考
tauri.conf.json の必須項目は公式ガイド(https://v2.tauri.app/reference/config/)を参照し、bundle.identifiersecurity.csp は少なくとも設定しておく必要があります。


コマンド実装と非同期処理

Tauri のコマンドシステムはフロントエンドから Rust 関数へ安全に橋渡しする仕組みです。この節では、同期コマンド非同期コマンド の実装例を示し、JSON でのデータ受け渡し方法も合わせて解説します。重い処理は UI スレッドをブロックしないよう async fn と Tokio を活用することがベストプラクティスです。

同期コマンドの基本形

フロントエンド(TypeScript)側からは invoke でシンプルに呼び出せます。

非同期コマンドの実装例

TypeScript 側は Promise として受け取ります。

JSON データのシリアライズ/デシリアライズ

任意の serde::Serialize / Deserialize を実装した型を引数・戻り値に指定できます。以下は設定オブジェクトをやり取りする例です。

フロントエンド側の型定義と呼び出しは次の通りです。

注意点
- エラーは Result<T, String> の形で返すと、invoke が自動的に例外として伝搬します。
- 非同期コマンドでは #[tauri::command] async fn … と書くだけで Tokio ランタイムが内部的に使用されます。


状態管理とデータベース連携

実務アプリでは、認証情報やユーザー設定など複数のコマンドから共有すべき状態があります。Tauri では tauri::State がシングルトンとして全ウィンドウに注入でき、内部に Arc<Mutex<T>> を保持することでスレッド安全な共有が実現します。本節では SQLiterusqlite を組み合わせた例を示し、状態構造体にデータベース接続フィールドを追加した完全な実装をご紹介します。

共有状態の定義と manage の呼び出し

カウンタ増加コマンド(状態共有のシンプル例)

SQLite 初期化と CRUD 実装

Cargo.toml に依存を追加します。

DB 初期化コマンド

ノート追加コマンド

ノート取得コマンド(例示的にベクタで返す)

ポイント
- Arc<Mutex<AppState>> を使うことで、複数ウィンドウや非同期コマンドから同時に状態へアクセスできます。
- SQLite の接続はスレッドセーフではないため、ここでは Connection をクローンして使用しています(rusqlite::Connection は内部で Arc<Mutex<_>> を保持)。実際のプロダクトではプールライブラリを導入することも検討してください。


ファイル暗号化ツール実装とクロスプラットフォームビルド

本稿の中心サンプルは「AES‑GCM によるファイル暗号化/復号」です。Rust 側で非同期 I/O と暗号化ロジックを実装し、フロントエンドからはファイル選択 UI と invoke 呼び出しだけで完結します。最後に Windows・macOS・Linux 向けのビルド手順と、各プラットフォーム固有の注意点をまとめます。

依存クレートの追加

非同期暗号化コマンド

非同期復号コマンド

フロントエンドからの呼び出し例(React + TypeScript)

クロスプラットフォームビルド手順

  1. ターゲットの追加(各 OS 用に Rust のコンパイル対象をインストール)

bash
# Windows (x86_64)
rustup target add x86_64-pc-windows-msvc

# macOS Intel / Apple Silicon
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin

# Linux (glibc)
rustup target add x86_64-unknown-linux-gnu

  1. ビルドコマンド(例:macOS Apple Silicon 用)

bash
cargo tauri build --target aarch64-apple-darwin

他のプラットフォームは --target に対応するトリップレットを指定すれば同様にビルドできます。

  1. コードサイニング(配布時に推奨)

  2. Windowssigntool.exe で Authenticode 署名。自己署名証明書でもテストは可能です。

  3. macOS:Apple Developer ID の codesign、続いて Notarization(Apple にアップロード)。
  4. Linux:AppImage を作成する場合は GPG で署名し、配布ページに公開鍵を添付します。

  5. インストーラ生成

Tauri が自動で以下の形式を生成します。tauri.conf.json > bundle に設定した情報がそのまま反映されます。

  • Windows → NSIS (*.exe)
  • macOS → DMG (*.dmg)
  • Linux → AppImage / DEB / RPM

ビルド後の成果物は src-tauri/target/release/bundle/* に格納されています。

公式情報
Tauri のビルド・サイニングに関する最新ガイドは公式サイト https://v2.tauri.app/guides/building/ を参照してください。外部ブログの内容は執筆時点で確認できていないため、公式リファレンスを優先しています。


まとめ

  • 開発環境:Node ≥ 18、Rustup、cargo install tauri-cli --features=v2 を行い、tauri-cli --version が期待通り表示されることを確認します。
  • プロジェクト生成npm create tauri-app@latest <project> でテンプレートを作成し、src-tauri とフロントエンドディレクトリの役割を把握しておきましょう。
  • コマンド実装#[tauri::command] による同期・非同期関数を用意し、JSON でデータ受け渡しできることを確認します。重い処理は async fn と Tokio の非同期 I/O を活用して UI フリーズを防ぎます。
  • 状態管理 & DBtauri::State<'_, SharedState>Arc<Mutex<AppState>> を注入し、rusqlite で SQLite 接続を保持・CRUD できる実装例を示しました。エラーハンドリングは Result<T, String> でフロントへ伝搬させます。
  • ファイル暗号化ツール:AES‑GCM (aes-gcm クレート) と非同期 I/O により、大容量ファイルでもスムーズに暗号化/復号が可能です。フロントエンドはシンプルなファイル選択 UI と invoke のみで完結します。
  • クロスプラットフォームビルド:各 OS 用ターゲットを rustup target add し、cargo tauri build --target … でバイナリ・インストーラを生成。コードサイニングとパッケージングのベストプラクティスに従うことで、エンドユーザーに信頼性の高い配布物が提供できます。

以上の手順とサンプルコードをそのままプロジェクトに組み込めば、Tauri v2 と Rust を活用した実務レベルのデスクトップアプリがすぐに構築可能です。ぜひリポジトリをクローンし、ローカルで動かしながら独自機能や UI のカスタマイズに挑戦してみてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Tauri