【Google サイト】簡易スタッツサイトをオープンする(2)
日本プロバスケットボールリーグ、通称「Bリーグ」。個人運用のスタッツサイトがこのたび更新を停止するとの報があり 代替手段を用意するならばどのくらいの労力がかかるのかを確認するために、実現の方針と性能をテストすることにした。
↓ 前回の記事
今回は前回表出した課題を Google データポータルを用いてどこまで解消できるかの検討を行った。
[改訂履歴]
2022.10.18 スプレッドシート/データポータル間連携の表現の修正と、ディメンション設定の注意点を追加
2022.11.7 新たに見つかった仕様を追加
課題の解消に向けて
前回は Google スプレッドシートを用いた方法にて行ったが、幾つか課題が残った。
悪かったこと
- モバイル端末での表示崩れ(ほぼ PC のみしか用を為さない)
- 多段での参照のため、表示までが極端に遅い
- たまにリクエスト過剰の応答不能を返す
- Google スプレッドシート には 1ファイルに最大作成セル数がある
- 新規ページ作成時、Google スプレッドシート にリンクを張ろうとして接続できないことがある(長時間)
- Google スプレッドシート でクエリ検索結果が0だったものを結合すると結果がエラーになる。同じ構文のままでは安心できない。
- ユーザーの手によるソート順変更ができない
- カラムの幅など、カスタマイズ性の限界
これらを Google データポータルを使用することで解決できないかの検討を行った。結論から言えば、幾つかの課題については解消した。
- モバイル端末での表示崩れ(ほぼ PC のみしか用を為さない)
- たまにリクエスト過剰の応答不能を返す
- 新規ページ作成時、Google スプレッドシート にリンクを張ろうとして接続できないことがある(長時間)
- Google スプレッドシート でクエリ検索結果が0だったものを結合すると結果がエラーになる。同じ構文のままでは安心できない。
- ユーザーの手によるソート順変更ができない
上記5つについては解消したと言ってよい。検討の前後および、Google データポータルを使用することで新たに発生した課題についても記載する。
構造
Google データポータルについて何も知らない状態で始めたため 当初は Google スプレッドシート もしくは Google サイトのいずれか、または両方を代替するような使い方になると想像していた。
しかし進めていくうちに、入れ替えるのではなく それらの中間レイヤーとして組み込む方が柔軟な構成が可能であることに気づいた。
具体的には上図の通り。
各アプリケーションはそれぞれ Web で表示するための機能を持っているものの、フロントにいてほしいのは この場合「Google サイト」になる。
「Google スプレッドシート」はデータを格納する DB としての役割と、静的なデータ処理が必要な部分について先んじて処理を行う。その代わりに表示用のグラフの生成など 今まで行っていたインタラクティブで処理負荷の高い機能はやめてしまった。
「Google データポータル」は表示用のデータパネルを生成する役割。BI ツールにおける "ダッシュボード" を作成する。ユーザー側からパラメータ指定や処理を行いたい集計項目は、Google スプレッドシートではなく Google データポータル側で集計を行う。Google スプレッドシートで計算するデータは静的で 表示する以上の何もできないが、データポータルのコントロールを用いると条件づけから対象のデータを絞り込んで再集計できる。
「Google サイト」は Google データポータルを表面上は直接外にさらさず、表示閲覧用として負荷を軽減する(自動的にリンクを張ってしまうけれども)。Google データポータルを直接見ることも可能だが、同じサイトページ内に異なる Google データポータルページを混在できるため一覧性に優れる。ユーザーはサイトだけ確認すればOK。
完璧に分かれているわけではないものの、Web開発における「サイト、アプリ、DB(システム)」の三層に行きついた形。
今の「環境」は最適ではない、しかしながら DBがぜい弱だと感じればその部分のみを変更することが可能なので(コネクタも準備されているし)、役割分担が明確となり「構造」としては最適になったと感じている。
Google データポータル
コントロールの概要
先ほど書いた「コントロールで再集計」というのがやや難しいので、改めて記載する。
上がコントロール上、何も変更を加えていない状態。
試合数、勝利数(Win)、平均得点 などに注目してほしい。
こちらが右上のコントロールで 集計対象を「ホーム」に絞った状態。
開催試合数、Win、平均得点などが 変化していることが分かるだろう。
この「コントロールによる集計対象の変化」を行いたいデータについては、データポータル側で受け取るデータは各試合ごとのデータが必要となる。 詳しく書くと、その試合がホーム開催なのかアウェイ開催なのか、勝ったのか負けたのか、得点は何点だったか… のデータを受け取る必要がある、ということ。
逆に再集計の必要がないデータは、スプレッドシートで先に計算させた後の集計データに対してアクセスした方がよい。上記の図であれば「リーグ順位」などの変化しないデータが対象となる。各試合のデータすべてを持つよりも、計算処理をスプレッドシートに任せ、その結果の少ないデータのみを取り込んだ方が処理が簡単に済む。逆に言えば、集計をデータポータルで行っていないので値を変化させることはできない。
スプレッドシート - データポータル間では、ユーザー側に条件付けを行わせる必要があるのか否かによって、どのような数字をスプレッドシートに持たせるのかが変化する。 通常の DB - アプリ間ではこの構造は DB 側のデータの持ち方の違いとなり アプリ側は SQL の発行で表示に必要なデータを定義する。
コントロールの種類
Google データポータルのコントロールは幾つか種類がある。
どんな内容で どれが使いやすいのか は各々で判断いただきたい。
何がやりたいのか、どう見せるのが適切なのか、はそれぞれのパターンに応じて千差万別。色々とグラフを並べてみて コントロールパネルを配置しながら、どうすれば使いやすいのかを検討する試行錯誤が必要。
レポートレベル
コントロールを使用すると、基本的には同じ画面内にある全てのグラフがコントロールの対象となる。例えば、「チーム:富山」という絞り込みを行うと、画面内のすべての表・グラフが 富山チームのもののみに絞り込まれる。
しかし中には、統計情報のように同じ画面にいてほしいがコントロールによる絞り込みは実施したくない場合がある。こんな時はグラフ上を右クリック->「レポートレベルに変更」とすると、その表・グラフはコントロールの影響を受けなくなる。
下の表のように、各種項目でのソートはユーザーに許可したい が、コントロールによりチームを絞り込まれると困る ものはレポートレベルで固めてしまうのがよい。
その他 注意が必要な仕様など
- 意外とデザイナーセンスが必要
製作中に最も困ったのが、ページ内にスッキリ納めるための配置と 見やすく分かりやすく配置するセンスが無かったことだ。むやみにオブジェクトを増やすとアッと言う間に上限数を超えてしまう。
必要な情報に無駄なくアクセスするためのデザイナーのセンスが必要となる。
- 1ページ内に配置できるオブジェクト(グラフなど)の数に上限がある(50 個まで?)。
配置できる上限数が決まっているため、表に合わせて上下にテキストを配置したい場合は、それぞれ個別のオブジェクトを作成するのではなく、オブジェクトをまとめた「表」として作成できないかを検討する。
上の図では、各スタッツに合わせる形で下に配置した「ランク」を表す数字も、ひとつひとつ個別に配置するのではなく 表としてまとめる。最終的には「1試合平均スタッツ」と書かれたラベルテキスト、スタッツ表、ランク表の3つで構成される。
- 「集計せずに素直に数値を配置する」が たまに できない
特定の点差状況からの追いつき率を配置したときに課題となった点。
スプレッドシート側で下記のような集計済みのデータが並んでいた場合は、表を作成する際にディメンションに「点差」(点差以外もだが)の数値をそのまま適用できる。
しかし下記のように 非集計の状態のデータ(個別の試合データ)が並んでいる場合
なぜかデータポータル側ではディメンションを設定する際に、数字に対して合計や平均や件数などの "計算値" を適用したがる。呪詛をつぶやきながらいろいろいじくっていると、他の項目を変更したタイミングなどで 本来設定したかった「表題」としての利用法を思い出して修正してくれる。このトリガーはいまだに発見できていない。
- 統合するデータの上限を突破する(謎の仕様)
データを統合する際に、元のテーブルの全てのデータを選択できないことがある(選択上限に達する)。
しかしこの時、主キー(PK)を元に自己結合すると…
3個目に同じものを選択した時に自己結合結果が返ってくる。
あとは1つ目と2つ目を削除する。
これを繰り返すと、全てのカラムを対象にして統合ができる。
たまにデータが落ちている時があるので、ちゃんと結合されたかを確認したほうがよい。
ほかに自己結合されたデータと最終的に JOIN しても動作する。
良かったこと
これは前回と同じ。
- 無料
- 構造が簡単
- Google 間でデータ取得ができる
悪かったこと
こちらはだいぶん解消した。
- 多段での参照のため、表示までが極端に遅い
- Google スプレッドシート には 1ファイルに最大作成セル数がある
- Google データポータルには 1ファイルに最大作成オブジェクト数がある
- Google データポータル側がなぜか集計をしたがる
Google データポータル利用でここまで解消できれば御の字だと思う。
方針
本格的な速度改善の要求や 通信トラフィックの増大がなければ、当分はこのままの運営を続けてみる。