どうも、フリーランスのITエンジニア兼ブロガー兼投資家のKerubitoです。
Googleカレンダーに予定を入れたら、他の人にそれをメールで知らせたい。
Google先生であれば、それぐらい朝飯前だろう。
そう思って調べてもそれらしい機能が見つからない。
うーん、あっても良さそうだけどないのであれば、仕方がない・・・。
自分で作るか。
そんなこんなでGoogle Apps Scriptで「Googleカレンダーの予定を他人にメール送信する」という機能を作ってみました。
どんな状況か
どんなシチュエーションか説明しておきます。
例えば、Googleカレンダーに「●月●日***会議」と予定を追加したとします。
この予定をある人たちに知らせたい。
ただし、その人たちはこの会議には出席しないので、予定への招待はしないんです。
予定へ招待すればメールが飛びますが、そうでないのでメールは飛びません。
メールで連絡したい人たちとはカレンダーを共有しています。
なので、カレンダーを見さえすれば予定は把握できるんです。
ただ、私がどのタイミングで予定を入れるのかがわからないので、いちいちカレンダーをチェックするのは面倒なんですよね。
特に直前に予定を入れた場合は。
「***の予定入れましたけど、確認してもらえました?」
なんていうメッセージをSlackで送らないといけない。
非常に面倒。
なので、予定を追加したら自動で関係者にメール送信したいというわけです。
Google Apps Scriptを使うことに
Google関係であれば、Google Apps Scriptで実現できるだろう。
ということで、面倒ですが作ってみました。
ちなみにGoogle Apps ScriptとはGoogleが提供するサーバー・サイドのスクリプト環境です。
面倒な環境構築などは不要でChromeやFirefoxといった、ブラウザベースで動かせます。
あえていうなら、必要なのはGoogleアカウント。
Google Apps Scriptでプロジェクトを作成
Googleアカウントにてログインした状態でGoogle Apps Scriptにアクセスします。
トップページの一番下までスクロールします。
すると画面左下に「Apps Script Dashboard」がありますので、これをクリック。
するとプロジェクトの一覧画面が表示されますので、左上の「新規スクリプト」をクリック。
エディタが起動しますので、ここに処理を記述します。
下準備終わり。
Google Apps Scriptで記述したソース
以下がソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | function sendScheduleToMail() { var calenders=CalendarApp.getCalendarById('***@gmail.com'); //特定のIDのカレンダーを取得 var startTime = new Date(); var endTime = new Date(startTime.getFullYear()+1, startTime.getMonth(), startTime.getDate(), startTime.getHours(), startTime.getMinutes(), startTime.getSeconds()); var checkTime = new Date(startTime.getFullYear(), startTime.getMonth(), startTime.getDate(), startTime.getHours()-1, startTime.getMinutes(), startTime.getSeconds()); var body = ""; var events = calenders.getEvents(startTime, endTime); for(var i=0;i<events.length;i++){ if((events[i].getDateCreated() - checkTime > 0) && (events[i].getDateCreated() - startTime < 0)){ body += "Name:" + calenders.getName() + "\nTitle:"+events[i].getTitle() + "\nTime:" + events[i].getStartTime() + "~" + events[i].getEndTime() + "\nDescription:" + events[i].getDescription()+"\n\n"; } } MailApp.sendEmail({ to: '***@gmail.com', subject: '1時間以内に追加された予定', body: body }); } |
やっていることは
・カレンダーを取得
・現在から1年後までの予定を取得
・1時間以内に登録された予定であればメールを送信
カレンダーを取得する際にはカレンダーIDが必要のようです。
getCalendarByIdの部分。
私の場合はGmailのアドレスのそのままでしたね。
このスクリプト言語、拡張子がgsなんでGoogle Scriptとのこと。
javaScriptを拡張したもののようで、javaScriptを知っていたら問題なさそう。
スクリプトのトリガーを設定
スクリプトを実行するトリガーを設定します。
エディタの「時計マーク」をクリック。
するとトリガー一覧画面に遷移します。
「トリガーを追加」をクリック。
トリガーの設定をします。
カレンダーの予定が追加された場合にスクリプトを実行したいので、イベントのソースを「カレンダーから」にします。
一番下でカレンダーのオーナーのメールアドレスを入力する必要がありますが、Googleカレンダーを使用する許可が必要になるためです。
Safariでやると「スクリプトの承認に失敗しました。ポップアップブロッカーの設定を確認してもう一度お試しください」とエラーが出てしまいました。
面倒なので、Chromeでやり直したらすんなりうまくいきましたね。
まとめ:Google Apps Scriptは便利
Google Apps Scriptのスクリプトにて「予定を入れたらSlackで連絡していた手間」が省けるようになりました。
おおよそかかった時間は1時間弱ですので、今後のことを考えたら時間をかけた価値はあったかと。
難点が、カレンダーの予定の詳細(時間など)を変更したり、削除しただけでメールが飛ぶところ。
適当に作ったので仕方がないですが、時間があったらもうちょっと賢くしたいですね。