night and sundial

じゃわじゃわ日記 -the 5th defection-

GASとAppSheetで、povoのプロモコード管理アプリを作った

 ぼくは20年以上になるau携帯電話のユーザだったが、昨年、スマートフォンの回線契約を、同じKDDIの「povo2.0」に変えた。povoは、普通の携帯電話の契約のような月極めの料金ではなく、必要なときに必要なだけのデータ通信容量の「トッピング」をアプリ上でプリペイド購入するという、これまでになかった仕組みだ。合う人には合うし、合わない人には合わないだろうな、とは思う。

povo.jp

 さらにおもしろいのは、対象の店舗で買い物をしてau PAYで支払うとデータ通信容量がもらえる、「ギガ活」というユニークな仕組みがあることだ*1。これのおかげで、最近のぼくは日常的に使う分にはスマートフォン代がほぼ0円になっている*2。たとえば、LAWSONやデイリーヤマザキで500円以上の買い物をすると、300MB(使用開始から3日間有効)のデータ通信容量が提供される。──これすなわち、LAWSONが手近にありさえすれば、習慣的に煙草を買うだけで、使えるデータ通信容量が日々積まれていくということで、これはかなり有利だ。喫煙者でなくても、たとえば仕事の日はいつもお昼に弁当とコーヒーを買う、といった人は、世の中に少なくないと思う。

povo.jp

*

 「ギガ活」で付与されるデータ通信容量は、対象になる買い物をしてから数日後に「プロモコード」がメールで送られてきて、そのコードをpovoアプリに入力することで適用される、という仕組みである。コードの有効期限は、時期によって、翌月15日締めか翌月末締めになる。

 ──こういうのをこまごまとやるのが苦にならない人には、向いていると思う。ぼくはこういうのはきらいではないので、スマートフォンのカレンダアプリを使って、受信したメールからコードを転記して有効期限日の日付に登録しておき、そこからコピーして使って使用済にする、という方法で管理していた。

 だが面倒だ。まず、メールからカレンダアプリへ、コードをコピペする作業が、手間だった。メール1通あたりコード1件とは限らず、1通のメールで複数のコードがまとめて送られてくることもある。何らかの形で未使用のコードをプールしておくのは必要だけど、それを、有効期限日が早い方から1件ずつ取り出して、簡単に使用済に更新できるような仕掛けもほしい。──サードパーティ製のプロモコード管理アプリがあるみたいなのだけど、うーん何か違うな…と思った。メールの本文を選択して「共有」することで初めてプロモコードを保存できるものらしい。そこを自動でやってほしいのだ。。。

*

 というわけで、下記のようなシステムを作った。──所詮は自分用の機能なので、要件定義もざっくり、機能設計もテキトウである。

  • 前提として、プロモコードのメールはGmailの振分ルールで特定のラベルを付与しておく。
  • Gmailの対象のラベルのメールの文面から、プロモコードと有効期限日を抽出して、Googleスプレッドシートに登録する処理を、自動で動かす。登録したらそのメールには処理済ラベルがつき、次回の処理からは対象外になる。【Google Apps Script、日次起動】
    • Google Apps Script(GAS)でのGmailのスレッド操作と、メール文面からの文字列の抽出については、同じことを考えた先達がすでにインターネット上にいらっしゃったので、参考にさせていただいた*3
    • プロモコードのメールはだいたい夕方に送信されてくるので、その後の時間帯で処理が起動するようにトリガを設定。
    • 今のところ、ギガ活の容量300MBのプロモコードしか相手にしておらず、その他のキャンペーンなどのコードには対応していない。滅多に受け取ることがないから、そこはまあいいかと。
  • スプレッドシートから使用済フラグが立っていないコードを表示し、1件ずつ使用済フラグを立てられる、Webアプリ。【Google AppSheet】
    • 最初はGASでHTMLに表示させたいと思ったが、考えあぐねたところに、AppSheetというものでアプリを作れることを知り、作ってみた。
    • アプリ上では未使用→使用済の更新のみとし、使用済から未使用に戻す機能は敢えて不要とした。(一度、使用済フラグを立てたら、アプリにはもう表示されなくなる)
    • ただ、誤操作で更新してしまった場合に後から追えなくなるのは困るので、スプレッドシート側に、使用済フラグを立てた日時のタイムスタンプを残すことにした*4

*

 こんな流れで、自分用の簡易なスマートフォンアプリができあがった。


 スプレッドシートにプロモコードをタンキングする。放っておけばデータは登録した順(メールを受信した日の昇順)に積まれていく。


 プロモコードを有効期限日ごとに管理する手間がなくなり、使ったら勝手に見えなくなるので、残機もシンプルに見えるようになった。


 1件選択して更新するところ。


 ここからpovoアプリにコードを転記するのは、これはもう、コピペする以外にどうしようもないのだが。。。

*

 Google AppSheet、すごい。参照するデータを指定すると勝手に解釈してそれっぽいアプリを作ってきて、そこへ機能を足したり引いたり調節したりする、という開発手順だ(だから、まずデータ構造ありきであって、そこをしっかり考えるところから始まる、という気はする)。ノーコード開発とはこういうことか! と、目からうろこの体験だった。しかも、作成したアプリは、10人までで使う分には無料で使えるという。こんな機能が無料で使えるなんて!!と驚いてしまう。──GASを初めて知ったときも、サーバで動くプログラムがこんなに簡単に作れるなんて! と思ったけど、…「プログラミング」という営みがどんどん民主化されてるんだなあ。

*1:あくまで「キャンペーン」なので、いつまで続くかわからないが…

*2:けちけちすることもできるし、大きく使いたいときには、「データ使い放題(24時間)」(330円)のようなトッピングがあるのも、povoの良いところだ。これのおかげで、私はデータ通信の使い方がだいぶ変わった。

*3:ギガ活で得たプロモコードをスプレッドシートで管理するGASを書いた - ck_fm0211のブログ

*4:これはGAS側で実現した。アプリ側でもできたのかもしれないが。【追記】GAS側でスプレッドシートの変更トリガーで更新のあった行に時刻を埋める、という方法を取っていたが、これだとアプリから更新した場合にスプレッドシートの更新が遅れる事象が何度か発生したため、アプリ側から現在時刻を渡す方法に変えた(その方法が当初はわからなかったためサーバ側でがんばっていたのだけど)。