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 でソース管理できます。.claspignore で node_modules を除外し、appsscript.json と src/** だけを 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:rating や im:version は http://itunes.apple.com/rss 名前空間に属するので、XmlService.getNamespace('im', 'http://itunes.apple.com/rss') で取り出します。デフォルト名前空間で getChild するだけだと null になるので、ここだけ注意です。
スキーマ設計
レビュー単位の行になるよう、次のようなフィールドにしました。
| フィールド | 種別 | 備考 |
|---|---|---|
| Review ID | DIMENSION | 一意キー |
| Updated At | DIMENSION (YEAR_MONTH_DAY_SECOND) | 時系列グラフ用 |
| Updated Date | DIMENSION (YEAR_MONTH_DAY) | 日次集計用 |
| Country | DIMENSION | 国別比較 |
| App Version | DIMENSION | バージョン別評価 |
| Title / Content / Author | DIMENSION | テキスト |
| Rating | METRIC (AVG) | 平均評価 |
| Review Count | METRIC (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 ページにまとめたい方は、よければ試してみてください。