CapacitorでカスタムSQLite拡張機能を使用する方法
標準的なSQLiteはほとんどのタスクに対応できますが、時にはそれ以上の機能が必要になることがあります。
特定の言語向けのカスタムトークナイザーが必要な場合や、カスタム数学関数、あるいは特殊なテキスト処理が必要な場合があります。これらは「ロード可能な拡張機能(loadable extensions)」と呼ばれます。
Capacitor SQLiteプラグインは、AndroidとiOSでこれらをサポートしています。
なぜ拡張機能を使用するのか?
- カスタムFTS5トークナイザー:検索時のテキスト分割方法を制御できます。
- カスタムSQL関数:データに近い場所で複雑なロジックを実行できます。
実装方法はプラットフォームによって異なります。
Android
AndroidシステムのSQLiteは、拡張機能を直接ロードすることをサポートしていません。requeryバックエンドを使用する必要があります。
variables.gradleファイルでrequeryオプションを有効にします。build.gradleファイルにJitPackリポジトリを追加します。- Cコードを各CPUアーキテクチャ用のネイティブライブラリ(
.soファイル)にコンパイルします。 - これらのファイルを
jniLibsフォルダに配置します。 - データベースを開く際に
androidExtensionsオプションを使用します。
iOS
iOSアプリは実行時に動的ライブラリをロードできません。拡張機能を静的にリンクする必要があります。
- CソースファイルをXcodeプロジェクトに追加します。
- そのファイルに対して
-DSQLITE_COREコンパイラフラグを設定します。 - ブリッジングヘッダーで初期化関数(init function)を宣言します。
sqlite3_auto_extensionを使用して、AppDelegateで拡張機能を登録します。
拡張機能のCコード自体は変わりません。ビルドと登録の手順のみが異なります。
ロードされると、カスタム拡張機能はSQLiteの組み込み機能と同じように動作します。新しいトークナイザーや関数を、すぐにSQLステートメントで使用できます。
カスタム拡張機能を使用することで、モバイルデータベース内でネイティブコードのパワーを活用できます。
出典: https://dev.to/capawesome/how-to-use-custom-sqlite-extensions-in-capacitor-l5k