#はじめに
製作動機と実現したいことを読んで、あなたならどう作るかという視点で読んでいただいたです。で!もっといい案なりおすすめの技術があれば、コメントをいただければ幸いです。
#製作動機
私たち夫婦は、スケジュール管理アプリTimeTreeを使って、お互いのスケジュールを管理しています。私の妻がオンライン英会話アプリCamblyで、毎日レッスンをしているのですが、そのスケジュールを「TimeTree」に入れ忘れてしまうことが多く、夫婦の予定がブッキングして困っています。
「TimeTree」がAPIを公開しているということで、自動で予定を入力してくれるアプリを作ろうと思ったのが、製作動機です。
To-Be
「Cambly」で英会話レッスンの予約が完了したら、「TimeTree」に自動で予定が登録されること
#技術選定
Google App Script(GAS)
仕様
- 妻が「Cambly」で英会話レッスンを予約する
- レッスンの開始24時間前にリマインドメールがGmailに送られる
- GASを定期実行し、「Cambly」から来たメールを2時間置きに10件検索する
- 新規のレッスン予約の情報あれば、「TimeTree」に登録する
ソースコード
私の設計の落とし穴
- 「2時間置き10件Gmailからメールを取得する」という実装にしているため、2時間以内に「Cambly」からのメールを11件以上受信すると、「TimeTree」に予定が登録されない
- 「Canbly」からのリマインドメールが、開始24時間前にならないと来ないので、それまでTimeTree上に予定は登録されない
Q&A
Q. Gmailの受信をトリガーにして、GASを動作させれば良いのでは?
A. GASのトリガーに「Gmailの受信」がありませんでした。
Q. リマインドメールではなく、予約確定メールから予約情報を抽出した方が、スケジュール登録までのラグがないのでは?
A. 「Cambly」の設定に、予約確定メールを受け取る設定がないんです。
Q. 「Cambly」がWeb APIを公開していない?
A. 現時点では、ありません。
Q. わざわざスプレットシートにデータを保持しなくても、「TimeTree」から全スケジュールを取得して、予定がなければ追加する処理の方が良くない?
A. こちらも検討しましたが、処理が複雑になると考え、スプレットシートにデータを持つ設計としました。
これがあれば、楽できたのに実装できたのに!って感じたこと
- GASのトリガーにGmail受信をセットできること
- 「Cambly」側で予約完了メールを送信する設定ができること
コードを書いていて感じたこと
ソフトウェアエンジニアリングって極論、「誰かの抱えている課題を、IT技術を使って解決すること」だと私は考えています。今回、私が書いたコードも「妻の予定を把握できず、困っている私」の課題を解決するためのものです。解決するべき課題があって初めて、使う技術が決まるのだなと感じました。
「人のためになるコードを書き続けるエンジニア」、そんなエンジニアに私はなりたい。
参考
TimeTree API
GASマニュアル
【書籍】詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド