【スケジュール管理】大まかに管理したいのでGoogleカレンダーをDiscordと連携させた

2023年11月28日

プライベートでブログを運営し。

仕事で会社のコンテンツ作成を行い。

さすがに並行する作業が増えてきたところ、紙での管理に限界を感じる様に。

基本的にはアナログ人間で一度書かないと覚えられないこともあり、ずっと紙(スケジュール帳やノート)を利用してきました。

で、ノートに色々アイデアとかも一緒に書き込んでみたり、内容によってノートを分けたりしてたんですが。

ノートを引っ張り出す度にあれもこれもとなり。

収集をつける方法として、スケジュール管理を行うことにしました。

といっても細かくスケジュールを付けて、その通りに行動するというのは合わないので。

その日にやることのリマインダーのようなものが欲しいなと。

なので、Googleカレンダーに予定を入力し、Discordに表示させることにしました。

なぜDiscordなのか

Discordを使い始めたきっかけは、とある配信にゲスト出演する時にアプリを用意して欲しいと言われたからで。

陰キャなので、それ以降使うこともありませんでした。

まぁスマホ用ではなく、PC用をダウンロードしたのもあまり使うことがなかった理由かもしれません。

と言っても、サーバーとチャンネルはメモアプリ代わりに使用していました。

テキストファイルが増えると管理が面倒なので、Discordぐらいのものがちょうど良かったのです。

ブログネタや参考サイトなどのメモで使用したり、画像を一時的に保存したり。

ということもあり、今回のスケジュール管理にでもDiscordを使用してみようと思ったわけです。

一応、他の方法も調べましたが。Discordは下記の点で十分でした。

以下の内容は2023年11月時点のものです。変わってたらすみません。

基本無料

やはり無料は大きいですね。

正直いつまで使うかわからないところもあったので。

お試しで使うなら、基本料金無料は大きいです。

でも個人使用なら十分なぐらいの機能も付いてます。

データ保存期間が無制限

テキストチャンネルのログの保存期間は基本無制限とのことでした。

ファイルの送信容量の制限は25MBありますが、アップロードされたものは基本残しておいてくれます。

これが結構便利で、適当に投げ込んでおいたものを探すのに便利。

いらなくなったら自分で削除はできますし。

自分は顔文字を返信して対応済かどうかがわかるようにしてますがw

管理もしやすい

個人用のサーバーを用意して、テキストチャンネルをテーマごとに分けておけば、上記の情報を探すのにも便利です。

ブログの参考記事のリンクをコメントと一緒に残すためのフォルダ分けのような感じです。

デバイス間の連携も楽

スマホからデータをアップロードする場合などでも、思いの外動作が軽くて助かってます。

今まではLINEなどを利用してましたが、どうも今の機種になってから動作があまりよろしくなくてですね。

困ってたところにDiscord。

・・・と、今回のスケジュール管理を考えるにあたり使ってみたら結構使いやすくて良かったのです。

これなら普段使いもできるなと思い、Googleカレンダーと連携させることにしました。

わざわざ連携させるの?

余談となりますが、Googleカレンダーを使うなら、通知もあるしリマインダーにもなるじゃないかと。

そのとおりです。

ですが、今回の目的は「前日までに決まっている予定・やろうと思っている予定を当日の朝に通知する」ことです。

何分前とかの通知はいらないのです。

もちろん、設定すれば同じような仕様にできるとは思いますが。

通知だけだとログのように残せないなと。

であれば、チャットログに残しておけるDiscordがちょうど良いなと。

自宅PC・スマホ・会社PCで必ず立ち上げる習慣もついたので、なおさら良いなとw

連携方法

前置きが長くなりましたが、Googleカレンダーに入力した情報をスクリプトで任意のDiscord上のテキストチャンネルに流すという感じで実装します。

botを自作するという感じのようですね。

一応、チャンネル(サーバー?)の管理者権限が無いと設定はできません。

Discord:ウェブフックを作成する

まずはスケジュール情報を受取るDiscord側の設定を進めます。

スケジュール情報を流すテキストチャンネルを選択すると、チャンネルの横に歯車マークが表示されるので、そこから「チャンネルの編集」画面へ。

歯車にカーソルを合わせると、吹き出しで「チャンネルの編集」と教えてくれます。

そこから左サイドメニューの「連携サービス」から「ウェブフックを作成」。

これでウェブフックが作成されます。

「ウェブフックURLをコピー」ボタンから使用するウェブフックの情報をコピーできます。

