傘はあまり差したくない人

思ったことを書きたいだけの場所

【GAS】雨の日は退社時に「傘忘れないで」と予定を入れるようにした

朝は雨だったけど、帰りにはやんでいた。

そういうときは傘を忘れがち。これは全人類の悩み。

 

ということで少しでも傘忘れを防止するためにサクッとGASで書いてみた。

 

これまでは雨の日に傘を持ってきた場合、付箋に傘を忘れないようにメモっておいてPCに貼り付けておいたり、退社時間に傘を忘れないでと通知がくるようにGoogleカレンダーに予定を入れたりしてしのいできた。

 

めんどくせぇ。

 

付箋にメモったり予定を登録したりする手間、そもそもそれを忘れたりもする。

 

ということで自動化。

 

平日雨の日であれば問答無用で退社時に「傘忘れないで」と通知が来るようにする。

 

便利なアプリやらがある時代だが、ストレージをあまり圧迫したくないため今あるもので頑張るのだ。

 

Googleカレンダーと天気予報を連動

まずGoogleカレンダーと天気予報を連動させ、毎日の天気を取得することに。

 

weather.livedoor.com

 

はい。上記リンクにとび、自分の住んでいる地域の「ical」というリンクの上で右クリック。「リンクのアドレスをコピー」を選んでコピる。

 

f:id:y-a-d:20200131103347p:plain

 

次に自分のGoogleカレンダーを開き、他のカレンダーをURLで追加する。

「設定」の項目に「カレンダーを追加」があるので、そこから「URLで追加」を選ぶ。

 

URL入力欄に先ほどコピったURLを入力すればOK。「カレンダーを一般公開する」はもちろんなしでいい。

 

これでGoogleカレンダーに向こう一週間分の天気予報が表示される。

 

 

GASにコード記入

はい、コード書きます。

 

GoogleAppsScriptです。簡単便利。

 

Googleドライブにて「新規」を押すと以下が出てくる。

 

f:id:y-a-d:20200131104032p:plain

 

これの一番下、「その他」を選んで、そこに「GoogleAppsScript」がなければ「アプリを追加」から「GoogleAppsScript」をインストール。

 

インストールしたら一回画面更新しとく、しとかないと反映されないときある、F5キーを押しとこう。

 

そしたらまた「新規」から「その他」、今度こそ「GoogleAppsScript」があるはず。選ぼう。

 

そしたらエディターが開くのでプロジェクト名やらファイル名やらfunction名で遊ぶ。

 

そしてコードを書く。はい、以下。

 

 

function notForgetKasa() {
  // 自分のカレンダー
  var calendar = CalendarApp.getDefaultCalendar();
  //天気予報の予定が入っているカレンダー
  var weatherCalendar=CalendarApp.getCalendarById('天気予報のカレンダーID');
 
  var today = new Date();
  
  // 平日のみ
  var date =  today.getDay();
  if(1 <= today.getDay() && today.getDay() <= 5){
    var events = weatherCalendar.getEventsForDay(today);
    
    for (var i in events) {
      var title = events[i].getTitle();
      
      // 天気予報が雨か雪だった場合退社時の予定を登録
      if(title.match(/雨/) || title.match(/雪/)){
        var startStr = Utilities.formatDate( today, 'Asia/Tokyo', 'yyyy/MM/dd')+" 18:00:00";
        var startDate = new Date(startStr);
        var endStr = Utilities.formatDate( today, 'Asia/Tokyo', 'yyyy/MM/dd')+" 19:00:00";
        var endDate = new Date(endStr);
        calendar.createEvent("傘忘れないでね", startDate, endDate);
        break;
      }
    }
  }
}

 

「天気予報のカレンダーID」はGoogleカレンダーの設定から見ることができる。

特に何も考えず天気予報カレンダーを作った場合は

「○○の天気 - livedoor weather」

という名前になっているはずなので、そのカレンダーの設定を開いて下の方にある「カレンダーID」をコピって貼ればよろしい。

 

私の場合は月~金のみ動作すればいいので

 

var date = today.getDay();

if(1 <= today.getDay() && today.getDay() <= 5){

 

という分岐を入れているが、別に毎日でもかまわんというならいらない。

 

if(title.match(/雨/) || title.match(/雪/))

 

上記の分岐で天気予報に「雨」もしくは「雪」という文字が入っていればカレンダーに予定を入れるようにしている。

これで「雨のち晴れ」でも「曇り時々雪」でもなんとかなる。

 

var startStr = Utilities.formatDate( today, 'Asia/Tokyo', 'yyyy/MM/dd')+" 18:00:00";

 

これで当日の18時ってことになる。ほぼほぼ定時退社をしているので問題ない。残業があって帰り時間が曖昧な人もまぁなんとなくで入れておけばいいじゃないかな……。

ちなみに終了時間は適当。なんでもいい。

 

calendar.createEvent("傘忘れないでね", startDate, endDate);

 

これでカレンダーに予定を入れられる。

 

カレンダーの通知設定が30分前であれば17時半に「傘忘れないでね」とプッシュ通知が来るはず。そこんとこ調整したければカレンダーの通知設定を確認してほしい。

 

 

トリガーを設置

最後に、書いたコードを毎日実行してもらうためにトリガーを設置する。

 

上のメニューの「編集」から「現在のプロジェクトのトリガー」を選ぶ。

 

「トリガーを追加」を選び、設定。

 

f:id:y-a-d:20200131110458p:plain

 

関数が間違っていないか確認したら、「日付ベースのタイマー」を選び実行したいタイミングを設定。

退社前の時間ならいつでもいい。朝でもいいし夕方でもお好きに。

 

ここまでできたら完成!!

 

 

 

実際にちゃんと動くか確かめたいときは、

 

if(title.match(/雨/) || title.match(/雪/))

 

を本日の天気に変えて実行してみるといい。

 

これを応用すれば、気温何度以上の時は~とか色々できると思う。

 

何はともあれ、これで傘を忘れたらどうしようという思いからは解放されたなぁ。