IndexedDBとは

1 min読了の目安(約1300字TECH技術記事

はじめに

こんにちは。高校2年の樅山です。
2020/11 から始まった、ものづくりをする高校生のための新しい団体、Palettteが主催する Palettte Advent Calendar 2020 の3日目の記事となります。

本記事では、Web APIの1つである、IndexedDB APIについて解説していきます。

IndexedDB API

IndexedDB APIとは、クライアントサイド(= Webブラウザ)内にデータを永続的に保存できる Indexed DataBase を扱うためのAPIです。

Web Storageと何が違うのかと疑問に思われるかもしれませんが、Web Storageでは構造化されていない、小さなデータしか扱うことができませんでした。
しかし、Progressive Web Apps (PWA) のように、ネットワークが切断されている状況でもまるでネイティブアプリケーションかのように振る舞うWebアプリケーションを開発するためには、構造化された巨大なデータを保存できる仕組みが必要になります。

本APIはそのような需要に対応した、オブジェクト指向型データベースです。

特徴

  • Web Storageなどと同様に、Key-Value型のデータベースです。
  • IndexedDBは、非同期に実行されます。
  • IndexedDBに登録できるデータの容量は動的に変化します。FireFoxでは、コンピュータのストレージの最大50%を、ブラウザストレージに割り当てます。

用語

IndexedDBを扱う上で必要な用語があります。

オブジェクトストア

データベースにデータを保存する仕組みのことで、キーと値のペアを昇順に整列させて保持しています。

データベース

1つ以上のオブジェクトストアで構成された情報の集合体で、それぞれのデータベースは識別用のデータベース名とバージョンを保持しています。

トランザクション

データにアクセスしたり、データを変更したりする操作そのもののことを指します。
データベース内のデータとは、トランザクションを通して対話することができます。

永続性

やや保証が緩和された永続性を持っています。ほとんどのユースケースで永続性に問題はありませんが、OSのクラッシュや電源断が発生すると、トランザクション全体を失ってしまうことがあります。

リクエスト

データベースの読み書きを行う操作そのものを指します。
全ての1つのリクエストは、1回の読み取りか、書き込みを行います。

終わりに

かなり有用なAPIで、100MB程度を確保できればネイティブアプリケーションを置き換えていくことも不可能ではないのかなと思いました。
Nimでの実装例を示したかったのですが、window.indexedDBというオブジェクトがラップされていなかったのでひとまず断念しました。テストが終わったらNim本体に提案してみます。