お客さんに報告する資料を定期的に作ったりするの大変ですよね。
毎週「先週の資料をコピーして、日付フォルダ作って、リネームして移動」みたいな運用をしている週報の作成を自動化した + 毎回リンクをお知らせする手間がのこるので、作成したファイルへのリンクをslackに通知してもらうようにした時のメモです。
コード
function makeFolder() {
Logger.log("週報作っちゃうぞ!");
var success = false;
// 「週報」フォルダ
var rootFolder = DriveApp.getFolderById("your drive");
// 「週報」配下のフォルダ
var folders = rootFolder.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
var folderDateNum = Number(folder.getName());
var todayNum = Number(Utilities. formatDate(new Date(), "Asia/Tokyo", "yyyyMMdd"));
// 今日の分か未来分まで作成済み
if ((todayNum-folderDateNum) <= 0) {
Logger.log("作成済みです");
break;
}
// ここに来るってことは、まだ今週分は作成していないはず。
var todayFolder = rootFolder.createFolder(todayNum);
// 先週のフォルダ内にあるファイル全部取得
var files = folder.getFiles();
// ファイルを取得
while (files.hasNext()) {
var file = files.next();
// 週報以外をスキップ
if (file.getName() == "進捗報告_" + folderDateNum) {
break;
}
}
// 今週分作成
var todayFile = file.makeCopy("進捗報告_" + todayNum);
todayFolder.addFile(todayFile);
success = true;
// 消さないとコピーが残っちゃうので削除
folder.removeFile(todayFile);
break;
}
// slackに通知
postMessage(success, todayFile.getUrl());
Logger.log("作成終了");
}
// Slackに通知
function postMessage(success, url) {
var token = "your token"; // slackトークン
var channel = "shuhou"; //投稿先チャンネル名
var username = "週報bot"; //BOTの名前
var text = "週報の作成に失敗しちゃいました。ごめんなさい。今日は自分でコピーしてね!";
if (success) {
text = "週報ができたよ。" + url;
}
UrlFetchApp.fetch("https://slack.com/api/chat.postMessage?token=" + token + "&channel=%23" + channel + "&username=" + username + "&text=" + text);
}
感想
- 初めてGAS触りましたが、javascriptライクで直感的に操作できて、やりやすかった。
- 通知メッセージとかはもうちょっと考えたほうがよさそうですが、とりあえずこれで運用できてるので、いまはこのままにしてます。
-
@here
通知ってこれでできるのでしょうか?
参考
先人の知恵に感謝
Google Apps Scriptを使って定期実行するcronを作る
GoogleAppsScript Reference
Google Apps Scriptを用いてライブラリを使わずにSlackにGoogleサイトの変更通知を投稿する