📚

SQLite Cloud をつかってみる

2024/04/19に公開

SQLite Cloud ベータ版をつかってみる

クラウドで利用できるデータベースを探していたところ SQLite Cloud というサービスを発見しました。なんとなく使い勝手が良さそうですが、現在ベータ版のみの公開で、それも招待制になっています。検索でも公式情報以外ヒットしないので、公式ドキュメントを読み解きつつベータ版に入門してみます。

前提

  • 公式ドキュメントを読み解くだけ
  • SQLite はインストール済みとする
  • SQlite の操作方法や SQL には触れない

SQLite Cloud とは

公式情報は以下の通りです。基本的にはこれらに記載されている情報を読みつつ最低限の機能だけ使ってみる、というコンセプトです。

ブログを見てみると最初の記事が2023年3月16日なので、この記事の執筆時点でまだ 1 年ちょっとの新しいサービス(ベータ版)であることがわかります。この記事によると SQLite Cloud は SQLite データベースをクラウド上に保存し、アクセスできるようにするサービスということです。やっぱり使い勝手良さそう!この記事の執筆時点ではまだクローズドベータテストの段階なので、アカウントを登録すると wait list に登録され、招待を待つことになります。

特徴

  1. Easy access: Web ベースのインターフェースや API でどこからでもデータベースにアクセス可能
  2. Backup & disaster recovery: バックアップとリカバリ機能があるのでデータを安全かつセキュアに保存できる
  3. Scalability: 高い拡張性のある設計になっているためニーズに応じて容量の追加・削除が可能
  4. Cost-effective: 料金プランが様々なので費用対効果が高い

開発

SQLite Cloud, Inc. という会社が運営していますが、OSS として開発されており Slack で誰でもコミュニケーション・開発に参加できるようになっています(メンバーが 20 名ほどだったので登録はしませんでした)。主に SQLite の開発コミュニティのメンバーが直接参加しているようです。

SDK

SDK が用意されている言語は以下のとおり。

  • Web(scriptタグ)
  • Swift
  • C/C++
  • Python
  • Kotlin
  • Go
  • PHP
  • JavaScript/Node.js

料金体系

現時点では無料で使えていますが、今後アナウンスされるということです。おそらく正式にリリースされる段階でいくつかのプランが発表されるものと思われます。

アカウントの登録とプロジェクトの作成

wait list に登録してから 20 日ほど経ってからメールで招待が届きました。早速アカウントの登録をしていきます。メールに記載されていた URL からダッシュボードにアクセスするといきなり以下のようなプロジェクト登録画面になります。

img1

アカウントの作成とプロジェクトの作成はセットのようです。Admin namePassword は隠していますがそれ以外はデフォルトのままで作成します。Region には Tokyo を選ぶことができるので、今回はそこだけ変更して Deploy ボタンでプロジェクトの作成完了です。プロジェクトを作成すると Nodes というものが作られその情報が表示されます。サイドメニューには DatabaseConsole などいくつかの項目が見えています。

img2

ダッシュボード

まずはどのような機能があるのか確認していきます。ドキュメントにも Node やクラスタという単語があることから、SQLite Cloud ではデータベースをクラスタで構成する方式を採用しているということがうかがえます。プロジェクト作成時に 1 つの Node とクラスタが作成されているみたいです。Node の情報をみてみると割り当てられたハードウェアのスペック情報などが表示されています。

サイドメニューの Database という項目をみてみます。サンプルとして chinook.sqlite というデータベースが作成されています。これがデータベースの実態です。サイドメニューに Tables という項目が出たのでこれをみてみるとデータベース内にあるテーブルのフィールドが表示されます。

Console では直接 SQL をたたいてテーブルの操作などができます。以下の画像ではデフォルトのデータベースである chinoon.sqlite というデータベースを選択して、artist テーブルに対して全件表示のクエリを投げています。このコンソールは Weblite という機能らしいです。

img3

ダッシュボードから直にクエリをたたけるのはちょっぴりうれしい機能です。それ以外はセキュリティや詳細設定なので割愛します。

データベースをアップロードする

