2021年6月4日にβ公開、2022年7月20日に正式公開されたMonaca Educaitonの新機能、Monaca Educationクラウドデータベース(以下、クラウドデータベース)について紹介します。

本データベースはWebAPIに標準対応しており、JavaScript言語に限らずHTTPリクエストが扱える言語や装置であればインターネット経由で気軽に読み書きを行うことができます。

なお、教育用データベースのため学校の授業やコンテストの作品作り、文化祭などのアプリで使用することを想定しています。

データの永続性は有料プランであっても保証はありません。教育用途以外でのアプリ開発には、商用データベースの利用をご検討下さい。例えば、FJCT社の『ニフクラ mobile backend』などがお勧めです。

使用イメージ

データベース側

スプレッドシート風の表が展開されます。
整数・小数・文字列を扱う列が各2つ用意されており、データを入力できます。列は設定から増やすこともできます。
また、手動での変更はできませんがidと内部的なidであるOID・データの登録日・更新日なども記録されます。

アプリのプレビュー&JavaScript側


データベースの値をWebAPI経由で取得したり追加・変更・削除することができます。
今回のサンプルアプリは先ほどのデータベースを参照して小遣い帳アプリを実現しています。

なお、WebAPIを操作するときにはAPIキーを使います。APIキーが漏洩するとデータを書き換えられたり削除されたりするので注意して下さい。

なお、このキャプチャーのエディタ部分の1行目で表示されているAPIキーは参照専用のAPIキーのため、データが閲覧できるだけで更新や削除は行えません。

チュートリアル

  • Monaca Educationにログイン
  • お小遣いアプリをダイレクトインポートでプロジェクトとして取り込む
  • Monaca Education上でプロジェクトを開く(クラウドIDE)
  • クラウドIDE上のメニューから『DB』を選択
  • DB管理画面の『設定』にある『APIキーの管理』からキーをコピーする
  • キーをサンプルアプリ(お小遣いアプリ)のmain.jsファイルの変数『apikey』に貼り付けて保存
  • アプリ上でお小遣いの記録を行い、表示されれば成功
  • データをCSV形式でバックアップする

Monaca Educationにログイン

Monaca Education簡易データベースを起動するためには、Monaca Educationにログインする必要があります(一度起動すれば、ログアウトしても問題ありません)。

Monaca Educationログインフォーム

なお、同機能は教育版のMonacaである『Monaca Education』限定機能です。通常版Monacaには存在しません。

お小遣いアプリの準備

Monaca Educationにログインしたのち、以下のURLからお小遣いアプリをインポートして下さい。

お小遣いアプリ(インポート)

Monaca Education上でプロジェクトを開く

プロジェクトを開くと、お小遣いアプリがプレビュー上に起動します。

同プロジェクトには岡本所長のデータベースAPIキーが含まれているため、早速、データベースの記録が表示されます。

しかし、設定されているキーが『読み取り専用キー』のため記録の追加は行えません。
そこで、自身のデータベースを立ち上げ、『マスターキー』に差し替えます。

クラウドIDE上のメニューから『プロジェクト>クラウドデータベース』を選択

メニューの『プロジェクト』から『クラウドデータベース』を選択して下さい。

DB管理画面の『設定』にある『APIキーの管理』からキーをコピーする

データベース管理画面が展開されます。

ここで直接データの参照・登録・更新・削除を行うこともできますが、
今回はアプリからデータベースを利用するために『設定』を開いて下さい。
『設定』にある『APIキーの管理』からマスターキーをコピーします。

キーの文字列を選択してコピーしても良いのですが、コピーボタンを押せば一発でコピーできます。
なお、誤って漏洩させてしまった場合はキーを『リセット』したり『無効』にすることもできます。

キーをサンプルアプリ(お小遣いアプリ)に反映

main.jsファイルの変数『apikey』に貼り付けて『保存』して下さい。

これで自身のデータベースを参照するようになります。また、マスターキーなのでデータの追加・変更・削除も行えるようになります。

アプリ内の『記録する』に名目や金額を入力して『登録』してみましょう。

登録内容が反映されれば成功です。

