SQLiteの正式なWebAssembly版「SQLite3 WASM/JS」が登場
SQLiteの公式Webサイトに、SQLite3をWebAssembly化した「SQLite3 WASM/JS」プロジェクトのページが公開されました。
これまでさまざまなWebAssembly版SQLiteの試みが行われてきたなかで、初めてSQLiteの正式なサブプロジェクトとして開発されるWebAssembly版SQLiteになります。
下記はドキュメント「About the sqlite3 WASM/JS Subproject」からの引用です。
this subproject is the first effort "officially" associated with the SQLite project, created with the goal of making WASM builds of the library first-class members of the family of supported SQLite deliverables.
このサブプロジェクトはSQLiteプロジェクトに「公式に」関連する最初の取り組みであり、WASM版はSQLiteの成果物としてサポートされる、本物のファミリーメンバーとすることを目標に開発されます。
つまり今後SQLite開発チームによってSQLiteのバグフィクスやバージョンアップが行われた場合、WASM版SQLiteも同様にバグフィクスやバージョンアップが期待できる、ということでしょう。
SQLite3 WASM/JSの開発目標。オフラインサポートも
公開されたドキュメントによると、SQLite3 WASM/JSの開発目標は以下だと説明されています。
- ネイティブに近い低レベルのsqlite3 API。
- sql.jsやnode.jsスタイルの実装に近い、低レベルAPIと直接対話する高レベルなObject Oriented API。このAPIは低レベルAPIと同じスレッドから使わなければならない。
- WorkerベースのAPI。Workerメッセージを介して前述のAPIと対話する。こちらはメインスレッドで使用することを想定しており、低レベルAPIはWorkerスレッドにインストールし、Workerメッセージを通じて対話する。Workerは非同期で単一のメッセージチャンネルしか持たないため、非同期の作業結果をクライアントにフィードバックするには、いくつかのアクロバティックなやり方が必要になる(メインスレッドとWorkerスレッドの間でコールバックを渡すだけではだめなため)。
- Promiseベースでの上記のWorker APIのバリエーション。ユーザーからクロススレッド通信の側面を完全に隠蔽する。
さらに、現時点で利用可能なJavaScriptAPIによるクライアントサイドでの永続的なストレージをサポートすることも目標として示されています。Origin-Private FileSystem (OPFS) 、window.localStorage、window.sessionStorageなどのAPIがこれに相当する模様です。
Webブラウザで利用可能なWebAssembly版SQLiteのような軽量なリレーショナルデータベースがオフラインでも利用可能になれば、いままでより高度なWebアプリケーションの開発が期待できます。
さらに将来クラウド上のデータベースと簡単に同期する、といった機能が備わるようになれば、さまざまな可能性が広がりそうです(そのようなアナウンスはされていませんが……)。
本家のSQLite開発チームの取り組みによるWebAssembly化
SQLite3 WASM/JSをソースコードからビルドする方法は「Building JS/WASM Bundles」のページで説明されていますが、基本的にはCで書かれたSQLite3のソースツリーからコード取得し、WebAssemblyコンパイラであるEmscriptenでコンパイルしてWebAssemblyバイナリを生成することになります。
SQLiteの公式Webサイトには、Webブラウザ上でSQLiteを試すことができる「SQLite3 Fiddle」のページが用意されていますが、このSQLite3 FiddleのページもSQLite3 WASM/JSのビルドから生成されると説明されています。
SQLiteのWebAssemlby化は、今年(2022年)9月にGoogleのChrome開発チームが、削除される予定のWeb SQL Database APIの代替機能としてSQLite開発チームと協力してWebAssembly版のSQLiteを開発するとのアナウンスをしたことで、本家のSQLite開発チームの取り組みによるWebAssembly化として注目度が高まっていました。
参考:Chrome開発チームがSQLiteチームとWebAssembly版SQLiteを開発中。Webブラウザ上からのファイル書き込みで永続化も可能。Web SQL APIの代替として
ただし調べてみると、「SQLite3 Fiddle」のWebページは2022年5月頃にはひっそりと公開が始まっていたようで(7月になってようやく公式サイトのトップページから「Try it live!」のリンクが張られたようです)、WebAssembly版の開発はそれ以前から進んでいたことが推測されます。
今回SQLite3 WASM/JSのWebページが公開されたのは、開発の進捗によりドキュメントが整備されてきたからなのかもしれません。
関連記事
あわせて読みたい
オラクル、OpenJDKに静的なネイティブイメージの生成機能を組み込む方針を明らかに。GraalVMのOpenJDKへのコントリビュートで
≪前の記事
OpenSSFによるコンテナなどへの電子署名サービス「Sigstore」が正式版に。オープンソースのサプライチェーンをさらに安全に