【GAS】予定をMS Teamsのチャンネルに流してくれるBotを作ってみた

JavaScriptのイベントに参加する前に作っていたのだけど、時間がなくてブログにはまとめていなかったので、改めてまとめた。この出来事もあってJSのイベントに参加しようと思い立った。

引き継いで思った「本当に共有カレンダー1つで可能?」

数週間前に同じチームの同僚から「他のチームからもリクエストあるし、オフィスの全員が予定をチェックできるよう共通のカレンダーを作ろうと思う」という内容のメールをもらった。これは、私も何度も挑戦していたことだったので、「ぜひやってみたら良いよ。但し、以下の点は理解が誤っていると思うので、ITベンダに教えてもらうなどして認識を改めといてね」という返信をした。

その後、彼女は2週間病欠。他のチームからのリクエストということもあって、さすがに早く対応する必要あるんだろう、と思って、代わりに対応しておくことにした。

求められていること

  • PCだけでなく携帯からもアクセスできること
  • ボスを含めたスタッフの外出予定がわかること

私が入社したころ、うちの会社にはExchangeがなく、残念ながらスタッフがカレンダーの使い方を知らなかった。Office 365への移行を機に「カレンダー利用しようよ」と言い続けたものの浸透せず、という経緯がある。

同僚から相談メールをもらったときには、「彼女が管理するって言ってるし、やりたいようにしてもらえばいっか」と思っていたけど、代理で対応することになって考えたときに、彼女のプランで運用可能なのかやや疑問な部分が出てきた。(もしかすると大丈夫なのかもしれないけど。)

全員ではなくても、例えば5人だけでも同じ日・同時刻に休暇や外出予定が入ってしまったら、非常に見にくい。

「じゃ、カレンダーを分ければいいじゃん」という話になるのだけれど、そうすると、リクエストされたこととは少し異なる感じ。多分、いろんなカレンダーを使い分けるなんてことできない。

カレンダーを分けても、全体スケジュールを把握する方法は?

「もういい加減、Outlookの使い方とか勉強したら?」と思うけど、期待するのは無駄。私に課されたミッションは、他の人にとってできるだけ簡単な方法で全体の予定を通知すること。

多分、リクエストしてきたチームが求めているのは、こういうことなんだと思う。

今日の予定をまとめて教えてくれるslackの秘書BOT
Slack Bot:毎朝Googleカレンダーの予定を通知してくる秘書ねこBotの作り方

この方法なら、複数のカレンダーの内容を一回で通知可能。

実際に作ってみよう

基本的には、前述のサイトの方法でできあがる。

で、ここで少し欲張ってしまうところが私の悪いとこ。「どうせなら1ヶ月とか1週間の予定があった方が良くない?」とカスタマイズすることにしてみた。

使うカレンダー

  • 上司の予定
  • スタッフの外出・休暇予定
  • 本社・地域本社のイベント
  • 事務所のイベント
  • 〆切日(提出物など)
  • オフィスの休業日

そして作ったスクリプトが、以下。

カスタマイズしていて、つまづいた点

地味にちょこちょこ悩んだ。以下が時間がかかった部分。

イベント終了日

出張など日をまたぐ予定の終了日がきちんと表示されない!何とかなったと思ったら、今度は1日長い。(4月1日〜2日までの予定が、4月1日〜3日までと表示されてしまう。)

もっとスマートな書き方があるような気がしているけど、現時点ではここまでで諦めた。

表示のされ方(改行されない)

Slackでは\nで改行できるのに、なぜかMS Teamsでは改行されなかった。Markdownが使えるから、スペース2つで何とかなるかなと試してみたけど、できない。「なんで???」と発狂寸前だったけど、よくよく考えたら、「Headingを設定したら自動的に改行されんじゃん」と思って##を付け足してあっさり解決。

メール通知版も作ってみた

ここまでのことで、オフィス内の予定共有は完了。ただ、上司の管下の事務所は他にもある。「せっかくだからこれを利用しちゃおう」と思い立つ。ただ、この場合、MS Teamに新たにチームを作って、関係のある人達を招待して、という手順が必要。

面倒くさい。(あまりにもチームが乱立しすぎちゃう。。。)

ということで、彼らがどれだけMS Teamを利用しているかもわからないので、メール通知ということにした。上司のスケジュールや〆切日など関係ありそうなスケジュールだけでいい。

ちなみにメールはテキスト形式のメール。これで事足りるので、これ以上のことはしていない。

