私の所属しているチームでは、毎朝各自がやることをGoogleドキュメントに記載して共有しています。
2月頃にドキュメント作成&Slackへの通知を自動化したので、隙間時間に投稿します。
なお、以下参考にしたページです。
要件
- 営業日の9時前に当日の日付を名前にもつGoogleドキュメントを作成してSlackにポストする
- 新規ドキュメントの内容は、前営業日のものをコピーしたものとする(ゼロから書くのは手間なので)
作業手順
結構前のことなので、内容漏れてるかもしれません。もし動かなかったらすみません…。
- GoogleDriveにいく
- ドキュメント保存先のフォルダにアクセスする
- URLからフォルダIDを取得する
-
https://drive.google.com/drive/u/0/folders/XXX
のXXX部分
-
- Slackの管理画面にいく
- 通知したいチャンネル用のincoming webhook urlを取得する
- Googleカレンダーにいく
- 設定 -> カレンダーを追加 -> 関心のあるカレンダーをさがすから
日本の祝日
にチェックをする- 祝日判定時にこのカレンダーを見に来る。
- GASダッシュボードにいく
- 新規スクリプトを作成する(適当に名前をつける)
- コードを書く
- 編集 -> すべてのトリガー -> 新しいトリガーを追加から実行スケジュールを登録する
- 実行したい関数を選択後、時間主導型、日タイマー、午前8〜9時とした
- GASのトリガーはcronみたいに厳格なものじゃなくて「8〜9時のどこかで実行するね」みたいなアバウトなものなので要注意。
コード
var postUrl = '<Slackのincoming webhook url>';
var username = '<Slack通知者名>';
var icon = ':page_facing_up:'; // 通知時に表示されるアイコン
var targetFolderId = '<作成したドキュメントを配置するフォルダのID>'
/**
* copy docs
*/
function createCopy() {
//ファイル名のベースとなる文字列
var fileName = 'my_team';
//コピー元となるドキュメントファイルのIDを取得
var fileId = ''
var files = DriveApp.getFolderById(targetFolderId).getFiles();
// 一番最初のファイルが前日作成したファイルとなる
if(files.hasNext()){
var file = files.next();
fileId = file.getId()
}
//ファイル名の日付部分作成
var date = new Date();
var formattedDate = Utilities.formatDate(date, "JST", "yyyyMMdd");
//コピー元のファイルを開く
var file = DriveApp.getFileById(fileId);
//コピーを作成。作成したコピーを参照。
var newFile = file.makeCopy(fileName + "-" + formattedDate);
return newFile;
}
/**
* post message to slack
*/
function postMessage(message) {
var jsonData =
{
"username" : username,
"icon_emoji": icon,
"text" : message
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
/**
* create docs bot
*/
function createDocBot()
{
// 日付取得 祝日は実行しない
var currentDate = new Date();
var calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
if (calendar.getEventsForDay(currentDate, {max: 1}).length > 0) {
return;
}
// 土曜日、日曜日は実行しない
var weekday = currentDate.getDay();
if (weekday == 0 || weekday == 6) {
return;
}
// ドキュメントをコピーして作成
var objDoc = createCopy();
// ドキュメントをフォルダ配下に移動させる
var docFile = DriveApp.getFileById(objDoc.getId());
var targetFolder = DriveApp.getFolderById(targetFolderId);
targetFolder.addFile(docFile);
DriveApp.getRootFolder().removeFile(docFile);
// slackへurlをpost
var url = docFile.getUrl();
var message = "朝共有メモ: " + url
postMessage(message)
}