スポンサーリンク

TAURI tauri-plugin-sqlでマイグレーション機能を使ってDBのTABLEを作成する方法

スポンサーリンク

tauri-plugin-sqlはsqlxを介してsqlite, mysql, postgresドライバをサポートするTauriプラグインインターフェースを提供するRustライブラリです。今回はtauri-plugin-sqlのマイグレーション機能を使ってDBのTABLEを作成する方法を紹介します。

インストール

githubのREADME.mdを参考にtauri-plugin-sqlプラグインをインストールしてください。注意点としては、事前にgitをインストールしておく必要があります。

plugins-workspace/plugins/sql at v1 · tauri-apps/plugins-workspace
All of the official Tauri plugins in one place! Contribute to tauri-apps/plugins-workspace development by creating an ac...

CREATE TABLE文の準備

src-tauriフォルダの直下にmigrationsフォルダを作成し、実行したいSQLファイルを用意します。

migrationの登録

main.rsにマイグレーションに指定するsqlを指定します。

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet])
        // プラグイン登録
        .plugin(
            tauri_plugin_sql::Builder::default()
                .add_migrations(
                    "sqlite:migrate-app.db",  // (1)
                    vec![tauri_plugin_sql::Migration {
                        version: 1,
                        description: "create table",
                        sql: include_str!("../migrations/ver1.sql"),  // (2)
                        kind: tauri_plugin_sql::MigrationKind::Up,
                    }],
                )
                .build(), 
        )
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

(1) 使用するDBを指定します。例はsqliteを使用しています。

(2) 実行するsqlを指定します。

SQLの実行タイミング

add_migrationsメソッドではマイグレーション用のsqlを登録するだけで、このタイミングではsqlは実行されません。Databaseをloadしたタイミングで実行されます。JavaScript側で実行する場合は

import Database from "tauri-plugin-sql-api";

// sqlite. The path is relative to `tauri::api::path::BaseDirectory::App`.
const db = await Database.load("sqlite:test.db");

のタイミングで実行されます。
実行した結果、TODOテーブルが登録されるのが確認できます。_sqlx_migrationsテーブルはマイグレーションを管理する為に自動で作成されるテーブルです。

複数指定する場合

バージョンアップなどで、追加のsqlを実行したい場合は、migrationsフォルダにsqlファイルを追加して、main.rsに追加したsqlファイルを指定します。

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet])
        // プラグイン登録
        .plugin(
            tauri_plugin_sql::Builder::default()
                .add_migrations(
                    "sqlite:migrate-app.db",
                    vec![
                        tauri_plugin_sql::Migration {
                            version: 1,
                            description: "create table",
                            sql: include_str!("../migrations/ver1.sql"),
                            kind: tauri_plugin_sql::MigrationKind::Up,
                        },
                        tauri_plugin_sql::Migration {
                            version: 2,
                            description: "create table fro ver2",
                            sql: include_str!("../migrations/ver2.sql"),
                            kind: tauri_plugin_sql::MigrationKind::Up,
                        },
                    ],
                )
                .build(),
        )
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

コメント

  1. ktat より:

    main.ts と書かれているのは、main.rs の間違いかと思います。
    修正されたらコメントは削除して頂いて結構です。