작업 누출 방지에 Google Apps Script(GAS)로 Slack에 알림

소개



k. s. 로저스 의 후지모토입니다.

나, 태스크 누출이 많습니다.

우리는 GitLab을 많이 사용하기 때문에
GitLab의 issue에서 할당 된 것을 Slack에 알리려고합니다.

전제로,
원래 GitLab에서 이슈 목록을 볼 수 있기 때문에
그쪽을 매일 보도록 버릇하면 전혀 필요없는 작업입니다.
나는 게을리하기 쉽기 때문에 첫 번째를 통과하는 Slack에 통지함으로써 대책하려고 생각했습니다.

준비


  • GitLab API
  • Slack의 Webhook
  • 스프레드 시트

  • 위의 세 가지를 사용합니다.

    GitLab



    API에서 issue 목록을 가져옵니다.
    먼저 insomnia를 사용하여 테스트했습니다.

    위를 참고로 요청을 만듭니다.



    일부 마스킹 중이지만 문제없이 할당 된 문제를 얻을 수 있음을 확인했습니다.

    슬랙





    알림을 원하는 채널을 설정합니다.
    (당연히 #general에게 통지하지 않습니다, 나는 개인의 DM을 선택했습니다)

    webhook URL이 발급되므로 나중에 사용합니다.

    스프레드시트





    위의 스크립트 편집기를 사용합니다.
    쓰기는 거의 JavaScript입니다. ES6을 작성하는 방법에서 오류가 발생했습니다.
    마감일이 설정되어 있지 않은 것도 있었으므로, 9999/01/01 로 하고 있습니다.

    태스크를 Slack 보낼 뿐이라고 조금 외로운 것과 curl 명령을 cron으로 설정하면 GAS를 사용할 필요가 없어지므로
    Gitlab 스프레드시트에 기재된 + 스프레드시트에 나열된 작업을 함께 통보했습니다.
    function callSlack() {
        // GitLabのAPIからissueを取得
        var url = 'https://gitlab.com/api/v4/issues?assignee_username=[ユーザーID]&scope=all&state=opened&private_token=[PricateToken]'
    
        // Gitlab用メッセージを作成
        var message = 'Gitlab' + '\n';
        var fetchIssueList = JSON.parse(UrlFetchApp.fetch(url).getContentText());
        var issueArray = fetchIssueList.map(function (issue) {
            message += addMessage(issue.title, issue.due_date ? issue.due_date : '9999-01-01', issue.web_url);
            return [issue.title, issue.due_date, issue.web_url]
        })
        var headerRow = ['タイトル', '期日', 'URL']
        issueArray.unshift(headerRow);
    
        // 書き込むSheetを用意
        var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = spreadSheet.getSheetByName('gitlab')
        sheet.clear()
        var range = sheet.getRange(1, 1, issueArray.length, headerRow.length)
        range.setValues(issueArray)
    
        // その他用メッセージを作成
        message += 'その他' + '\n';
        sheet = spreadSheet.getSheetByName('other');
    
        var otherRange = ("" + sheet.getRange(2, 1, 10).getValues()).split(',');
        var otherRowLength = otherRange.filter(Boolean).length;
        var titleList = sheet.getRange(2, 1, otherRowLength).getValues();
        var dueDateList = sheet.getRange(2, 2, otherRowLength).getValues();
        var urlList = sheet.getRange(2, 3, otherRowLength).getValues();
        for (var i = 0; i < otherRowLength; i++) {
            message += addMessage(titleList[i], dueDateList[i], urlList[i] != '' ? urlList[i] : 'https://ks-rogers.co.jp/');
        }
    
        postSlack(message);
    }
    
    function postSlack(message) {
        var webhook = "[WebhookURL]";
        var options =
        {
            "method": "post",
            "contentType": "application/json",
            "payload": JSON.stringify({ "text": message })
        };
    
        UrlFetchApp.fetch(webhook, options);
    }
    
    function addMessage(title, dueDate, url) {
        var date = new Date(dueDate);
        return '[' + date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate() + '] <' + url + '|' + title + '>' + '\n';
    }
    



    시트 gitlab에는 다음과 같은 느낌의 목록이 있습니다.



    시트 'other'는 다음과 같이 준비됩니다.



    지정된 채널로 메시지가 전송되었음을 확인할 수 있었기 때문에
    매일 정기적으로 실행되도록 설정합니다.



    나는 일어나는 것이 느리기 때문에 점심 시간에 설정했습니다.
    근무 시간이 언제라도 좋은 것이 KSR의 매력이군요.



    마지막으로



    내용이 짧아져 버렸습니다만, 이쪽으로 끝입니다.

    처음에는 기한 가까운 것, 기한이 만료된 것만을 판정해 통지시키려고 생각했습니다만
    역시 전체가 보이는 편이 좋을까라고 생각 모두 통지시키기로 했습니다.

    할당된 작업의 양이 너무 엄청나게 느껴질 때
    아침에 전체, 낮에 기한을 판정으로 한 무언가를 통지시킨다・・・등 생각해 보고 싶습니다.

    「이런 일을 하고 태스크 누출을 방지하고 있어!」등이 있으면 꼭 가르쳐 주시고 싶습니다m(_ _)m

    Wantedly에서도 블로그 게시



    Tech 블로그에 더해 회사 블로그 등도 하고 있으므로, 신경이 쓰이는 분은 꼭 들여다 봐 주세요.
    htps //w w. 와서 dly. 코 m / 코 m 파니에 s / ks 로게 rs

    좋은 웹페이지 즐겨찾기