デフォルトのデータベースではなく自分で作成したデータベースをアップロードしてみます。おそらくこれが SQLite Cloud の真骨頂です。ご存じ SQLite はデータベースをファイルとして管理し、アプリケーションに直接組み込むことができるため、この DB ファイルをアップロードするだけでクラウドにデータが格納できるのです。

  • SQLite でローカルに適当なDBを作成
    • 今回は wine.db というDBファイル(最近ワインにはまっただけで深い意味はありません)
  • SQLite Cloud > Database のページを開く
  • アップロードアイコンをクリック

img4

  • wine.db ファイルを選択
  • データベースの名前の確認をされるのでそのまま Upload

img5

  • データベースがそのままアップロードされて増えている

img6

ローカルで作成した SQLite の .db ファイルをアップロードするだけでクラウドにデータベースが作成されました。なんて簡単!ちなみにデータベースの表の一番右にメニューがあって「ダウンロード」もできるようになっています。すごい!

データを確認する

コンソールからクエリをたたいてデータを確認してみます。

img7

本当にあまりにも簡単すぎてびっくりします。個人で開発する機会が多く、SQLite はヘビーユーザなので感動です。というか、クラウドサービスのデータベースで RDB を使いたい人は多いと思うので十分選択肢に入ると思います。

プログラムからDBにアクセス

アップロードはできたので、プログラムからアクセスしてデータを取得してみます。公式サイトのトップページにある SDK 一覧にはいくつかの主要言語が挙げられていたのですが、公式ドキュメントのSDKページを見てみると

  • C/C++
  • PHP
  • GO
  • JavaScript

のチュートリアルしか見当たりません。ほかの言語の SDK に関してはまだ開発中で、このあと対応予定ということみたいですね。本当は Python で使いたかったのですが、待つしかなさそうです。ということで今回は JavaScript (nodejs) でアクセスしてみます。

  • 任意のフォルダで npm install @sqlitecloud/drivers
  • sqlite-cloud.js を作成
    • ドキュメントのソースコードに手を加えてテーブル内のデータをすべて表示する
    • new Database でインスタンスを生成する際に指定する URL は「SQLite Cloud ダッシュボード > プロジェクト名の下 > UID」
      • 自分の情報に置き換える
  • package.json"type": Module を追記
import { Database } from '@sqlitecloud/drivers'

let database = new Database('sqlitecloud://user:password@xxx.sqlite.cloud:8860/wine.db')

let results = await database.sql`SELECT * FROM wine`;

console.log(results);
  • node sqlite-cloud.js で実行

img8

データの取得に成功!せっかくなのでデータの追加もやってみます。日本産のワインを追加したうえで、WHERE句を使って日本産ワインだけ抽出します。

  • sqlite-cloud.js を編集
import { Database } from '@sqlitecloud/drivers'

let database = new Database('sqlitecloud://user:password@xxx.sqlite.cloud:8860/wine.db')

// 追記
await database.sql`INSERT INTO wine VALUES(7, "red_wine4", "japan", "cabernet")`;

// 修正
let results = await database.sql`SELECT * FROM wine WHERE production_area = \"japan\"`;

console.log(results);
  • node sqlite-cloud.js で実行

img9

ちゃんと抽出できました!素晴らしすぎる!とりあえずデータの読み込みと追加を試してみましたが、ローカルで SQLite を使うのとなんら変わりはないです。

まとめ

  • SQLite Cloud は SQLite の .db ファイルをクラウドにアップロードできるサービス
  • 各言語で SDK が用意されておりどこからでもアクセス可能(ただしまだ未対応のものもある)
  • 現状はベータ版のみの公開で無料だが、料金プランは正式リリース後にアナウンスされると思われる
    • フリープランがあるのか、あったとしてどの程度の制限があるのかなどすべて不明
  • Node.js で試した限りローカルで SQLite を使うのと大差ない

という感じでしょうか。個人開発では SQLite をたくさん使っているということもあり、それをクラウドにアップロードするだけというのは感激するほどうれしいサービスです。ほかのクラウドサービスで RDB を使おうとすると料金や設定などハードルの高いものが多いので、RDB をクラウドでつかうという際に選択肢として真っ先に上がってくるサービスになるのではないかと予想します。個人的には、これだけ簡単に RDB、SQLite がクラウドで使えるなら課金してでも使いたいと思います。もちろんフリープランがあればうれしいですけど!

ということで、まだ正式にリリースされていない SQLite Cloud をちょこっと調べてみるというコンセプトの記事でした。このあともまだまだ使っていく予定なのでまたわかったことや便利なことを見つけたら追記します!

Discussion