株式会社スマレジの開発部でスマレジのサーバサイドを作っています

electron+react+gas+spreadsheetでgoogle calender用のスケジューラーを作る(1)

こんにちは!株式会社スマレジ、開発部のmasaです。 御堂筋のイルミが今年も始まっていますねー!masaも昨日買い物の帰りに眺めながら歩いていました。 まだ、葉っぱが散っていないのですが、それでも結構しっかり光っているのがわかるのが面白いです。

さて、今回はタイトル通り、このブログで使っていることを詰め込んで、開発をしているのでそのお話を。

やりたいこと

プロジェクトを進行していると、「この作業毎回必要だな」と思うような、いわゆるWBSに反映させたい内容が出てきます。 例えば、下記のようなこと。

  • テスト期間中に、パフォーマンスツールやバグ監視ツールを見て、テスト環境でエラーが出てないかとか、負荷が安全値内か確認する
  • 工数の着地やリリースのための事務作業(特にいつまでにやらないといけないのか)

こういったことをもれなく、ダブりなく、やるべき時にやりたいわけです。(たまにもれそうになってヒヤッとする) そのために次のバージョンの作業について、何をするか検討している時に、こういった毎回発生するものについてはスプレッドシートでリスト化して、そのリストベースでGoogleカレンダーに登録しちゃいたい、と言うのが今回のやりたいことです。

要素技術

参考文献という名前の過去ブログ

Electron + Reactの過去記事

masa2019.hatenablog.com

GASは今回はAPIを使うので、外部会員連携の時のブログが使えそうです。

masa2019.hatenablog.com

GASでgoogle calenderに予定を登録

参考リンク↓

developers.google.com

これは簡単。

  const calendar = CalendarApp.getCalendarById("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com");
  calendar.createAllDayEvent("test event all day", new Date("2022-12-11"));
}

ここではグループ予定にタスクを追加しています。(PJメンバー全員に見せたいので) グループ予定のID(@group.calendar.google.comの部分)については、下記画像の「設定と共有」を開いて、

「カレンダーの設定」の下の方に行くと「カレンダーの統合」があって、そこにあります。

上のソースは全日のタスクを入れる例ですが、時間指定も可能です。 実際にこれを実行してみると、下のような感じでタスクが登録されます。

ただし、グループ予定に追加できるのはそのグループの管理者のみなので注意が必要です。 ただ、管理者ユーザ実行扱いでウェブアプリとして公開(doGet,doPost)した場合は、その公開範囲に応じて実行可能なようなので、 リクエストに認証用の秘密鍵をつけておくか、別にトークン発行用のAPIを作って、スクリプトプロパティを使って認証するのが安全そうです。