メインコンテンツへスキップ
見出し画像

Google Apps Script(GAS)とLINE Notifyを使って、Googleカレンダーの予定をLINEで通知する方法

    みなさん、こんにちは。まりです。
    家族の予定管理って大変ですね。特に子どもたちの習い事や学校の行事など、毎日把握しなければならないことがたくさんあります。

    家族の予定管理、もう迷わない!

    そんな中、ちょっとした工夫で生活をラクにできる方法があります。それは、Googleカレンダーの予定を前夜にLINEで通知してくれるシステムです。

    以前、Gmailで受信した子どもの習い事の入退室通知をLINEで知らせる方法をシェアしたところ、予想外にたくさんの方々からご反響いただき、大変嬉しく思いました。

    X/Twitterでは、なんと53万回以上のビューを獲得しました!

    子どもの習い事の入退室通知とか小学校の正門通過通知とか、それぞれ異なるアプリとGmailで届いていて、夫が全く確認しないのが嫌だったから、Google Apps Scriptでコードを書いて、全部LINEに通知が来るようにした笑。一箇所で管理できるのは思っていた以上によいかんじな気がする!

    — まり@国立大院卒理系専業主婦 (@m316jp2) January 31, 2024

    GoogleカレンダーとLINE Notify連携で実現!前夜通知システム


    今回はさらに別のLINE活用法、Googleカレンダーに登録した家族の予定を、前夜にLINEでお知らせする仕組みをご紹介します。

    設定方法を画像付きで丁寧に解説

    Google Apps ScriptとLINE Notifyを使えば、簡単にこの仕組みを設定することができます。 ぜひ最後までご覧いただき、ご家族の予定管理を便利にするヒントをお受け取りください。

    この小さな工夫で、予定を忘れず毎日を快適に過ごせるようになることでしょう。

    Google Apps Script(GAS)とLINE Notifyを使って、Googleカレンダーの予定をLINEで通知する方法

    毎日の家族の予定をスムーズに管理するために、Googleカレンダーの予定を前日の夜にLINEで通知するシステムを設定する手順を紹介します。この方法を利用すれば、忘れがちな予定も前もってリマインドされ、翌日の準備がぐんと楽になります。それでは、設定方法に入る前に必要な準備から見ていきましょう。


    必要な準備

    1. Googleアカウント:GoogleカレンダーとGASを使用するために必要です。

    2. LINEアカウント:通知を受け取るために必要です。

    3. LINE Notifyのトークン:LINEに通知を送るために必要です。LINE Notifyの公式サイトでトークンを生成します。



    1.LINE Notifyでアクセストークンを取得

    (1) PCでLINE Notifyのウェブサイトにアクセスします。

    (2) QRコードを読み取って、LINE Notify を友達に追加します。

    画像


    (3)LINEアカウントでログインした後、「トークンを発行する」を選択します。

    画像


    (4)発行するトークンの名前を入力し、通知を受け取りたいLINEグループを選択します。


    画像


    (5)「発行する」をおすと、トークンが生成されるので、これをコピーしておきます。


    画像

    以上でトークンの発行は完了です。

    2.Google Apps Scriptを使用してスクリプトを作成

    (1)Google Apps Scriptを開始:

    • Googleドライブにアクセスし、「Google Apps Script」を選択します。

    • 新しいスクリプトエディタが開きます。

    画像


    (2)スクリプトの入力:

    ここに、Googleカレンダーの予定を前夜にLINEで通知するためのスクリプトを入力します。基本的なスクリプトはインターネット上で見つけることができますし、私の書いたスクリプトをコピー・アンド・ペーストで大丈夫です。

    
    //A,LINE Notifyと接続する設定
    const LINE_NOTIFY_TOKEN = "**********************";
    const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
    
    // 複数のカレンダーのIDと名前
    const calendarInfo = [
      { id: '*************@group.calendar.google.com', name: '家族' },
      { id: '*************@group.calendar.google.com', name: '長男' },
      { id: '*************@group.calendar.google.com', name: '次男' },
    
    ];
    
    function sendMessage() {
      // カレンダーから取得する時間の設定
      const today = new Date();
      today.setDate(today.getDate() + 1); // 今日の日付に1日加算して明日に設定
      today.setHours(0); // 当日の午前0時
      today.setMinutes(0); // 分
      today.setSeconds(0); // 秒
      const tomorrow = new Date(today.getTime() + (24 * 60 * 60 * 1000)); // 翌 々日の午前0時
    
      // 予定を取得する日付の設定
      const monthNum = today.getMonth() + 1; // 月
      const dateNum = today.getDate(); // 日
      const day = today.getDay(); // 曜日
      const dayArray = ['日', '月', '火', '水', '木', '金', '土'];
      const thisDate = monthNum + "月" + dateNum + "日"; // 明日の日付
      let sendMessage = "\n" + thisDate + "(" + dayArray[day] + ")の予定は以下の通りです。\n\n";
    
      // 複数のカレンダーから予定を取得
      let events = [];
      calendarInfo.forEach(function(calendar) {
        var cal = CalendarApp.getCalendarById(calendar.id);
        var calEvents = cal.getEvents(today, tomorrow);
        calEvents.forEach(function(event) {
          event.calendarName = calendar.name; // イベントにカレンダー名を追加
        });
        events = events.concat(calEvents);
      });
    
      // 予定の内容を整形してメッセージに追加
      if (events.length === 0) {
        sendMessage += "予定はありません。";
      } else {
        events.forEach(function(event, index) {
          const title = event.getTitle();
          const startTime = formatDate(event.getStartTime());
          const endTime = formatDate(event.getEndTime());
          // ここでカレンダーの名前も含める
          sendMessage += `${index + 1}. [${event.calendarName}] ${title} (${startTime} ~ ${endTime})\n- - - - - - - - - - -\n`;
        });
      }
    
      // LINEに送信
      UrlFetchApp.fetch(LINE_NOTIFY_API, {
        "method": "post",
        "payload": "message=" + encodeURIComponent(sendMessage),
        "headers": {"Authorization": "Bearer " + LINE_NOTIFY_TOKEN}
      });
    }
    
    // 日時をHH:MM形式に整形する関数
    function formatDate(date) {
      return Utilities.formatDate(date, Session.getScriptTimeZone(), 'HH:mm');
    }

    (3)個人で設定が変更が必要な項目

    ・アクセストークンの設定: スクリプトの"************"のところに、LINE Notifyから取得したアクセストークンを書いてください。

    const LINE_NOTIFY_TOKEN = "**********************";

    ・カレンダーIDとその名前の設定: 我が家では、家族それぞれが個別のGoogleカレンダーを持っているので、各カレンダーからの予定をまとめて通知しています。それぞれのカレンダーIDをスクリプトに追加し、全員の予定を一つのメッセージにまとめて通知できます。

    *************@group.calendar.google.comのところは、ご自身のカレンダーIDを、'家族'や’長男’のところも、ご自身でわかりやすく変更してください。

    // 複数のカレンダーのIDと名前
    const calendarInfo = [
      { id: '*************@group.calendar.google.com', name: '家族' },
      { id: '*************@group.calendar.google.com', name: '長男' },
      { id: '*************@group.calendar.google.com', name: '次男' },
    
    ];
    

    カレンダーIDの確認の仕方がわからない場合は、こちらの記事が参考になります。

    (4)プログラムの実行:

    ・プログラムの保存:作成したプログラムを保存します。画面上部にある「名前を付けて保存」を選択し、プログラムにお好みの名前を付けます。

    ・プログラムの実行:保存後、エディタ上部のドロップダウンメニュー「関数を選択」から「sendMessage」を選択します。
    右隣にある実行ボタン(▶︎マーク)をクリックします。

    画像

    初めての実行時には、Googleからの許可を求められます。画面に表示される警告に惑わされず、「詳細」をクリックし、「(安全ではないページへ)移動」を選択して進んでください。
    続いて表示される画面で、プログラムに必要な権限を許可します。

    3.トリガーの設定


    スクリプトエディタの「トリガー」画面から、スクリプトが毎日特定の時間に実行されるように設定します。これにより、前日の夜に翌日の予定が自動的にLINEに通知されるようになります。

    画像

    スクリプトエディタの左上にある時計マークのアイコンをクリックし、「トリガー」を選択します。

    • 画面右下にある「+トリガーを追加」をクリックします。

    • 「実行する関数を選択」で「sendMessage」を選びます。

    • 「イベントのソースを選択」では「時間主導型」を選択します。

    • 「時間ベースのトリガータイプを選択」で「日付ベースのタイマー」を選びます。

    • 「時刻を選択」で「午後7字から8時」を選択します。(お好きな時間に設定してください。)

    画像

    こんな感じのLINEが届きます。

    画像

    まとめ:日常生活を変える小さな一歩

    この記事を通じて、Google Apps Script(GAS)とLINE Notifyを使った、Googleカレンダーの予定をLINEで通知する方法を詳しくご紹介しました。日々の忙しさの中で、家族の予定を見落としてしまうことは誰にでもあることです。しかし、このシンプルながらも強力なシステムを設定することで、そのような小さな忘れ物を減らし、毎日をもっとスムーズに過ごすことができます。

    技術の活用がもたらすもの

    • 時間の節約:自動化された通知システムにより、手動でカレンダーをチェックする手間が省けます。

    • 忘れ物の減少:前日の夜に翌日の予定をリマインドされることで、大切な予定を見落とすリスクを減らせます。

    • 家族間のコミュニケーションの向上:家族全員が予定を共有しやすくなることで、お互いの計画を理解し合い、サポートしやすくなります。

    さらなる一歩へ

    今回ご紹介した方法と応用例を基に、自分のライフスタイルや家族のニーズに合わせて、さらにカスタマイズを加えてみてください。例えば、特定の予定に関するリマインダーを設定したり、天気予報を予定通知に含めるなど、さまざまな工夫をすることで、このシステムの有用性を最大限に引き出すことができます。

    技術を活用して日常生活をより便利にすることは、決して難しいことではありません。この記事が、あなたの生活に役立つテクノロジーを導入するきっかけとなれば幸いです。日々の生活をもう一歩快適にするための試みを、ぜひ楽しんでください。

    ーーーーーーーーーー
    私の書いた本が出版されました!
    \Twitterからうまれた/
    ちょっと理系なおうち遊びの本

    Amazon 売れ筋ランキング  
    幼児教育 カテゴリー  有料Top100
    ベストセラー1位✨ になりました!
    ありがとうございます!

    KindleUnlimited, ペーパーバックでも読めます!


    画像



    この記事が参加している募集

     
     
     
    家庭にAIを導入したら、毎日が前に進み始めた! 著書『AI×家事』扶桑社 WOMAN AI AWARD 2026 受賞 miyazakimari.com NHK・日テレ・フジ・雑誌ESSE・LDK・クロワッサン掲載 講談社with classコラムニスト

    あなたへのおすすめ