動機
弊社では毎週金曜日に事業部のAndroidエンジニアが集まって定例を行なっています。各々のプロジェクトの進捗や困っていること、最近気になった技術記事の共有などが目的です。話す内容は、定例までに共通のGoogleDocumentに各々書いておきます。
共通のGoogleDocumentは前日にリードエンジニアが用意してSlackで通知しています。この作業自体は大した労力はいりませんが、業務に追われて忘れてしまった場合スムーズに定例を始められません。そこで自動化してしまおうというのが動機です。
コード
GoogleAppScriptを使います。コードの全容は以下です。
var postUrl = 'SlackのIncoming WebhookのURL';
var username = 'hogehoge'; // 通知時に表示されるユーザー名
var icon = ':hatching_chick:'; // 通知時に表示されるアイコン
function createAndroidMTGDocument() {
var fileName = "hogehoge";
var fileId = "テンプレートファイルのID";
var date = new Date();
date.setDate(date.getDate() + 1);
var formattedDate = Utilities.formatDate(date, "JST", "yyyyMMdd");
var f = DriveApp.getFileById(fileId);
//コピーを作成。作成したコピーを参照。
f = f.makeCopy(fileName + "_" + formattedDate);
f.setSharing(DriveApp.Access.DOMAIN_WITH_LINK, DriveApp.Permission.EDIT);
// Slack通知
var url = f.getUrl();
var message = "Android定例の議事録です。\n" +url
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);
}
なんとなく意味は分かるのではないかと思いますが、以下解説です。
解説
var fileName = "hogehoge";
var fileId = "テンプレートファイルのID";
ファイルの作成をしています。あらかじめ議事録のテンプレートファイルを用意しておき、fileIdにテンプレートファイルのIDを格納します。
var date = new Date();
date.setDate(date.getDate() + 1);
var formattedDate = Utilities.formatDate(date, "JST", "yyyyMMdd");
ファイル名のsuffixに定例の開催日を入れるための処理です。定例前日に議事録を作成するために今日の日付+1をしています。
var f = DriveApp.getFileById(fileId);
//コピーを作成。作成したコピーを参照。
f = f.makeCopy(fileName + "_" + formattedDate);
f.setSharing(DriveApp.Access.DOMAIN_WITH_LINK, DriveApp.Permission.EDIT);
テンプレートファイルをコピーしてアクセス権限の変更をしています。権限の変更についてはコチラを参照してください。
// Slack通知
var url = f.getUrl();
var message = "Android定例の議事録です。\n" +url
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);
Slackの通知はコチラのページが非常に分かり易かったので参照してください。
これをGoogleAppScriptで定期実行することで、議事録を作成してSlackに通知することができます。
おわりに
指摘大歓迎です。