読者です 読者をやめる 読者になる 読者になる

てんちょーの技術日誌

自分がつまづいたこととかメモ

【GAS】GoogleAppsScriptを使ってイベントごとの持ち物をslackに通知するやつを作ってみた

はじめに

ちょいちょいイベントに参加させてもらう機会が増えてきました。

遠征が多いので、泊りがけが多くよく持ち物リストを作ります。

が、毎度作り直してEverNoteでチェック…そして追加忘れ、忘れ物…のパターンが何回もありました。名刺忘れたり…

ので、最近お気に入りのGASで作ってみました。

今回は割りと丁寧に書いてます。 詳しい方にとっては見にくいかもですが、ご了承ください…

作成したGASはGistにあるので、そちらを参考にしてもらってもいけるかと思います。

GASとは

GoogleAppsScriptといって、Google系のサービスとお手軽に連携できるスクリプトが書けます。

ライフハック的なことがしやすくて気に入っています。

自分だけのslackチームを作ってあるのでそこで色々遊んだりしてます。

ググったら色々見つかると思うので、細かいことは割愛します。

概要

Calendarに適当に予定を追加しました。

f:id:shop_0761:20170204023918p:plain

spreadSheetには適当に値を入れてあります。

f:id:shop_0761:20170204022220p:plain

今回は見やすく黄色くハイライトされているワードがカレンダーのイベント名に入っていると、その下の持ち物が表示されます。

こんな感じ

f:id:shop_0761:20170204023543p:plain

一応複数入っててもいけます。

f:id:shop_0761:20170204023656p:plain

もちろん列は増やせます。みやすさ優先でハイライトしただけ。

持ち物は複数ワードにまたがっても重複しないようにしてあるので安心。

手順

SpreadSheet経由で作ります。(連携がラクになるので)

GoogleDriveからSpreadSheetを作って、ツール→スクリプトエディタ を選択。

f:id:shop_0761:20170204022039p:plain

するとスクリプトが書けるページが開きます。

参考

ascii.jp

GASのコードはこちら。このまま貼り付けておっけーです。

gist.github.com

ちょい足ししなきゃいけないことがあります。

コードをちょっと書き換えるところ

tokenを追加

“tokenを貼る"のところには使いたいslackのtokenが必要です。 slackにpostするのに使います。

参考

qiita.com

var token = "xoxp-hogehoge";

てな感じになります。

channel_idを追加

post先のチャンネルを入れます。

var token = "random";

とか

botNameを追加

雰囲気を出すためにbotの名前を入れます。

var botName = "もちものチェックやさん";

カレンダーを指定する

Google CalendarにはIDがあるので、それが必要です。

参考

tonari-it.com

これを"カレンダーIDを入れる"のところに入れます。カレンダーIDがhogehoge@gmail.comの時は

 var calendar = CalendarApp.getCalendarById("hogehoge@gmail.com");

こんなかんじ。

GAS側の設定

ライブラリを追加

Slack用のライブラリを追加します。

スクリプトエディタのリソース→ライブラリへ

M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO

を検索して、最新版を選択します。

f:id:shop_0761:20170204025637p:plain

参考

qiita.com

Triggerを追加

GASは指定タイミングで関数を実行できるTriggerなるものがあるので、追加します。

スクリプトエディタのリソース→現在のプロジェクトのトリガーへ

毎週月曜でよければこんな感じで

f:id:shop_0761:20170204025957p:plain

毎日設定にもできますが、そのときはスクリプト

var checkDayNum = 7;

を調整してください。

デフォルトが7なのでこのまま毎日設定すると、毎日一週間先の通知が"ダブって"postされます。

ので、1とかにするのがよいかもです。

運用のしかた

こんな感じでチェックを入れて使うのがいいかと思います。

f:id:shop_0761:20170204030645p:plain

TimeStampベースで、ログを取って、全てチェックが入ったらそのpostを消す…みたいなことをしてもよかったのですが、 ちょっと面倒だったので気が向いたり需要がありそうなら作ります…

一応対象チャンネルを一掃する clearSlackMessage関数があるので、これを上手く組み合わせて使うとか…

おまけ

今回たまたまフライトの予定がカレンダーにあったので、フライトの度に持ち物通知されても…とおもったので、 それだけチェックしないイベントにしてます。

あと

getItemListAndPost(events[idx].getTitle(), false);

これをfalse→trueにすると、A列の内容がデフォの持ち物として表示されるようになるので上手く使うと便利かも。 モバイルバッテリーとか充電器とか共通の持ち物みたいな使い方とかできそう。

まとめ

思いつくまま作りました。コメントはそれなりに頑張って書きました。 なにかあれば@とかにご連絡ください。

GASは早くGooglePhotosに対応して欲しい。GAS側からGoogleDriveの指定フォルダにある画像でアルバムとか作りたい。