📆

営業最終日の繰り返し予定を Google カレンダーで作りたくて、GAS でしくみ化した話

に公開

1. 始めに(なぜ作ったか)

勤怠の申請、領収書の提出、経費精算の締め。 こういう事務作業系の締切って、だいたい「営業最終日」に集中します。

毎月同じことをやっているはずなのに、

  • 気付いたら締切当日
  • Slack でリマインドされて思い出す
  • 下手すると翌営業日に怒られる

みたいなことを、何度も繰り返していました。

「これはもう意思の力でどうにかする話じゃないな」と思い、Google カレンダーに、営業最終日の予定を自動で入れるしくみを作ることにしました。
そうしてできたのが gas-work-calendar です。

2. gas-work-calendar とは

gas-work-calendar は、Google Apps Script(GAS)を使って、営業日ベースの予定を Google カレンダーに登録するためのスクリプトです。

  • clasp で管理する GAS プロジェクト
  • 営業日換算で「月初」「月末」の予定を作れる
  • GAS のトリガで、毎月自動実行できる

という、構成になっています。
「カレンダーに入れるだけなら手作業でもよいじゃん」と思われそうですが、 “営業最終日”という条件付きになると、毎回手でやるのは意外と面倒でした。

3. できること

営業日ベースで予定を作れる

  • 土日・祝日を除いた「営業日」で日付を計算
  • 「今月の営業最終日」「翌月の営業初日」などが指定可能
  • 独自の祝日も設定できる
    (会社独自の夏季休暇・年末年始休暇など)

「月末=31日」とは限らない、という当たり前だけど面倒な部分を任せられます。

トリガ実行で自動化できる

GAS の時間トリガを設定しておくと、

  • 毎月決まったタイミングで
  • 翌月分の予定を自動で登録
  • すでに登録済みの予定は重複しない

という動きをします。
毎月、営業最終日に「勤怠の申請をする」という予定を 自動で Google カレンダーに登録する
自分はこれだけで、月末のストレスがかなり減りました。

4. 使い方(最小構成)

とりあえず動かすだけなら、やることは多くありません。

  1. リポジトリを clone / コピー / Use this template
  2. Google Apps Script のプロジェクトを作成
  3. 設定ファイルを編集
  4. スクリプトを実行(+必要ならトリガ設定)

設定はこんな感じです。

src/reservations.config.js

export function getReservations(currentYearMonth, _nextYearMonth) {
  return [
    {
      type: 'businessDay',
      yearMonth: currentYearMonth,
      businessDayType: 'last',
      allDay: true,
      title: '月末締め作業',
      description: '勤怠締め、経費精算を行う',
    },
  ];
}

「今月の営業最終日に、終日予定として登録する」という指定を、かなり素直に書けるようにしています。

5. なぜこの構成にしたか

なぜ Google Apps Script?

Google カレンダーと連携するなら、やはり GAS が一番楽でした。

  • 認証で悩まなくてよい
  • サーバを立てなくてよい
  • 「とりあえず動く」までが早い

個人用途・業務効率化には、ちょうどよい選択肢だったと思っています。

なぜ clasp を使っている?

スクリプトとはいえ、

  • ローカルで管理したい
  • 修正やテストを気軽にしたい
  • GitHub にそのまま置きたい

という理由で clasp を使っています。
GAS を「ちゃんとしたコード」として扱える感じが、個人的に好きです。

設計の方針

シンプルで、あとから直しやすいことを一番重視しました。

すごく汎用的なツールにするつもりはなくて、
「自分が忘れないための装置」として必要なところだけを作っています。

6. 終わりに

もともとは、「毎月同じことで怒られたくない」という、かなり個人的な動機でした。

でも、同じように

  • 勤怠や経費をよく忘れる
  • カレンダーは毎日見る
  • GAS は業務で触ったことがある

という人には、良いんじゃないかなと思っています。

リポジトリ

https://github.com/shitake4/gas-work-calendar

Discussion