在宅勤務が推奨される世界で生きるようになったのはいいものの、子供がいる我が家では、どちらかが子供の相手ができるようにビデオ会議の時間をかぶらせない運用をすることになりました。
しかし、セキュリティの関係でお互いの業務予定を完全に共有するわけにはいきません。
口頭で「何時からビデオ会議したいねんけど、予定空いてる?」などを毎日確認し合うのは大変です。
- いつ妻がビデオ会議を始めるのか
- いつ自分が子供の面倒をみないといけないのか
- お互いにバッティングしている予定はないか
などを自分のタイミングで好きな時に判断できるようにしたい。
そこで、Googleカレンダーの予定のうち、共有したい一部のみを、秘匿化しつつ時間だけ共有したい、みたいなことをしたくなりました。
※ Googleカレンダーの共有設定に「予定の表示(時間枠のみ、詳細は非表示)」オプションがあるので、一部に限定する必要がない方はそちらをやった方が早いと思います。
やりたいこと
- 業務アカウントに登録されてる予定の一部を個人アカウントにコピーして
- 個人アカウントを妻アカウントに共有する
- 予定を読み取りたいアカウント
- 業務アカウント1
- 業務アカウント2
- 業務アカウント3
- 媒介するアカウント
- 個人アカウント
- 予定を共有したいアカウント
- 妻のアカウント
Google App Script(GAS) でちょちょいのドン
まず、業務アカウントの向こう2週間分の予定を読み取り、タイトルでフィルター(XXXXを含み、YYYYを含まない)し、個人アカウントに「予定あり」予定として登録する
function createEvents() {
// カレンダーを取得
const myCal = CalendarApp.getDefaultCalendar(); // 個人アカウント
const cals = [
CalendarApp.getCalendarById('業務アカウント1のカレンダーID'),
CalendarApp.getCalendarById('業務アカウント2のカレンダーID'),
CalendarApp.getCalendarById('業務アカウント3のカレンダーID')
];
// 2週間
const now = new Date();
const twoWeeksFromNow = new Date(now.getTime() + (14 * 24 * 60 * 60 * 1000));
// 個人アカウントの2週間分の予定のうち、前にコピーした「予定あり」予定をいったん消す
let myEvents = myCal.getEvents(now, twoWeeksFromNow);
for (let mev of myEvents) {
if (mev.getTitle() === '予定あり') {
mev.deleteEvent();
}
}
// 各カレンダーから予定を取得し、条件で除外して、個人アカウントに「予定あり」で登録する
for (let cal of cals) {
let events = cal.getEvents(now, twoWeeksFromNow);
for (let ev of events) {
const startTime = ev.getStartTime();
const endTime = ev.getEndTime();
// 好きな条件
if (ev.getTitle().includes('XXXX') && !ev.getTitle().includes('YYYY')) {
continue;
}
myCal.createEvent('予定あり', startTime, endTime);
}
}
}
次に、毎日8時ごろに動くようにトリガーを設定する。
あとは個人アカウントを共有するだけ
Googleカレンダー上で、個人アカウントのすべてを妻アカウントに共有する設定を行ったら、完了です。
これで、口頭で「何時からビデオ会議したいねんけど、どう?」など聞かずに、カレンダーを見れば、
- いつ妻がビデオ会議を始めるのか
- いつ自分が子供の面倒をみないといけないのか
- お互いにバッティングしている予定はないか
などを判断できるようになりました。
たまにある、
- 「(午後4時のつもりで)14時から会議あんねん」
- 「わかった」
- 「あれ、14時なったで」
- 「え、あ、16時の間違いやった」
- 「ええー、16時からこっちが会議あんねんけど」
みたいなことも起きません。
無事、円満な在宅勤務生活を過ごしていけそうです。
あとは、高性能なノイズキャンセリングマイクのついたヘッドセットがあれば完璧です。