clasp とデータポータル Community Connector で散らばった指標を 1 ページにまとめる

背景

日々確認したい指標やレポートがあちこちのページに点在していて、見るたびにタブを行き来していました。見る場所を 1 つにまとめたかったのが出発点です。Google サービスだけで完結させたかったので、データポータルの Community Connector を Apps Script で書く方針にしました。最初の題材としては、認証不要で扱える App Store のレビュー RSS を選びました。

Community Connector とは

データポータルに独自のデータソースを生やせる仕組みで、実体は Apps Script のプロジェクトです。getAuthType / getConfig / getSchema / getData の 4 関数を実装すれば、データポータルが任意の Web API を読みにきてくれます。一度この型を作っておけば、あとは別の指標やサービスにも同じ要領で広げていけます。

clasp + bun での開発

オンラインエディタだけだと履歴が追いづらいので、ローカルで clasp を使ってコードを書き、push するスタイルにしました。事前に Apps Script API を有効化しておきます。

bun install
bunx clasp login
bunx clasp create-script --type standalone --title "App Metrics Connector"
bun run push

clasp 経由なら GitHub でソース管理できます。.claspignorenode_modules を除外し、appsscript.jsonsrc/** だけを push 対象にしておくと取り回しが楽です。

4 関数の役割

getAuthType で認証方式を返し、getConfig でフォーム入力 (今回は App ID や国コード) を定義します。getSchema でフィールド定義を返し、getData の中で実際にデータを取りにいきます。レビュー RSS は認証不要なので AuthType.NONE です。

function getAuthType() {
  return cc.newAuthTypeResponse()
    .setAuthType(cc.AuthType.NONE)
    .build();
}

function getConfig() {
  const config = cc.getConfig();
  config.newTextInput()
    .setId('appId')
    .setName('App Store App ID');
  config.newTextInput()
    .setId('countries')
    .setName('国コード (カンマ区切り)')
    .setPlaceholder('jp,us');
  return config.build();
}

サンプル題材としてのレビュー RSS

最初に題材としたレビュー RSS は、エンドポイントが決まった形をしています。

https://itunes.apple.com/{country}/rss/customerreviews/page=1/id={appId}/sortby=mostrecent/xml

1 ページあたり最大 50 件、Atom 形式で返ってきます。im:ratingim:versionhttp://itunes.apple.com/rss 名前空間に属するので、XmlService.getNamespace('im', 'http://itunes.apple.com/rss') で取り出します。デフォルト名前空間で getChild するだけだと null になるので、ここだけ注意です。

スキーマ設計

レビュー単位の行になるよう、次のようなフィールドにしました。

フィールド種別備考
Review IDDIMENSION一意キー
Updated AtDIMENSION (YEAR_MONTH_DAY_SECOND)時系列グラフ用
Updated DateDIMENSION (YEAR_MONTH_DAY)日次集計用
CountryDIMENSION国別比較
App VersionDIMENSIONバージョン別評価
Title / Content / AuthorDIMENSIONテキスト
RatingMETRIC (AVG)平均評価
Review CountMETRIC (SUM)1 行 = 1 件で常に 1

Review Count を常に 1 にしておくのがコツで、データポータル側で件数の SUM と Rating の AVG をどちらも自然に集計できます。

データポータルに接続する

clasp push のあと、Apps Script エディタで「デプロイ → デプロイをテスト」を選び、ダイアログに表示される Head Deployment ID をコピーします。次の URL をブラウザで開けば、データポータルがコネクタとして読み込んでくれます。

https://lookerstudio.google.com/datasources/create?connectorId={HEAD_DEPLOYMENT_ID}

承認画面のあと、コネクタ設定画面で App ID と国コードを入れるだけです。

データポータルのコネクタ設定画面

データソースが作られたら、レポートに紐付けてテーブルやグラフを置けます。

データポータルに取り込んだレビュー一覧テーブル

まとめ

clasp + Apps Script + Community Connector の組み合わせは、Google サービス縛りで小さなダッシュボードを作るのに手軽な選択肢でした。サーバーも DB もなく、Apps Script プロジェクトひとつで動きます。

今回はレビュー RSS を題材にしましたが、4 関数の型さえ作れば別の API も同じ仕組みで足していけます。散らばった情報を 1 ページにまとめたい方は、よければ試してみてください。

参考リンク