ひびのログ

日々ではないけどログを出力していくブログ

GAS のスニペット

基本的にほとんどコピペで動くようになっているはず

Slack に Webhook 通知する

const sendWebhook = (webhookUrl, payload) => {
  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload),
  }
  UrlFetchApp.fetch(webhookUrl, options)
}

// Attachments を使うと表示名でメンションできる
const payload = {
  text: 'hoge にメンション',
  attachments: [{ color: '#fff',
    blocks: [{ type: 'section', text: { type: 'mrkdwn', text: '@hoge' } }],
  }],
}
sendWebhook(url, payload)

スプレッドシートを開く

// URL 指定で開くと楽&便利
const spreadSheetUrl = 'https://〜〜〜'
const ss = SpreadsheetApp.openByUrl(spreadSheetUrl)
// const sheet = ss.getSheetByName(sheetName) などでシートを取得する

TypeScript で書く・ビルドしてデプロイする

スニペットじゃないけど https://github.com/google/clasp が使える

祝日判定

const isHoliday = (date) => {
  const holidayCalendar = CalendarApp.getCalendarById(
    'ja.japanese#holiday@group.v.calendar.google.com'
  )
  const todayEvents = holidayCalendar.getEventsForDay(date)
  return todayEvents.length > 0
}

isHoliday(new Date())

休日(土日)も含めたもの

// 引数は new Date()
const isHoliday = (date) => {
  const day = date.getDay()
  if (day === 0 || day === 6) {
    return true
  }

  const holidayCalendar = CalendarApp.getCalendarById(
    'ja.japanese#holiday@group.v.calendar.google.com'
  )
  const todayEvents = holidayCalendar.getEventsForDay(date)
  return todayEvents.length > 0
}

Google カレンダーのイベントが終日かどうか判定

Day.js が必要 ID: 1ShsRhHc8tgPy5wGOzUvgEhOedJUQD53m-gd8lG2MOgs-dXC\_aCZn9lFB

複数にまたがった予定も終日判定にできるはず

// 終日かどうか
// 引数は Google カレンダーのイベント
// (CalendarApp.getCalendarById(calendarId).getEvents(startDate, endDate) で取得可能)
const isAllDay = (event) => {
  // 今日より前に開始
  const startDateTime = dayjs.dayjs(event.getStartTime())
  const isBeforeStart = startDateTime.isBefore(start) || startDateTime.isSame(start)
  // 今日より後に終了
  const endDateTime = dayjs.dayjs(event.getEndTime())
  const isAfterEnd = endDateTime.isAfter(end) || endDateTime.isSame(end)
  return isBeforeStart && isAfterEnd
}