データベースの体験

9d2c38e6fe48e61528f6b2d34370768f

この章で学ぶこと

データベースの体験をします。

データベースとは

13de54927bc6437f8b51d6a60e676a6a

今回は、外部のサーバーにデータを保存してやり取りすることで Unity 側のコンテンツと連携することを学びます。

今回はその中でもデータ検索やデータ蓄積に長けた「データベース」を試していきましょう。

最近はデータベースの範囲は広いですが、今回はその中でも RDS(リレーショナルデータベース)という、 データの入れ物を用意し(テーブル)、テーブルにデータのルール定義(カラム)をして、データ検索やデータ蓄積を行うところに焦点を当てます。

たとえば、こんなデータです。

カラム1 カラム2 カラム3 カラム4
文字列 数値 JSON BLOB
文字列 数値 JSON
文字列 数値 JSON

「データを保存する」観点の他の用語

13de54927bc6437f8b51d6a60e676a6a

他にも「ストレージ」や「ファイルサーバー」といったデータを保存するときに良く出てくる用語があります。

ストレージはデータの記憶領域全般を指す言葉です、そこにデータベースやファイルサーバーなどの仕組みを作ることで、より用途に合ったデータ管理ができるようになります。

データ管理として、ファイルサーバーは、ファイルパスや URL などでデータが取得できる仕組みで 3D コンテンツで言うとテクスチャやキャラクターの絵素材を管理する用途に向いています。

データベースサーバーは、データのルールを定義してデータ検索やデータ蓄積をしやすくする仕組みで、ゲーム自体のデータの管理やユーザーごとのデータ管理をすることに向いています。

Codespaces の更新

授業をはじめる前に Codespaces の更新を行いましょう。

サーバの起動

0a3a35f3418068b7713ddaa729f2c660

  • ターミナルで npx node-red -u week05-chapter01 をサーバ起動
  • ポートタブで今回のサーバ起動を公開(1880 ポートのほう)
  • シークレットウィンドウで今回のサーバが公開されているか確認します

こちらの手順を進めます。

✅ポイント

alt text

  • JSON Server https://github.com/typicode/json-server という JSON データファイルをそのまま簡易データベースとして使う仕組みが Node-RED 起動時に一緒に起動しています
    • 本来、データベースの仕組みを作ることは手間がかかりますが、今回は「データを読み込み・作成・更新・削除」を手軽に体験するために JSON Server を使っています

alt text

  • Node-RED は、今回 JSON Server 自体のサーバー構造にそのままデータを通しています

JSON Server のデータの持ち方

JSON Server https://github.com/typicode/json-server のドキュメントにあるように、

{
  "posts": [
    { "id": "1", "title": "a title", "views": 100 },
    { "id": "2", "title": "another title", "views": 200 }
  ],
  "comments": [
    { "id": "1", "text": "a comment about post 1", "postId": "1" },
    { "id": "2", "text": "another comment about post 1", "postId": "1" }
  ],
  "profile": {
    "name": "typicode"
  }
}

といったサンプルデータの場合、トップレベルにあるプロパティ posts,comments,profile が、そのままデータベースのテーブルとして使えます。テーブルというのは、あるルールに従ったデータのかたまりです。

関係データベースやフラットファイルデータベースにおける表(ひょう)またはテーブル(英語: table)とは、データ要素(値)の集合を垂直な列と水平の行のモデルで構成したものである。表には所定の個数の列があるが、行数は不定である。各行は特定の列の値で識別され、それを候補キーと呼ぶ。

posts というテーブルの場合は

  • posts
    • id という文字列のデータが入る列
    • title という文字列のデータが入る列
    • views という数字が入る列

で構成されています。

id title views
1 a title 100
2 another title 200

2 行分のデータが入っています。

comments というテーブルの場合は

  • comments
    • id という文字列のデータが入る列
    • text という文字列のデータが入る列
    • postId という文字列が入る列

で構成されています。

id text postId
1 a comment about post 1 1
2 another comment about post 1 1

2 行分のデータが入っています。

profile は、行と列で構成されているテーブルではなく固有データが取得できます。これは json-server の仕様です。

JSON Server のデータの呼び出し方

HTTP メソッドに合わせてデータが取得できます。

ドキュメントの例では posts の場合、以下のようになります。

今回のデータ

今回のデータは ./week05-chapter01/db/db.json にデータがあります。

{
  "sample01": [
    {
      "id": "1",
      "data": "データ1"
    }
  ]
}

sample01 というテーブルで、いまは

  • sample01
    • id という文字列のデータが入る列
    • data という文字列のデータが入る列

で構成されています。

id text
1 データ1

1 行分のデータが入っています。

ブラウザから GET メソッドでデータの取得をしてみる

alt text

ポートタブで 1880 で動いているほうのローカルアドレスをコピーします。

<Node-RED サーバーのアドレス>/sample01

で sample01 テーブルにアクセスしてみましょう。

alt text

このようにブラウザで sample01 テーブル のデータが見れます。

Node-RED で GET メソッドでデータの取得をしてみる

alt text

実は今回のフローでは「お試し」というタブがあり Node-RED 側からデータをお試しできます。

GET データ取得とコメントが書かれている下の inject ノードをクリックしてみましょう。さきほどのブラウザでの GET リクエストと同じことが起こります。

alt text

デバックタブでデータが取得できていることが確認できます。

Node-RED で POST メソッドでデータの登録をしてみる

alt text

POST データ追加とコメントが書かれている下の inject ノードをクリックしてみましょう。

alt text

このように API 設定を見ると data に「データ2」という値が追加されます。

alt text

デバックタブで追加されたデータが確認できます。今回の cbef という値は、みなさんそれぞれのランダムなものです。

alt text

week05-chapter01/db/db.json の中身が実際に更新されることも確認しましょう。

Node-RED で DELETE メソッドでデータの削除をしてみる

alt text

DELETE データ削除とコメントが書かれている下の inject ノードをクリックしてみましょう。

alt text

API 設定を見ると URL に /1 をつける形で ID 1 のデータが削除されます。

alt text

データが削除されると今回削除されたデータ内容が返ってきます。

alt text

GET で確認してみるとデータが削除されていることが確認できます。

エクストラ:データの更新 PUT PATCH

はじめに、何度か POST でデータ追加をして GET で更新したい id を決めて更新を試しましょう。

PUT は全体更新です。対象の id に対してデータを上書きします。上書きするので、今まであった値でも今回更新しないデータは消えてしまいます。

alt text

PUT データ全体更新とコメントが書かれているフローを確認します。

alt text

今回のフローの API 設定をダブルクリックして内容を見て http://localhost:3000/sample01/1 の 1 の部分を更新したい ID に書き換えて完了をクリックしてデプロイします。

alt text

タイムスタンプと書かれた inject ノードをクリックしてみましょう。

alt text

データが更新されたことを確認しましょう。

PATCH は部分更新です。対象の id に対してデータを上書きしますが PUT と違い、プロパティ名が一致した値だけを更新します。

今回の Codespace の終了

0a8b4cfb807e57ea1382292a757c6899

今回の Codespace 終了しておきましょう。

Unity プロジェクトの更新

次の授業をはじめる前に Unity プロジェクトの更新を行いましょう。

results matching ""

    No results matching ""