カミナシ エンジニアブログ

株式会社カミナシのエンジニアが色々書くブログです

Google Workspace カレンダーの大事っぽい予定に自動で色付けしてくれる GAS スクリプトを書きました

カミナシのトリ (@toricls) です。みんな大好き Google Apps Script (GAS) の小ネタです。

TL;DR

業務で使っている Google カレンダーの

  • 外部の方がいそうな予定
  • オフィスとかに出社が必要そうな(≒大好きな家から出なきゃいけなさそうな)予定

あたりに、自動で「色ラベル」を付けてくれるスクリプトを GAS で書きました。

以下のような感じで、いかにも他のと違って目立つよね!という感じに色を自動で付けてくれます。例えば僕のカレンダーだと、緑色のラベルを外部の方がいそうな予定(下のスクショだと「一次面接」)に、オレンジ色のラベルを家の外にでなきゃいけなさそうな予定(下のスクショは単なる飲み会)に設定するようにしています。

ある日のカレンダーのスクリーンショット。外部の方が参加する予定や物理出社が必要そうな予定に自動で色が付けられていてとても便利な様子です。
便利〜

いかにも便利そうですね。

(余談:「外部の方がいそうな予定」をハイライトしたかった理由はシンプルに遅刻やすっぽかしといった事故を避けるためですが、「家から出なきゃいけなさそうな予定」をハイライトするようにしたのは、移動時間を忘れて自宅で作業に集中しすぎてしまい気づいたら予定の開始時間でしたみたいなことを何回かやらかしたからです。)

続きを読む前に、「色ラベル」機能についての注意事項
  • 「色ラベル」機能を使うには Google Workspace の Google カレンダーが必要で、個人アカウントの Google カレンダーでは使えないようです
  • かつ、Google Workspace の特定料金プラン以上が必要なようです
  • この記事では色ラベルを「外部の方がいそうな予定」や「外出必要っぽい予定」のハイライトに使っていますが、本来は自分の時間の使い方を詳しく把握・分析するためのとても高尚で便利な機能らしいです

色ラベル機能の詳細については Google Workspace の公式ブログ日本語版の記事をどうぞ 💁‍♂️

GAS スクリプト

まずは GAS スクリプトを見たいぞという方のために↓に貼っています。実際の使い方や設定方法は次のセクション「セットアップする」をご覧ください。

ざっくりと何をやっているかを書くと、

  • 参加者に社外のメアドを持つ人が入っていたら「外部の方がいそうな予定」
  • 「面接」みたいなのが予定タイトルに入っていても「外部の方がいそうな予定」
  • 「出社」や「オフサイト」みたいなのが予定タイトルに入っていたら「家から出なきゃいけなそうな予定」
    • (僕は実装しませんでしたが、会議室が設定されてたら〜みたいなのも条件に入れるとかも良さそうですよね)

という感じで判断し、色ラベルをそれらの予定に設定しています。

社内外の人を判断するメアドドメイン、あるいは予定のタイトルから判定するための文字列リストはコードの中にベタ書きしてあるので、ご自身の都合の良いものに書き換えてご利用ください‪🤗‬

gist.github.com

(元々社内の Notion にオリャっと置いていたものを外部公開用にちょっと書き換えたものなので、もしかしたらうまいこと動かないかもしれません。その場合は Twitter なんかでご連絡いただけると嬉しいです🙏)

セットアップする

  1. まずは Google カレンダーで色ラベルを作ります
    • Google カレンダーの色ラベルは Google Workspace の組織レベルの設定ではなく個人レベルの設定なので、自分のアカウントで Google カレンダーを開きます
      • ワンショットの作業なのと、色やラベル名には個人の好みがあると思うので、ここは自動化しませんでした
    • 色ラベルを設定したいカレンダー予定を右クリックすると、以下のようなポップアップメニューが出てくるので、"+" から新しい色ラベルを作れます
    • 僕は外部の方がいそうなやつに使う EXTERNAL と、外出っぽいやつに使う IN-PERSON という2つを用意しました
      色ラベルを作成するためのポップアップメニューが表示されている様子
  2. GAS を開きます
    • ここです → https://script.google.com/home
    • ブラウザ画面右上の Google アカウントが Google Workspace で発行されたアカウントになっていることをしっかり確認します
  3. GAS で新しいスクリプトを作り、↑の Gist のコードをまるっと貼り付けます
    • もちろんカスタマイズはご自由に🛠
  4. この GAS スクリプトが Google Calendar API にアクセスすることを明示的に設定します
    • こんな感じ この GAS スクリプトが G-Cal API にアクセスすることを設定している様子
  5. エントリポイントが main になっていることを確認し、おもむろに ▷ Run をクリックして実行します
    • このタイミングで GAS に Google Calendar へのアクセス権限を与えるか聞かれる気がするので、与えてあげましょう
  6. 実行後、Execution Log を見ると既存の予定に自分が色ラベルを設定したやつについて、ColorId が出力されているはずなので、それをメモります
  7. GAS スクリプトのコードの序盤に定義されている以下の constants の値を、手順4で調べた ColorId で書き換え、GAS スクリプトを保存します
    • const colorIdExternalEvent
    • const colorIdInPersonEvent
  8. コードの最初に定義してある const ENABLE_PREPARATION_MODE を false に書き換え、GAS スクリプトを保存します
    • ここが true だと手順4のような挙動になり、実際には予定の色ラベルを設定せずに Execution Log だけを出力します
    • ここを false にすると、条件にマッチする予定に対して実際に色ラベルが設定されるようになります
  9. うまくいっていれば、あなたのカレンダーの予定たちに色ラベルが設定されているはずです!確認してみましょう‪🤗‬
    • (どの予定に色ラベルを設定したかは、GAS の Execution Log にも出力されます)
  10. あとは必要に応じてこのスクリプトを定期実行する感じですが、僕はとりあえず毎日真夜中頃に走るようにしてみました

このスクリプトの仕様や制約など

  • すでに色ラベルが設定されている予定の場合、書き換えは行いません
    • この GAS スクリプトは定期実行されることを想定しているので、せっかくカレンダーに手で設定した色ラベルが定期実行で上書きされると悲しいからです
  • Google カレンダーには「1つの予定に設定できる色ラベルは1つのみ」という制約があります
    • つまり、単一の予定に対して↑の「社外の人がいそうな予定」と「外出が必要っぽい予定」の色ラベルの両方を設定することはできません
    • 「社外の人がいそうな予定」と「外出が必要っぽい予定」両方の条件を満たす予定がある場合、この GAS スクリプトは「外出が必要っぽい予定」を優先的に判定します (func setLabelsOntoEvents の中の if 文の順番がそのまま優先順位になっているので、お好みに合わせて変更しちゃってください)

まとめ

僕は翌日の予定を前日の夜にダーッと眺めたり、あるいは週末に翌週分の予定をざっくりと確認したりして心の準備をするのですが、このスクリプトの運用を始めてからというもの、出社が必要な予定の時間にまだ家にいてあたふたするみたいなことがなくなった気がしています(個人の感想です)。

大事なミーティングをすっぽかしたくないみなさま、ぜひ魔改造してご活用ください!

トリ

👇カミナシでは絶賛採用中です!僕と一緒に GAS スクリプトを書いてくれる仲間を募集しています!👇