Googleカレンダーに六曜表示

以前は、紙の手帳とGoogleカレンダーを併用して予定を管理してました。
GooglePixel6aを使い始めてからはGoogleカレンダーだけで管理するのが習慣となりました。
デフォルトだと六曜が分からない
子どもの七五三参りの予定を組もうとしたときにGoogleカレンダーには大安の日がわかりませんでした。
GASでGoogleカレンダーに六曜を表示するスクリプトを組んでみました。
日取り決めに確認する六曜とは?
六曜ときくと、あまり聞き慣れない言葉ですが、大安や仏滅など6種類のその日の吉凶を占う指標のことをいいます。
縁起が良い日を選ぶなら大安
六曜は、先勝→友引→先負→仏滅→大安→赤口の順番でまわり、5回まわると30日。つまりおおよそ1ヶ月となります。
一番縁起の良い日は大安。悪いのは仏滅です。Googleカレンダーで大安と仏滅が確認できると子どものイベントごとなど、日取り決めもスムーズになります。
予定表をスプレッドシートで準備

今回はスプレッドシートを活用します。それぞれのセルに情報を入れていきます。
2030年までの六曜データは下記スプレッドシートをコピーしてご活用ください。
カスタム①:時間の設定
開始時間と終了時間の設定項目を設けてます。これは空欄だとカレンダーには終日予定として登録されます。
個人的に終日予定だと表示が濃いめになってしまうので、あえて0:00〜1:00の設定にしております。
カスタム②:イベントカラーの設定
一つのカレンダーIDにまとめて六曜の日程を入れるのもいいですが、カラーをつけるとより見やすくなります。
Googleカレンダーではイベントカラーとして11色設けてくれています。好きな色に設定しましょう。
| プロパティ | カラーコード | 
|---|---|
| PALE_BLUE | ラベンダー | 
| PALE_GREEN | セージ | 
| MAUVE | ブドウ | 
| PALE_RED | フラミンゴ | 
| YELLOW | バナナ | 
| ORANGE | ミカン | 
| CYAN | ピーコック | 
| GRAY | グラファイト | 
| BLUE | ブルーベリー | 
| GREEN | バジル | 
| RED | トマト | 
カスタム③:カレンダーの追加
一つの六曜データはをインポートするためのカレンダーをひとつ用意します。
カレンダー名は任意で設定してもらいスプレッドシートのJ列に同じカレンダー名を入力してください。
スクリプト設定手順

スクリプトは以下のとおりです。コピーしてお使いください。順番通りに作業すれば、Googleカレンダーで日取り決めの確認がスムーズになります。
function Create_Schedule() {
  // 読み取り範囲(表の初めの行と最後の列)
  const topRow = 2;
  const lastCol = 11;
  const statusCellCol = 1;
  const EventIDCol = 11; //イベントid
  // スケジュール表の列数(0から数える)
  const statusNum = 0;
  const startdayNum = 1;
  const startNum = 2;
  const enddayNum = 3;
  const endNum = 4;
  const titleNum = 5;
  const locationNum = 6;
  const descriptionNum = 7;
  const colorNum = 8;   //色の列
  const calnameNum = 9; //カレンダー名の列
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();// シートを取得
  let calendar = CalendarApp.getDefaultCalendar();// カレンダーの設定
  let lastRow = sheet.getLastRow();// 予定の最終行を取得
  const contents = sheet.getRange(topRow, 1, lastRow - topRow + 1, lastCol).getValues();// 予定の一覧を取得
  // 順に予定を作成
  for (let i = 0; i < contents.length; i++) {
    // 「済」と「ー」の場合は無視する
    if (contents[i][statusNum] === "済" || contents[i][statusNum] === "ー") {
      continue;
    }
    // 値をセット 日時はフォーマットして保持
    let startday = contents[i][startdayNum];
    let startTime = contents[i][startNum];
    let endday = contents[i][enddayNum];
    let endTime = contents[i][endNum];
    let title = contents[i][titleNum];
    let calendarName = contents[i][calnameNum];//設定するカレンダー名
    let options = { location: contents[i][locationNum], description: contents[i][descriptionNum] };// 場所と詳細をセット
    console.log(startday + " " + contents[i][titleNum]);
    try {
      let event;
      if (calendarName !== "") {
        let calendars = CalendarApp.getCalendarsByName(calendarName);
        if (calendars.length > 0) {
          calendar = calendars[0];
          console.log(calendars[0].getName());
        }
      }
      // 終了日時を作成
      if (endday === '') {
        endday = startday;
      }
      let startDate = new Date(startday);
      let endDate = new Date(endday);
      // 開始終了時刻が空欄なら終日で設定
      if (startTime === '' || endTime === '') {
        //予定を作成
        endDate.setDate(endDate.getDate() + 1);  
        event = calendar.createAllDayEvent(
          title,
          startday,
          endDate,
          options
        );
      } else {
        // 開始日時を作成
        startDate.setHours(startTime.getHours());
        startDate.setMinutes(startTime.getMinutes());
        endDate.setHours(endTime.getHours());
        endDate.setMinutes(endTime.getMinutes());
        // 予定を作成
        event = calendar.createEvent(
          title,
          startDate,
          endDate,
          options
        );
      }
      if (contents[i][colorNum] !== "") {
        let color = contents[i][colorNum];
        event.setColor(getColorNum(color));
      }
      console.log(event.getId());
      sheet.getRange(topRow + i, EventIDCol).setValue(event.getId());
      sheet.getRange(topRow + i, statusCellCol).setValue("済");// 予定が反映されたら「済」にする
    } catch (e) {
      
    }
  }
  function getColorNum(color) {
    let cnum;
    switch (color) {
      case "PALE_BLUE": cnum = 1; break;
      case "PALE_GREEN": cnum = 2; break;
      case "MAUVE": cnum = 3; break;
      case "PALE_RED": cnum = 4; break;
      case "YELLOW": cnum = 5; break;
      case "ORANGE": cnum = 6; break;
      case "CYAN": cnum = 7; break;
      case "GRAY": cnum = 8; break;
      case "BLUE": cnum = 9; break;
      case "GREEN": cnum = 10; break;
      case "RED": cnum = 11; break;
      default: cnum = 0; break;
    }
    console.log(cnum);
    return cnum;
  }
}- STEP1拡張機能をひらくスプレッドシートの拡張機能タブ
- STEP2Apps Scriptを選択
- STEP3スクリプト貼り付けプロジェクト名は任意
- STEP4アクセス権限の承認
- STEP5スクリプト実行
六曜カレンダーの反映完了

これにて作業完了です。日取り決めの際、Googleカレンダーひとつで確認できるようになりました。
大安、仏滅ぐらいが分かればいい、という方は準備したスプレッドシートで不要なものは除いてからスクリプト実行すれば良いと思います。
これからもデバイスで完結できるものを一つでも増やしていきます!



















