今回作ったもの

私達の会社では、スケジュール管理によく Google カレンダーを利用しています。

Google カレンダーを使うメリットはもはや挙げるまでもないくらい色々なところで語られているので割愛しますが、やはり使い勝手では他のスケジュール管理のアプリケーションよりもかなり優れている点が多いと感じています。

特に複数人で共同プロジェクトを行っているとき、特に重要なマイルストーンを設定しメンバー間で共有しておくことで、全員のスケジュールに対する意識合わせができたりするので大変重宝しています。

一方で、プロジェクトの細かいタスクや進捗管理にはスプレッドシートを使うことがよくあります。

JIRAAsana を使ったりする場合もあるのですが、ちょっとした規模の案件であったり、社外連携する機会があるようなプロジェクトでは、スプレッドシートを用いたタスク管理は有力な選択肢の一つとして活用しています。

このように、Google カレンダーとスプレッドシート、両方を組み合わせプロジェクトを進行することでだいぶ効率は上がっているのですが、使っていると時々「2つのツールを行き来して操作するのがちょっと手間だな」「タスクの二重管理で、誤って片方しか更新しなかったときどちらが正しい予定かわからなくなる」などといった問題に直面することがあります。

そこで今回は、スプレッドシートに書かれた内容で Google カレンダーを書き換えるプログラムを作成しました!

これにより、細かいタスク・スケジュールの編集はすべてスプレッドシートで行い、大きなマイルストーンだけ Google カレンダーに転記してあとは基本的には見るのみ、という状況にできたので、ツール行き来の手間がなくなったり、二重管理による情報差異なども無くすことができるようになりました。

結果として、細かいタスクも大きなタスク・マイルストーンもどちらも管理できる、そんなスケジュール管理法を確立することができました!

開発

iDeeer では、作成したプログラムは基本的にすべて公開しています!

今回作成したプログラムはこちらになります。
https://github.com/iDeeer/sheet_google_calendar

今回も GAS × TypeScript で、clasp を用いて作成を行っています。

実際に動いている様子はこちらをご覧ください。

プログラムの説明

今回のプログラムは、文量としてはそれほど多くないので、全て紹介していこうと思います。


// eslint-disable-next-line @typescript-eslint/no-unused-vars
function syncCalendar(): void {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  const calendarId = '';

  const calendar = CalendarApp.getCalendarById(calendarId);

  for (let i = 0; i < data.length; i++) {
    const eventTitle: string = data[i][0];
    const startDate: Date = new Date(data[i][1]);
    const endDate: Date = new Date(data[i][2]);
    calendar.createEvent(eventTitle, startDate, endDate);
  }
}

SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
この部分で、スプレッドシート上のシートを取得して、以降の処理を行えるようにしています。

sheet.getDataRange().getValues();
ここでは取得したシート上の具体的なデータの値を取得し、Google カレンダーに書き込む情報を取得しています。

CalendarApp.getCalendarById(calendarId);
ここで、書き込む対象の Google カレンダーを取得します。
今回は空文字列が calendarId に指定されていますが、実際に利用する際はここに対象の Google カレンダーの ID を記載します。
ID の取得方法は、Google カレンダーの右上の設定ボタンから設定メニューを開き、ID を取得したいカレンダーを選択し、カレンダーの統合のメニュー内にあるカレンダー ID を参照してください。

その後の for ループの中で、各行ごとにスケジュール名と開始/終了時刻を取得し、それぞれ Google カレンダーに追加する、といった処理を行っています。

今回は TypeScript で書いていることもあり、IDE 上でのコード補完などが行えるためだいぶ効率よくコードを書くことができました。

終わりに

今回は、GAS を使ってスプレッドシートと Google カレンダーを連携するプログラムの作成を行いました。

正直なところ、プログラムとしては非常にシンプルなもので、少しプログラムを勉強したことがある方であればすぐ書ける内容かとも思います。

しかし、実際に使ってみるとなかなか便利で、基本はスプレッドシートでタスク管理やガントチャート作成などを行い、その中で特に重要なものを別シートに書いて Google カレンダーに反映する運用にしています。

今回作成したプログラムは、実装的にも運用的にもまだまだ発展の余地があると思います。

特に運用面でカバーできることは多いと考えており、例えば今後、締切が近くて終わっていないタスクも Google カレンダーに転記し、リマインダとして使うなどといったこともこのプログラムを使えば可能です。

プログラムはシンプルでも、使い方の工夫次第で今以上に便利に使うことはできるので、新しいアイディアをこれからも出し続けていきます。

iDeeer では今後、技術的に難しいことにももちろんチャレンジはしていきたいのですが、それ以上に『実際に使える / あると嬉しいものを作る』といった点に重きを置いて活動を続けていきたいと思います!