GAS で広告の集計業務を自動化して半年が経った

こんにちは、Habits チームでエンジニアをしている中畑 (@yn2011) です。

tl;dr

  • Google Apps Script (GAS) を利用し、広告掲載の実績値を集計する作業を自動化した
  • 約半年間運用した結果、時々エラーは発生するものの概ね有効に動作している

なぜやったか

背景

Habits チームのプロダクトである無料ゲームは、無料で様々なブラウザゲームを提供しているサービスです。ビジネスとしては、サービス内の広告掲載によってマネタイズを行っています。 プロダクトを継続する上で、広告掲載の実績値は重要なため、 チームの夕会では Google Data Studio のレポート機能を利用して各指標の動向を確認するようにしています。

集計業務

このレポートを作成するため、データアナリストが毎日手動で広告プラットフォームの管理画面からデータを取得し、スプレッドシート上に貼り付けて整形・集計する業務を行っていました。1回あたり15分程度で済む作業ではあるそうなのですが、定型的な作業で自動化しやすそうですし、節約した時間や労力をもっと付加価値の高い業務に転換できれば最高です。

image

どうやったか

システム概要

以下の理由から、GAS を選択しました。

  • 広告プラットフォームが提供する API を利用して現在と同等の情報を取得できる
  • 現在の集計業務はスプレッドシート上で行われている
  • GAS のトリガー機能を利用してスケジュール実行が可能
image

開発

GAS はブラウザ上で利用可能なエディタが提供されており、コーディングや実行をブラウザから行うことができます。また、clasp という CLI ツールを利用することで、ローカル環境で TypeScript を利用してコーディングし、GAS のプロジェクトに push することもできます。

なお、clasp は 2019 年 7 月の マイナーアップデート(2.3.0) を最後にバージョンが上がっていないため、あまり活発にメンテナンスされていない OSS の利用に抵抗があるという意見もあるかもしれません。clasp を使用しないとしても、ts2gas を使用することでコードのトランスパイルは可能ですし、型定義 (@types/google-apps-script ) は別のコミュニティよって開発されています。ローカル環境で開発できることで、コードのバージョン管理がしやすく、ブラウザ上のエディタ特有の問題(例えばフォントの問題で全角数値と半角数値の区別が付かない等)も回避できるので、clasp を使用しないとしてもローカル環境で GAS を開発をすることはおすすめです。

今回は clasp を使用して、ローカル環境で開発しました。普段使いのエディタやキーバインド(私は VSCode + Vim キーバインド派)を使えますし、型定義によって適切に補完が効くこともあってチームで快適に開発ができました。

運用してどうだったか

単純な自動化とはいえ、やはりシステムを運用すると様々な課題に直面します。約半年間の運用で出会った課題について書きます。

エラー検知

トリガーを利用した GAS の実行でエラーが発生した場合は、トリガーの作成者宛にメール通知されます。特定のメールアドレスを通知先に設定することはできないようです(出来たら是非教えて頂きたい!)社内の個人アカウントで作成している場合、メール通知だけではその作成者が休暇中であったり、受信トレイで見落とすなどして、エラーの発見が遅れる懸念があります。私のチームではまだ実装していませんが、導入時に GAS の実行結果をチームの Slack に通知する等の対応も行ったほうが良いかもしれません。

トリガーの二重起動

現在までに、2, 3回発生したことがあります。どういうわけかトリガーが同時刻に2重起動します。発生すると売上等の数値が2倍になるため、すぐに気付いて修正することはできていますが、注意が必要です。

セル数上限

現在、1つのスプレッドシートに作成可能なセル数は500万個です。(空のセルも含む)なかなか上限に到達することはないんじゃないかと思いますが、日々の積み重ねは恐ろしいもので、実際に発生しました。API から取得したデータを保持するシートは、必要な列数が限られているので不要な列を削除して空白セルの数を減らして対応しました。

原因不明のタイムアウト

こちらも 2, 3回発生しました。GAS が途中で停止します。スプレッドシートかGAS に一時的な障害が発生していたのかもしれませんが、原因の特定には至っていません。発生時には手動でスクリプトを起動することで対応しています。

まとめ

運用上の課題はあり、エンジニアがリカバリーにあたる必要はありますが、その頻度はあまり多くないです。GAS を利用して、広告掲載の実績値を集計する作業の自動化しビジネスチームの支援を行うことができました。これからも自動化可能な業務を見つけてエンジニアから提案・導入していきます!