これでDiscord側はOKです。

Googleカレンダー:カレンダーIDを取得する

取得するというと大げさですかね。どこにカレンダーIDがあるかを調べます。

まずは右上の歯車からカレンダーの設定画面へ。

開いた画面で、Discordと連携させたいカレンダーを左メニューから選択。

開いたサブメニューから「カレンダーの統合」を選択。

ここに表示される「カレンダーID」を使用します。

これで、必要な情報の在り処はわかりました。

Google Apps Script:コードを書く

コードを書くのはGoogle Apps ScriptというGoogleのアプリケーション開発プラットフォームを使用します。

やっぱりアプリケーション間の連携はGASなんだなぁと調べてて思いました。

その調べている中で紹介されていた内容が、「明日の予定」だったり「今週の予定」だったり、「来週の予定」だったり。

自分がほしいのは当日の予定。

で、ちょっと使ってみたかったGoogleのAIであるBardさんにコードを調整してもらいました。

いつもは自分で書きながら内容を理解するのですが、この連携を実装した時は時間をあまりかけることができず、生成AIに頼ることになりましたw

//Bardさんが調整してくれました
function notifyDialy(){

  const CALENDAR_ID = "GoogleカレンダーのIDを入力";
  const WEBHOOK_URL = "DiscordのウェブフックURLを入力";

  var weekday = ["日","月","火","水","木","金","土"];

  var dt = new Date()
  dt.setHours(0);
  dt.setMinutes(0);
  dt.setSeconds(0);
  dt.setMilliseconds(0);

  //dt.setDate( dy.getDate() );//数値の変更で今日以外の予定を取得

  //var dt2 = new Date(dt.getTime())

  //var dayText = "";
  var calendar = CalendarApp.getCalendarById(CALENDAR_ID);
  var events = calendar.getEventsForDay(dt);

  var calendarName = calendar.getId()
  if( calendarName == undefined ){
    var message = "カレンダーなどない\n\n";
  } else {
    var message = Utilities.formatDate(dt, 'JST', '★ MM/dd(' + weekday[dt.getDay()] + ')') + "の予定\n";
    //message += Utilities.formatDate(dt, 'JST', '★ MM/dd(' + weekday[dt.getDay()] + ')') + "\n";
    for ( var j = 0; j < events.length; j++ ){
      var startTime = events[j].getStartTime();
      var endTime = events[j].getEndTime();
      var title = events[j].getTitle();

      if( startTime == null || endTime == null ){
        message += String(title) + " 終日\n";
      } else {
        message += String(title) + " " + Utilities.formatDate(startTime, 'JST', 'HH:mm') + " - " + Utilities.formatDate(endTime, 'JST', 'HH:mm') + "\n";
      }
      message += "----------------\n"
    }
  }

  const payload = {
    username: "送信者(ボットの名前)をご自由に",
    content: message,
  };

  UrlFetchApp.fetch(WEBHOOK_URL, {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(payload),
  });
}

CALENDER_IDに情報元となるGoogleカレンダーのIDを入力。

WEBHOOK_URLに受け取り側となるDiscordのウェブフックURLを入力。

最後の方のusernameにボットの名前を入力。こちらはDiscord上での送信者の表示名なので、ご自由に。

Bardが生成してくれた内容から各コードをチェックしたりしつつ(といってもJSはあんまり得意ではないので、ざっとです。)、問題なさそうなので、GASに貼り付けてデプロイ。

生成AIは便利ですね。

Google Apps Script:動作の設定をする

最後に動作のトリガーを設定します。

イベントのソースを「時間主導型」。

時間ベースのトリガータイプを「日付ベースのタイマー」。

時刻を・・・大体仕事を始める30分前ぐらいに届くような時間に設定しました。

これでGoogleカレンダーに入力したその日の予定が、Discordに流れてくるように。

スケジュール管理の一つの方法として

調べている中で、自分のように当日のリマインダーのようなスケジュール管理をしたい人はあまり多くないのかもしれないと思いました。

といっても、その日に行っておきたい事や大まかなスケジュールを把握したい場合には良いのではないかと。

今日はここまでやっておきたい!という目標を設定したり、それと連動してやらなければならないことを知り、1日の計画を立てる行動には合ってました。

Googleカレンダーの通知をオフにしておけるのは良いですね。予定の30分前とかに通知が来ると・・・ねぇ。

スケジュール管理のなにかのヒントになればと思います。

参考:Googleカレンダーの1日の予定を通知するDiscord BOT‐キッカーメモ