送信はOutlookのアドレスから

Gmailから送るのだけれど、受信者にもそれが表示されると今後誤ってGmailにメールを送ってくるような事態にもなりかねない。メールのやり取りはOutlookで統一しておきたいので、Outlookから送ったことにする。

Gmail側で、Outlookメールの設定が必要。

GmailからOutlookのメールアドレスで送信する

これで、Outlookで使用しているアドレスを送信者に設定すればよい。

今後改善が必要な部分

とりあえず、私の分かる範囲でみんなの予定を入れて作ったので、長期的な運用は、予定をポンポンと入力していってもらう必要がある。

Google CalendarとOutlookのカレンダーの同期が課題というよりは、入力の仕組みをシンプルにすることが重要。(Google Calendarへの登録は、MS Flowを使えばいい。)

このあたりも、ChatBotの仕組みを利用できないかと考えている。

 

Advertisements

とうとうGASデビュー:スプレッドシートからカレンダーへ予定を登録

Google Apps Script(略してGASというらしい)の情報はこれまでもインターネット上で見る機会があったのだけど、Googleは検索エンジンとメールしか使っておらず、しかもメールに関してはサブもサブのメールアドレスといった位置づけ。Googleのアプリにお世話になることはきっとないだろう、と思っていた。
だけど最近、会社でGoogleアプリを使うことが禁止されていない、ということを知って、活用方法を考え始めている。

まずは、会社用のgmailアドレスの登録して比較的簡単なことから始める。

  • GoogleMapsによく使うレストランなどを登録。
  • GooglePhotosに写真をバックアップ1

ここまでは設定の問題なので、敷居が低い。次のステップは、Google Apps Scriptを用いて自分専用の便利機能を作る

多くの人たちが取り組んでいるのが、Spreadsheetで作成した予定一覧をCalendarへ一括登録する、というもの。確かに便利そうである。便利そうであるが、私、仕事で使ってるのは、Outlookなんだよなー。
ということで、Google Calendarへ登録後は、Outlook CalendarへのSyncの設定も必要そうである。

初心者の私にも理解できたGAS解説サイト

Google Apps Scriptの基本も分からない私が参考にしたのは次のサイト。非常にわかりやすい。

上記の最後「【コピペでOK!】スプレッドシートとカレンダーを連携してイベントを一括登録する方法」に載っているコードで私がやりたいことの95%は達成。

事前準備

デフォルトのカレンダーではなく予定のカテゴリー登録したいと考えていたので、Google・Outlookいずれでも新たにカレンダーを作成した。(今回作ったのは《OOO》2というカレンダー。ミーティングで聞いた上司や同僚たちの出張・休暇日程を登録しておこうかな、と。)

全日・時間指定のイベントどちらも同じシートから一括登録

モノグサな私が必要としているのは、ひとつのシートで、全日イベントと時間指定のイベントの両方を登録すること。なので、データテーブルを以下のようにして、紹介されているコードをほんの少し変更してみた。

Push to Calendar Table

全日の予定の場合には、【All Day Event】列に《y》と入力。時間(【Start Time】・【End Time】)は入力しない。

もっと上手な書き方あるのだろうけど、とりあえずこれで私のやりたかったことは出来たので、現状は良し。

Outlookへ登録:SyncじゃなくてFlowを使ってみた

Google CalendarとOutlookの連携方法もいくつか方法があるようだ。

Outlook で Google カレンダーを参照する

Office 365を使っているなら、上記【Google Calendarを購読する】の方法とほぼ同じことがMS Flowを使っても出来る。

Google Calendar to Office 365 Calendar

MS Flowを使って特定の添付書類をSharePointに格納するなど、Flowがお気にいりなので後者の方法でOutlookへ登録することにした。この方法だとクライアント変えても大丈夫なはず、多分。

今後の課題

同じシートで、編集や削除も出来たらいいかも、と思う。でも、それよりも盛り込みたいのは、同僚の名前や不在の種類(出張か休暇か)の列を作って、イベントタイトルの頭にその情報を付けることかも。

最終的には、《Google Spreadsheet》を使っている部分を《SharePointリスト》にしてGoogleを介さずに完結出来たら良いのだけど、現時点の私のスキルでは難しい。


  1. iCloud追加ストレージ問題も解消されるかもしれません(2018年2月現在、50GBで月額130円)。私はそれほど写真撮らないけど。 ↩︎
  2. 「Out of Office(不在)」カレンダー ↩︎