データベース管理画面も改めて確認してみましょう。『更新』するとデータがレコードとして記録されているはずです。

列の表示幅は横に広げることもできます。また、使わない列は『設定』から非表示にして構いません。

整数・小数・文字列の列は各列、最大8個まで利用できます。
例として、お小遣い帳アプリでは、整数を2つと文字列を1つ使用しています。
text0が金額、text1が収入か支出かを表すフラグ、text0が名目です。

このデータベースでは列名自体の変更はできません。
また、『id』や『OID』、『作成日』『更新日』はシステムが自動的に値を登録しています。
なお、管理画面でID部分をクリックすると、レコードの削除も行えます。

データをCSV形式でバックアップする

クラウドデータベースはデータの永続性が保証されていないため、必要に応じて『エクスポート』機能でバックアップしてください。
CSV形式のファイルがダウンロードできるはずです。
また、バックアップを復元する際は『インポート』でCSV形式のファイルをデータベース上に復元します。

なお、インポートとエクスポートが正常に動作するかどうかも含め、クラウドデータベースは保証しておりません。

お小遣いアプリの更なる解説

Monaca Education簡易データベースのWebAPI仕様

SELECT

エンドポイント

https://db.monaca.education/select?apikey=[API_KEY]

オプション

  • 列の絞り込み
    • 不可
  • 行の絞り込み
    • IN(複数列挙)
      • 例:int0In=1,2,3
    • LIKE(部分一致)
      • 例:text0Like=もなか
    • COMPARE(比較)
      • 文法:GE(以上)・GT(より大きい)・LE(以下)・LT(未満)
      • 例:int0LT=100
  • 行の並べ替え
    • asc(昇順)
      • 例:orderById=asc
    • desc(降順)
      • 例:orderById=desc
  • 指定の件数を取得
    • limit
    • 整数を指定可能
    • 例:limit=5
  • 開始位置を指定して取得
    • offset
    • 整数を指定可能
    • 例:offset=5
  • ランダムに並び替えて指定の件数を取得する
    • random
    • 整数を指定可能
    • 例:random=1

INSERT

エンドポイント

https://db.monaca.education/insert?apikey=[API_KEY]

オプション

  • int0~int7
    • 整数を登録可能
  • flot0~float7
    • 浮動小数点数を登録可能
  • text0~text7
    • 文字列を登録可能

UPDATE

エンドポイント

https://db.monaca.education/update?apikey=[API_KEY]

オプション

  • int0~int7
    • 整数を登録可能
  • flot0~float7
    • 浮動小数点数を登録可能
  • text0~text7
    • 文字列を登録可能
  • 行の絞り込み
    • SELECTと同等・SEELCTを参照して下さい。

※ UPDATEは行を指定しないと全ての行が更新されます

DELETE

エンドポイント

https://db.monaca.education/delete?apikey=[API_KEY]

オプション

  • 行の絞り込み
    • SELECTと同等・SEELCTを参照して下さい。

※ DELETEは行を指定しないと全ての行が削除されます

容量制限

  • 1レコードあたりの容量制限
    • 約4KBで制限しています
  • 1データベースあたりのレコード上限
    • 1000レコードまでに制限しています
  • データベース数の上限
    • 1プロジェクト1データベースなのでスタンダードプランの場合最大100個

余談:Monaca Education クラウドデータベースはACID特性を満たしません

  • 不可分性(Atomicity)
    トランザクションをサポートしていないため、複数の命令を実行する際に片方だけしか実行されない可能性があります。
    例えば、1万円預金する処理と500円引き出す処理を実行した際に、1万円の登録に失敗したまま500円を引き出して預金額がマイナスになることがあります。

  • 一貫性(COnsistency)
    ルールや制約を掛けることができないため、上記のマイナス500円が起こることをデータベースの仕組みとしては防げません。

  • 独立性(Isolation)
    トランザクションをサポートしていないため、担保できません。

  • 永続性(Durability)
    とくにでデータの永続性は保証していません。運営側の都合(アップデートなど)で一斉にデータを消す場合もあります。また年度の切り替えで一斉削除する場合も十分に考えられます。