営業最終日の繰り返し予定を 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. 使い方(最小構成)
とりあえず動かすだけなら、やることは多くありません。
- リポジトリを clone / コピー / Use this template
- Google Apps Script のプロジェクトを作成
- 設定ファイルを編集
- スクリプトを実行(+必要ならトリガ設定)
設定はこんな感じです。
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 は業務で触ったことがある
という人には、良いんじゃないかなと思っています。
リポジトリ
Discussion