週末キャンペーンに祝日を追加しました

はじめに

ゲームアプリで「リワード広告」という、ユーザーが自ら動画を見ることにより報酬をもらえる広告があります。
これを土日だけ表示する、という設定にしていましたが、「祝日も対象に入れてほしい」という要望があり対応することにしました。

1. 毎日、Googleカレンダーを確認する(GAS)
Google Apps Script(GAS)という自動化ツールが、毎晩「明日が祝日か」をGoogleカレンダーで調べます。Googleカレンダーには日本の祝日が全部登録されているので、それを読むだけです。

2. その情報を53個のシートに書き込む(GAS)
調べた結果「祝日 = 1」「平日 = 0」というしるしを、53個のアプリ用シートに書き込みます。

3. 深夜にCSV形式で配信する(GAS)
その後、全部のシートをCSV形式に変換して、クラウドストレージ(R2)に配信します。こうするとアプリが読み込めるようになります。

4. ユーザーがアプリを起動する
朝、ユーザーがアプリを起動します。アプリは最新のCSVを読み込みます。その中に「今日は祝日か」という情報が入っています。

5. アプリが判定して広告を表示する(C#コード)
アプリ内のプログラム(C#)が「今日は土曜日か、日曜日か、それとも祝日か」を確認します。いずれかに当てはまれば「リワード広告を表示OK」と判定します。

Google Apps Script(GAS)の仕事

毎晩、自動的に2つのことをします。
明日の日付をGoogleカレンダーに問い合わせて「祝日か平日か」を判定
その結果を53個のシートのセルに書き込む

GASはスケジュールを設定しておけば、人間がやることなく自動で動きます。

53個のシートの役割

各アプリには専用のスプレッドシートがあります。そこにはアプリの設定が色々書かれています。祝日情報も、その設定の一部として保管されます。

CSV配信の役割

シートをCSV形式(カンマで区切られたテキスト)に変換して、ゲームアプリが読める形にします。
毎晩、この最新データがクラウドに上がることで、アプリが起動するたびに「今日の祝日情報」を取得できます。

ゲーム内プログラム(C#)の仕事

ゲーム起動時に、CSVを読み込みます。その中の「祝日フラグ」をチェックします。

プログラムは以下のように判定します:
今日は土曜日か? → はい →「 広告を見ますか」を表示
今日は日曜日か? → はい → 「 広告を見ますか」を表示
今日は祝日か(CSVに書かれているか)? → はい → 「 広告を見ますか」を表示
以上のいずれでもない → 「 広告を見ますか」を表示しない


時間の流れ

夜10時:GASが翌日の祝日判定を実行
夜11時:判定結果がシートに書き込まれる
午前2時:全シートがCSV化されてクラウドに上がる
朝:ユーザーがアプリを起動 → 最新CSVを読み込む → 今日が週末・祝日なら「 広告を見ますか」を表示する。


振替休日も含まれる

「Googleの祝日カレンダー」には、国民の祝日だけでなく振替休日も登録されています。だから、振替休日も自動的に対象に含まれます。毎年、内閣府が祝日をアップデートすれば、こちらも自動で反映されるわけです。
 
 
まとめ

祝日対応は、複数のツールが協力する仕組みです。
Googleカレンダー = 祝日のデータベース
GAS = 毎日祝日を調べて記録する係
シート&CSV = 祝日情報の配送手段
ゲームプログラム = 「今日は祝日か」を確認して広告を出し分ける係

この仕組みがあれば、毎年、誰が手作業することなく、祝日に合わせてリワード広告が自動で表示・非表示になります。