SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

SQLiteデータベースがWebアプリでも使える!
~Uno Platformクロスプラットフォーム開発の可能性を探る

UWPアプリ開発の最前線 第16回

Uno PlatformでSQLiteを使う

NuGetパッケージ

 SQLite APIを使いたいプロジェクトにMicrosoft.EntityFrameworkCore.Sqliteを導入します。サンプルアプリでは、DBアクセスのコードを「SQLiteSample」という名前の.NET Standard Libraryプロジェクトに集めてあるので、SQLiteSampleプロジェクトだけに導入しています(次の画像)。

サンプルアプリに導入したEntity Framework Core
サンプルアプリに導入したEntity Framework Core

 ただし、Entity Framework Coreの最新バージョンである3.xは、.NET Core 3用です。本稿執筆時点では、UWPは.NET Core 3には対応していないので、Entity Framework Coreは2.xを使います。このサンプルアプリでは、後述するUno.SQLitePCLRaw.provider.wasmのリリース時期に合わせて、Entity Framework Coreは2.13を使っています。

 そして、WebASMのプロジェクトには、Uno.SQLitePCLRaw.provider.wasmUno.sqlite-wasmも導入します(次の画像)。これらが、WebブラウザーのIndexedDBを利用してSQLiteのAPIを提供してくれます。ご覧の通り、これらはプレリリース版です。ステーブルリリースでは仕様変更があるかもしれません。

サンプルアプリに導入したUno.SQLitePCLRaw.provider.wasmとUno.sqlite-wasm
サンプルアプリに導入したUno.SQLitePCLRaw.provider.wasmとUno.sqlite-wasm

WebASMでの追加コード

 WebASMプロジェクトでは、プログラム開始時にWebASM用のSQLiteプロバイダーをインスタンス化してセットしておきます。具体的には、次のコードのように太字にした行を追加します。

WebASMでSQLiteを使う(.WasmプロジェクトのProgram.cs
static void Main(string[] args)
{
  SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_WebAssembly());

  Windows.UI.Xaml.Application.Start(_ => _app = new App());
}

 ここでSQLite3Provider_WebAssemblyクラスというのが、Uno.SQLitePCLRaw.provider.wasmパッケージで提供されている、WebASM用のSQLiteプロバイダーです。このコードの後は、普通にEntity Framework Coreを使ってSQLiteにアクセスするコードを書けます。

iOSでの追加コード

 iOSでは、SQLiteデータベースに接続する前に次のコードのように初期化メソッドを呼び出しておく必要があります。

iOSでSQLiteを使う(SQLiteSampleプロジェクトのArticleDatabase.cs内、InitForIOSメソッド)
SQLitePCL.Batteries.Init();

 ちなみに、こういったiOS/Androidに固有の話を調べるときは、Xamarin.Formsの情報が役に立ちます。前回で解説したように、Uno PlatformはXamarinを使ってiOS/Androidのアプリをビルドします。そのため、Xamarin.Formsの話はUno Platformでも通用することが多いのです。

接続文字列

 接続文字列はプラットフォームによって異なります。次のコードを見てください。

プラットフォームごとの接続文字列(SQLiteSampleプロジェクトのArticleContext.csより抜粋)
// 接続文字列(UWPとWebASM)
const string DbName = "uf16.db";
private static string _connectionString = $"data source={DbName}";

// 接続文字列(Android)
string dbPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Personal),
    DbName);
_connectionString = $"filename={dbPath}";

// 接続文字列(iOS)
string dbPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
    "..", "Library", DbName);
_connectionString = $"filename={dbPath}";

次のページ
SQLiteにアクセスするコードの例

関連リンク

この記事は参考になりましたか?

UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11840 2019/12/16 11:00

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー