まだ中学生のブログ

スマホ関連、Google関連のことを書いてます。IT系勤務、既婚、精神年齢:中学生。

Googleカレンダーにシフトを簡単に登録する カレンダーに登録する

Googleカレンダーにシフトを簡単に登録する カレンダーに登録する

目次

  • 概要

  • 作成方法

    • Google Apps Script

    • カレンダーに登録するプログラムを書く

    • うまくイベントが作成されないときは

      • ログを確認してみましょう。

      • デバッグ実行してみる

  • おわりに

概要

シフト勤務の方で、「早番」「遅番」などをカレンダーアプリに登録している人は多いと思います。 これを全て手動で入力するのは面倒です。

シフト管理用のアプリは多々存在し、

  • 早番
  • 遅番

と、シフトを登録しておけば、早番はこの日とこの日、遅番はこの日とこの日、と簡単に入力できます。

しかし、Googleカレンダーと連携できる無料アプリというのが見つかりませんでした。 Googleカレンダー連携機能だけ有料のアドオンだったりします。

そして、その程度だったら自作するのが楽そうだったので作ってみました。

作成方法

完成イメージとしてはこんな感じ スマホからもパソコンからも登録できます。

本エントリーではこちらのエントリー

で紹介しました、シフト勤務表ページに投稿した際にGoogleカレンダーに登録する方法を紹介します。

Google Apps Script

プログラミングの経験がないと敷居が高そうですが、画像付きで紹介しますので、是非見てみてください。 わからないことがあればこちらのブログにコメントいただければ改善できるように努力します。

投稿フォームを作成しましたが、投稿した際に、何かをする、というのを実現できます。 "何かをする"を、Googleカレンダーにイベントを作成する、というのを作成していきます。

一度は自分で作成したフォームに登録してみてください。 まだカレンダーにイベントは作られないので、ダミーの値で構いません。

フォーム作成画面の「回答を表示」をクリックします。

↓こんな画面が表示されます。

ツール→スクリプトエディタを選択します。

↓こんな画面が表示されたら、

「空のプロジェクト」を選択します。

一気にプログラミングっぽくなりましたね。

もしなれていない方は、次の方法で簡単なプログラムを動かしてみましょう。 動くことが確認できると楽しくなります♪

次のような1行を追加してみます。

function myFunction() {
  Logger.log('シフト勤務登録を作るぞ!');
}

保存します。

名前をつけろと言われます。

「自動カレンダー登録」としてみました。

プログラムを動かします。

↑のボタンを押します。

うまく実行できたか確認してみます。

次のように、文字が表示されましたか?

カレンダーに登録するプログラムを書く

いよいよ本題です。

まずは、回答のシートの情報を確認します。

各列の列名を確認します。

↑の図では、

  • 西暦
    • B
    • C
  • 早番
    • D
  • 遅番
    • E

ですね。このアルファベットが重要です。

コードを次のように書き換えます。

function executeInPosting() {
  //==========================================================
  // 設定箇所
  //==========================================================
  var CALENDAR_ID = 'mada.chugakusei@gmail.com';
  var SHIFT1 = '早番';
  var SHIFT2 = '遅番';
  
  var YEAR_COLUMN = 'B';
  var MONTH_COLUMN = 'C';
  var SHIFT1_COLUMN = 'D';
  var SHIFT2_COLUMN = 'E';
  //----------------------------------------------------------
  
  var sheet = SpreadsheetApp.getActiveSheet();
  bottom = sheet.getLastRow();
  
  var year = sheet.getRange(YEAR_COLUMN + bottom).getValue();
  var month = sheet.getRange(MONTH_COLUMN + bottom).getValue();
  var shift1 = sheet.getRange(SHIFT1_COLUMN + bottom).getValue();
  var shift2 = sheet.getRange(SHIFT2_COLUMN + bottom).getValue();
  
  var shift1List = String(shift1).split(',');
  var shift2List = String(shift2).split(',');
  
  // シフト1を登録
  for (var i = 0; i < shift1List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift1List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT1, date);
    Logger.log('createEvent() is done.');
  }
  
  // シフト2を登録
  for (var i = 0; i < shift2List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift2List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT2, date);
    Logger.log('createEvent() is done.');
  }
}

// カレンダーに終日のイベントを作成
function createEvent(calendarId, title, date) {
  var calendar = CalendarApp.getCalendarById(calendarId);
  calendar.createAllDayEvent(title, date);
}

こちらがカレンダーに登録するためのプログラムです。 「設定箇所」の部分を自分の環境に合わせて変更します。

  • CALENDAR_IDは自分のGmailアカウントで大丈夫です。

  • SHIFT1とSHIFT2はカレンダーに表示されるタイトルです。

  • それ以外は先ほど調べた列名のアルファベットです。

続いて、投稿時にこちらのプログラムが自動的に実行されるようにします。

現在のプロジェクトのトリガーを選択します。

「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」をクリックします。

↑のように

実行 イベント
executePosting スプレッドシートから フォーム送信時

にします。

「保存」を押します。

承認します。

承認します。

以上で、準備完了です。

投稿した通り、自分のカレンダーにシフトが反映されることを確認してみてください。

うまくイベントが作成されないときは

ログを確認してみる

どこまで実行できているかがわかります。

デバッグ実行してみる

こちらのボタンでプログラムを動かすと、失敗した箇所を教えてくれます。

おわりに

プログラミングの経験がないとうまく動かなかった場合の対応が厳しいかもしれません。 しかし、一度作ってしまうと以降のシフト登録が非常に楽になります。

こちらのブログへコメントしていただければ可能な限りサポートしますので、うまくいかない方は遠慮無くコメントください。


以上