スプレッドシートシートを使った日報BOTを作ってみた

## はじめに
日報とスケジュール管理を融合したBotツールをTypeScriptで開発しました。
すべてスプレッドシート上で操作できますのでプログラムが苦手な人でも使えることが特徴です。
ChatWorkとの連携を想定しておりますが、ソースコードを修正（追加）することでSlackなどにも差し替えできるクラス設計にしてあります。

## 開発環境
- Google Apps Script
    - claspを使ってTypeScriptで開発したものをGoogleAppsScriptにコンバートかけています

## ソースコード
https://github.com/gascreator20/DailyReportBot
※claspの利用し、TypeScriptでコーディングしたものになります

## スクリプト ID
1CK3EqicaVVshHUCDZn-0B6mtFhq15m3U6Im62gXkSNEZDtF-7XcLCw37

## 下準備
1. デモページの内容をExcelとしてエクスポートします
2. 1でエクスポートした内容を新規のスプレッドシートにインポートします
3. 日報Botのライブラリを2で作成したスプレッドシートに取り込みます
4. 下記スクリプトを貼り付けます

```
/**
 * カスタムメニュー
 */
function onOpen() {
    var ui = SpreadsheetApp.getUi();
    ui.createMenu("日報報告機能")
        .addItem("本日分の日報を用意", "createTodayTemplate")
        .addItem("次回分の日報を用意", "createNextDayTemplate")
        .addItem("作業予定記入チェック（当日分を確認）", "requestTodayPlanError")
        .addItem("朝会の実行", "morningStart")
        .addItem("作業報告記入依頼", "requestReportWrite")
        .addItem("作業報告", "reportCheck")
        .addItem("作業報告違反のチェック", "reportErrorCheckOnly")
        .addItem("次回の作業予定記入依頼", "requestNextDayPlan")
        .addItem("作業予定記入チェック（次回分を確認）", "requestNextDayPlanError")
        .addItem("終業報告", "endOfWorkReport")
        .addItem("特定のセルの内容を一斉報告", "targetCellReport")
        .addItem("本日の報告トリガーをセット", "setReportTrigger")
        .addItem("トリガーを初期化", "initializationTrigger")
        .addItem("実行トリガーをすべて削除", "deleteTrigger")
        .addItem("報告トリガーを削除", "deleteReportTrigger")
        .addItem("スプレッドシートIDの読み込み", "readSpreadsheetId")
        .addItem("自由発言の実行", "freedomWording")
        .addToUi();
}

/**
 * テンプレートシートを用意する
 */
function createTodayTemplate() {
  DailyReportBot.createTodayTemplate();
}

/**
 * テンプレートシートを用意する
 */
function createNextDayTemplate() {
  DailyReportBot.createNextDayTemplate();
}

/**
 * 作業予定エラー検知（当日）
 */
function requestTodayPlanError() {
  DailyReportBot.requestTodayPlanError();
}

/**
 * 朝会実行
 */
function morningStart() {
  DailyReportBot.morningStart();
}

/**
 * 作業報告記入依頼
 */
function requestReportWrite() {
  DailyReportBot.requestReportWrite();
}

/**
 * 作業報告を行う（エラー検知および成功者の報告）
 */
function reportCheck() {
  DailyReportBot.reportCheck();
}

/**
 * 作業報告エラーのみを行う
 */
function reportErrorCheckOnly() {
  DailyReportBot.reportErrorCheckOnly();
}

/**
 * 翌日の作業予定記入を要求
 */
function requestNextDayPlan() {
  DailyReportBot.requestNextDayPlan();
}

/**
 * 作業予定エラー検知（翌日）
 */
function requestNextDayPlanError() {
  DailyReportBot.requestNextDayPlanError();
}

/**
 * 終業報告
 */
function endOfWorkReport() {
  DailyReportBot.endOfWorkReport();
}

/**
 * 特定セルの内容を送信する
 */
function targetCellReport() {
  DailyReportBot.targetCellReport();
}

/**
 * 本日の作業報告用のトリガーをセットする
 */
function setReportTrigger() {
  DailyReportBot.setReportTrigger();
}

/**
 * トリガーを初期化する
 */
function initializationTrigger() {
  DailyReportBot.initializationTrigger();
}

/**
 * セットされているトリガーを削除する
 */
function deleteTrigger() {
  DailyReportBot.deleteTrigger();
}

/**
 * 報告トリガーを削除
 */
function deleteReportTrigger() {
  DailyReportBot.deleteReportTrigger();
}

/**
 * スプレッドシートID、URLを読み込む
 */
function readSpreadsheetId() {
  DailyReportBot.readSpreadsheetId();
}

/**
 * 自由ワード
 */
function freedomWording() {
  DailyReportBot.freedomWording();
}
```

## 使い方
説明書付きのデモ日報Botを下記に添付しております。
こちらのスプレッドシートをファイルごとコピーし、設定値などを自分用にカスタマイズして使用下さい。
詳細な使い方について、デモ内の説明書をご確認下さい。

## デモ
※閲覧できない場合はGoogleアカウントを一度ログアウトしてからお試し下さい
https://docs.google.com/spreadsheets/d/1jtq-RoH7gxZfDo0tdCjdrduLLcHiuasM3HkpvRPDprU/edit#gid=999486528

## 補足
カスタムメニューが機能しない場合は、Chrome V8モードの無効化をお試し下さい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636565/1e978477-aa40-62d0-ce65-4957500e33d1.png)

## 終わりに
不具合等ありましたらコメントなどいただけると幸いです。