データポータルとスプレッドシートで作るキャラクターデータベース

この記事は [ZOZO Advent Calendar 2021](https://qiita.com/advent-calendar/2021/zozo) #4 14日目の記事です。

12/14 ということで、アドベントカレンダーも後半に突入ですね。
ここ最近（2021年12月）の皆さまにおかれまして、悪魔の合体やモンスターの進化に勤しんだり、どこぞのフィナーレを堪能しておられる方も多いのではないかと存じます。
私自身もそうしたゲームをプレイしますが、プレイする中で「アレの合体の素材、何と何だったっけ。。？」となることが多々あるので、自身のためのオレオレデータベースを作ることがあります。

そこで今日は、Google のサービスを利用して無料で作る「**ゲームのキャラクター辞典**」という、お子様の冬休みの制作課題にいかがですか〜といった緩めの内容でお届けしたいと思います。

## 作るもの

キャラクターの基本情報と、合体の素材となるキャラクターのデータベース。
リストにあるキャラクター名をクリックすると、そのキャラクター情報を表示する。
[完成品はこちら](https://datastudio.google.com/reporting/52579427-bb82-4311-96ea-c142dfd99e66)
![スクリーンショット 2021-12-13 15.30.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/58354477-d9dd-e3f6-d2d8-77dbfa310939.png)


# TL;DR
- データ：Google スプレッドシート ／ 操作画面：データポータル
- データポータル上で２つのデータを統合
- 画像URLを Google フォト から取得し、データポータルに表示

# データの作成

### 基本情報の作成
まずは基本となるデータの登録から行いましょう。
[完成品はこちら](https://docs.google.com/spreadsheets/d/1is9whG1HFydwpO_rAkfwPnHrljJ0DkgH2MyBuJUSDBg)
![スクリーンショット 2021-12-13 16.41.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/0a2ca641-3451-2d76-e4c7-9eacdd95545f.png)
新規の[スプレッドシートを開き](https://docs.google.com/spreadsheets/?usp=mkt_sheets)、画面下のタブで設定できるワークシート名を「**キャラクター**」とします。
画面左上で設定できるスプレッドシート自体の名称は「**キャラクターデータベース**」としておきましょう。

A列の１行目に「*名前*」と入力し、２行目以降にキャラクター名を入力していきます。
それ以外の項目は入れたい情報を入れていきます。
キャラクター画像のURLを入れていくので、「*画像URL*」の列を作っておきます。

#### 画像の設定
画像は Google フォトに置き、そこから画像の URL を取得します。
まずは表示したい画像を Google フォトにアップロードしましょう。
![スクリーンショット 2021-12-13 14.58.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/de52c08d-dd30-2866-cd46-e9f83509dd7e.png)

アップロードが完了したら、対象となる画像を選択してから、画面右上の「**＋**」ボタンをクリックし、公開するためのフォルダーを作成します。
![スクリーンショット 2021-12-13 17.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/c32ad592-5d97-1273-ea64-e1f3b520e4ff.png)

フォルダーが作成されたら開き、外部から閲覧できるように共有設定をします。
![スクリーンショット 2021-12-13 17.12.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/1e5f45dd-97d7-87ab-8b86-b25dc55d5ee3.png)
共有アイコンをクリックし、表示されたダイアログの右下にある「リンクをコピー」をクリックすると、キャプチャの状態となり、共有完了です。
あとは各画像をクリックし、表示されたら画像の上で右クリックをして、コンテキストメニューの「画像アドレスをコピー」を選択すると、画像の URL　が取得できます。
それを「キャラクター」シートの、「*画像URL*」列に入力していきます。
![スクリーンショット 2021-12-13 15.04.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/c84edbc4-3cf2-a321-8fa9-42408e647830.png)



### 合体情報の作成
それが終わりましたら次に、何と何を合体させたらどのキャラクターができるか、のデータを別シートに作成します。
[完成品はこちら](https://docs.google.com/spreadsheets/d/1is9whG1HFydwpO_rAkfwPnHrljJ0DkgH2MyBuJUSDBg)
![スクリーンショット 2021-12-13 16.58.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/207e1c33-d031-d5f5-75f1-8eb776d2732e.png)
シートを追加し、シート名を「**合体表**」としましょう。
先と同じく、A列の１行目に「*名前*」と入力し、２行目以降に合体結果のキャラクター名を入力していきます。
ここに入力するキャラクターの名前は、先に作った「**キャラクター**」シートを参照する形で入力します。

```
='キャラクター'!A2
```

２列目以降に、そのキャラクターの合体素材となるキャラクター名を入力する列を用意します。
ここでのキャラクター名の入力も、上記と同じく「**キャラクター**」シートを参照する形で入力します。

１キャラクターにつき複数の合体パターンがある場合、「*パターン*」という列を用意し、パターンごとに同じ値を入力します。
上記キャプチャの例だと、キャラクター10の素材となるパターンは「**キャラクター01とキャラクター06**」、もしくは「**キャラクター03とキャラクター08**」となります。

これでデータ作成は完了です。
続いて操作画面を作っていきましょう。

# 操作画面の作成

[データポータル](https://datastudio.google.com/)を開き、空のレポートを作成します。
そうすると「**データのレポートへの追加**」が表示されますので、その中の「**Google スプレッドシート**」を選択します。

次の画面で、先程作成したスプレッドシートと「**キャラクター**」ワークシートを選択し、画面右下の「**追加**」ボタンをクリックします。
次に出てくるダイアログの「**レポートに追加**」ボタンをクリックすると、選択されたワークシートがデータソースとして作成されます。
![スクリーンショット 2021-12-13 17.30.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/c6e963fc-77e8-45cb-956c-ad0f505f1cf7.png)

続いて「**合体表**」ワークシートもデータソースとして追加するため、画面上部にあるメニューの「**リソース ＞ 追加済みのデータソースの管理**」をクリックします。
![スクリーンショット 2021-12-13 17.32.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/c57fb3ff-9e33-99e8-5f58-1660910b8854.png)

表示された画面の「**データソースを追加**」をクリックし、先程と同じ方法で「**合体表**」ワークシートをデータソースとして追加します。
![スクリーンショット 2021-12-13 17.35.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/33430f0a-61b5-267b-b3e8-3383da0a6b39.png)

これで、基本情報と合体情報、２つのデータソースが作成されました。

次に、画像を表示させるための設定を行います。

### 画像の表示

画像を表示するために、データソースに１つ項目（フィールド）を追加します。
先程と同じく、画面上部にあるメニューの「**リソース ＞ 追加済みのデータソースの管理**」をクリックします。
表示された画面の、「**キャラクターデータベース - キャラクター**」の「**編集**」をクリックします。
![スクリーンショット 2021-12-13 17.49.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/f311b8c8-f36f-797f-b192-da631aff44ea.png)

次に表示された画面にて、右上にある「**フィールドを追加**」をクリックします。
すると入力フォームが開きますので、以下のキャプチャのように、フィールド名に「画像」と入力し、計算式には `IMAGE(画像URL)` と入力して「**保存**」ボタンをクリックします。
![スクリーンショット 2021-12-13 17.52.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/a991be22-ad0b-05a4-b3fc-2288ced27814.png)
あとは画面右上の「**完了**」、続いて「**閉じる**」をクリックすると元の画面に戻ります。
これで画像を表示するための準備が完了しました。

### データの統合

この状態でも、キャラクターの基本情報を表示させることはできますが、合体の情報が正しく表示できません。
なぜなら、　今回、対象とするキャラクター情報の表示方法は「**該当キャラクターでデータにフィルターをかける**」やり方とするため、基本情報と合体情報が統合されたデータを使う必要があります。

ではデータの統合のやり方をみてみましょう。

![スクリーンショット 2021-12-13 17.47.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/70a1d4b9-fe6f-388f-3cbb-ff939fe9966c.png)

今度は「**リソース ＞ 混合データを管理**」をクリックし、表示された画面で「**データビューを追加**」をクリックします。
その後に表示された画面で「**表を追加**」をクリックし、「**キャラクター**」と「**合体表**」の２つが選択されている状態にします。
あとは以下のキャプチャのように設定します。
![スクリーンショット 2021-12-13 18.00.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/169d2329-6434-7a1b-8b81-a2358800473c.png)
統合キーとして「*名前*」を選択し、あとは使いたいデータを「サイズ」に追加します。
データソース名に任意の名称を入力し、「**保存**」ボタンをクリックすれば作業完了です。
あとは閉じて元の画面にもどりましょう。

### 操作画面の作成

ここまできたら、あとは操作画面を作成するだけです。

まずキャラクターリストを作成します。
「**グラフを追加**」から「*表*」を選択します。
![スクリーンショット 2021-12-13 18.07.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/5900229c-fe51-940e-7a0d-4e6f8c3d3032.png)

そこに、「データソース」に先程作成した混合データを設定し、「ディメンション」に「*名前*」を設定します。
![スクリーンショット 2021-12-13 18.09.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/25931c29-47fa-b52b-8e0f-760049929230.png)

データ設定を下にスクロールすると「グラフ インタラクション」が表示されるので、そこの「クロスフィルタリング」のチェックを入れます。
これで、リストをクリックするとフィルターがかかるようになります。
![スクリーンショット 2021-12-13 18.10.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/cd26b3d6-4b71-94df-4c70-49791bd5c9a7.png)

あとは、この表をコピーして、ディメンションを変える、サイズを変えるなどをして表示したい情報を設置していきます。
![スクリーンショット 2021-12-13 18.13.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/2197efa5-11d0-a8e8-fc4c-8aa14c39594e.png)

画像は、先程作成したフィールドの「*画像*」をディメンションに設定します。
![スクリーンショット 2021-12-13 18.14.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/9695d341-d4aa-bb38-125c-e28f70d39e9c.png)

あとは合体情報の表示ですが、ここは「*グラフ ＞　ピボットテーブル*」を使ってみましょう。
「*表*」だと、各行に情報が全て表示されるのですが、ピボットテーブルだと、共通する情報（左側の列）は、まとめられて表示されるので、見やすくなります。
ただ、ピボットテーブルには「指標」として数値データを設定する必要があるので、適当な数字をそこにあてるか、表の横幅を調整して右端の列を隠す、などで対応します。
![スクリーンショット 2021-12-13 18.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/63c4d1ff-9b26-9d5c-e5b7-56b9a2dfc2d4.png)

こうしてできたのが[こちら](https://datastudio.google.com/reporting/52579427-bb82-4311-96ea-c142dfd99e66)になります。
![スクリーンショット 2021-12-13 15.30.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217369/58354477-d9dd-e3f6-d2d8-77dbfa310939.png)

左側のリストをクリックして使用する想定ですので、クリックされていない状態だと各情報にフィルターがかかっておらず、右側の情報は何の情報を表示しているのか分からない状態となります。
それを前提に操作いただければと思います。

## 最後に

いかがでしたでしょうか。
今回のこの方法で、どの町で何が売っているといった**アイテムデータベース**も作成できますので、ゲーム好きのお子様たちに、こちらの情報をもとに色々作っていただければ幸いです。

明日は @YasuhiroKimesawa さんによる「このオブジェクトはエンティティかバリューオブジェクトか」になりますので、お楽しみ！
それでは皆さま良いゲームライフを👍