HTML5の標準化で表面化したSQLの非互換性問題
HTML5の仕様として検討され、先日独立した仕様となったWeb Storageですが、仕様を策定するにあたりSQLの互換性が問題になっています。
Web Storageは、Webブラウザ上にデータベースを実装し、Webアプリケーションからデータベースへアクセスできるようにする、という仕様です。名前/値のペアのシンプルなデータ形式だけでなく、アプリケーションがSQLを発行して直接データベース操作する方法も提供しようとしています。
しかしデータベースをかじった人であれば誰でもご存じのように、SQLが標準化されているというのはあくまで名目上のことです。実質的には製品ごとにSQLの方言があり、実装レベルもまちまちで互換性はありません。そのため、ある製品で動作したSQL文がそのままほかの製品で動くことは期待できません。
現在のところ、Web Storageの先行実装としてグーグルが開発したGears、アドビのAIR、Safariなどがあり、データベースにはすべてSQLiteを用いています。
しかし今後ほかのデータベース、例えばオープンソースのFirebirdなどを用いたWeb Storageの実装が登場した場合、SQLiteの実装を前提にして動作していたWebアプリケーションが動作しなくなる可能性があります。
だからといって、Web Storageを、SQLiteという特定の実装を前提にした仕様にするわけにもいきません。
そのため、現在Web Storgeのワーキンググループでは、Web StorageのAPIでSQLを用いるのが望ましいことなのかどうか議論しているとのことです。5月9日現在のWeb Storageのエディターズドラフト 第4章 Structured storageにはこう記述されています。
The working group is currently debating whether SQL is the right abstraction for this API.
Mozilla CorporationのVladimir Vukićević氏が、ブログ「HTML5 Web Storage and SQL」でこの問題を指摘しています。
Vukićević氏は、SQLiteの特定のバージョンを前提にした仕様は「ひどいもの」だとしています。
Because there are no guarantees that SQLite won't make any incompatible changes. For example, a future SQLite 4 may introduce some changes or some new syntax which wouldn't be supported by earlier versions.
なぜなら、SQLiteが今後のバージョンで過去のバージョンと互換性を持たせるかどうか保証していないからだ。例えば、将来のバージョンであるSQLite 4では、過去のバージョンと互換性のない新しいシンタックスへの変更があるかもしれない。
この問題を解決するには、Webアプリケーションのデベロッパは何を必要としているのか? という問題に立ち返って考えることが必要だというのがVukićević氏の意見。
Instead of all of this, I think it's worth stepping back and consider exactly what functionality web developers actually want.
続いてjLinqや、CouchDB、Persevereなどの名前を挙げて、オブジェクト指向データベースの方が、この問題をよりよく解決できるのではないか? と提案しています。
SQL文のサブセットを細かく定義するといった手法では、この問題は解決しないだろうと僕も思います。では、提案されているようなオブジェクトデータベースで解決できるのかどうかというと、そこは詳しくないので分からないのですが、JavaScriptのオブジェクトとうまくマッピングして操作するといった手法を使えば、SQLよりも互換性の問題をうまく解決できるような気がします。
こうした複雑な部分をHTML5の仕様から分離した点は正解だと思いますが、Web Storageの仕様と実装はまだまだ時間がかかりそうですね。
関連記事 on Publickey
- いま起きているWeb標準の進化、HTML5、CSS3、JavaScript 2.0
- 10年ぶりにJavaScriptがついにバージョンアップへ、年内承認の見通し
- HTML 5でセマンティックWebが進むと困る人たち
- Firefox 3.5とプラットフォーム化するWebブラウザ