Edited at

定例議事録を自動で作ってSlackに通知する


動機

弊社では毎週金曜日に事業部の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に通知することができます。


おわりに

指摘大歓迎です。