キーバリューストア (KV Store) プラグインの導入と利用

Recipe ID: db-004

アプリの設定情報やウィンドウの位置情報など、データベースを使うほどではない軽量なデータを JSON ファイルとして保存・管理するための plugin-store の導入手順と使い方を解説します。

1. セットアップ

インストール手順

Rust 側と JavaScript 側の両方に依存関係を追加し、プラグインを初期化します。

1. コマンドで追加

Tauri の CLI を使用して追加します。

npm run tauri add store
補足: 手動でインストールする場合は src-tauri ディレクトリで cargo add tauri-plugin-store を実行してください。
2. プラグインの初期化 (Rust)

src-tauri/src/lib.rs でプラグインを登録します。

// src-tauri/src/lib.rs

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_store::Builder::default().build()) // ここに追加
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

権限設定 (Capabilities)

src-tauri/capabilities/default.json でストアへのアクセスを許可します。

{
  "permissions": [
    ...,
    "store:default"
  ]
}

2. ストアの使い方

Store クラスを使用して、データの読み書きを行います。データは指定したファイル名(例: settings.json)でアプリケーションのデータディレクトリに保存されます。

ストアの初期化

import { load } from '@tauri-apps/plugin-store';

// ストアの作成または読み込み
// 既に存在する場合はそのファイルをロードし、なければ新規作成します
const store = await load('settings.json', { autoSave: false, defaults: {} });

データの保存 (Set & Save)

データをセットしただけではメモリ上の変更にとどまります。永続化するには必ず save() を呼び出してください。

async function saveSettings() {
  // 値のセット
  await store.set('theme', 'dark');
  await store.set('window_size', { width: 800, height: 600 });
  
  // ファイルへの書き込み(必須)
  await store.save();
}

データの取得 (Get)

キーを指定してデータを取得します。ジェネリクスで型を指定可能です。

async function loadSettings() {
  const theme = await store.get<string>('theme');
  const size = await store.get<{ width: number, height: number }>('window_size');
  
  console.log(`Theme: ${theme}, Size: ${JSON.stringify(size)}`);
}

変更の監視 (Listen)

特定の値が変更されたときに処理を実行できます。

const unlisten = await store.onKeyChange('theme', (value) => {
  console.log('New theme:', value);
});

// 監視を終了する場合
// unlisten();