GAS에서 Google 문서 댓글을 집계

14899 단어 GoogleAppsScriptgas

소개



자신은 해외판 게임의 QA에 관여하고 있습니다.

거기서는, 게임내 공지에 번역 미스등이 있었을 경우에 Google 문서에 본문을 기재해 코멘트를 붙여 결함 보고를 한다, 라고 하는 운용이 되고 있습니다.
이 방법은 문장중의 결함 개소 등을 알기 쉽습니다만, 티켓 관리되어 있지 않기 때문에 테스트 분석을 행할 때에 어느 정도의 결함이 발생하고 있는지 파악하는 것이 어려운 상태였습니다.

그래서 버그 수를 시각화하기 위해 코멘트를 집계하는 Google Apps Script(이하 GAS)를 작성했습니다.
문서의 댓글 목록을 가져오는 데 Google Drive API를 사용합니다.
필요한 속성을 배열에 저장하여 함께 스프레드시트에 내보냅니다.

요구사항


  • 집계하려는 문서의 URL을 함께 지정하여 여러 파일을 한 번에 처리합니다.
  • 응답을 포함하여 1 코멘트 1 행으로 시책 정보와 연결하여 집계 스프레드 시트에 기재한다
  • 각 시책에 대해 하나의 문서 파일이 생성됩니다
  • 시책 관리 시트에는 모든 시책 이름과 출시 날짜와 시간, 문서 파일의 URL이 포함되어 있습니다

  • 집계할 정보



    시책 관리 시트로부터 취득


  • 제품
  • 시책명
  • 출시 날짜 및 시간
  • 문서 URL



  • 댓글에서 가져오기


  • 기재 일시
  • FB 개소
  • 코멘트 기재자
  • 코멘트 내용
  • 응답 기사
  • 응답 내용



  • 구현



    URL을 지정하여 주석 목록을 가져옵니다. gs
    var url = "ドキュメントファイルのURL"
    //ドキュメントの閲覧権限が無いとエラーで止まるので該当のURLを返す
    try{
      var fileid = DocumentApp.openByUrl(url).getId();
    }
    catch(e){
      console.error(url);
    }
    var comments =Drive.Comments.list(fileid, {'maxResults':100}); 
    
    

    여러 파일을 정리하여 처리할 때 어떤 파일의 권한이 없어 읽을 수 없이 에러가 될 가능성이 있으므로, 에러가 된 파일 URL을 에러 로그에 돌려주도록 하고 있습니다.
    API에 전달하는 매개변수의 maxResults는 응답에 포함된 최대 주석 수입니다.
    디폴트라고 20까지 밖에 포함되지 않기 때문에 최대의 100을 지정하고 있습니다.

    코멘트를 얻는 API



    Google Drive API의 Coments.list에서 댓글 목록을 검색합니다.
    GAS로부터 이용하는 방법은 이쪽( 스프레드시트 댓글 가져오기 )의 기사를 참고로 했습니다.

    코멘트는 이쪽( Google Drive API:Comments )에 기재된 오브젝트 형식으로 취득할 수 있습니다.

    파일내에 복수의 코멘트가 있는 경우는 이하와 같이 각각의 코멘트 오브젝트가 items 배열내에 포함된 오브젝트로서 건네받습니다.
    {
         "items": [
            {コメントオブジェクト1},
            {コメントオブジェクト2},,,
        ]
    }
    

    필요한 속성을 검색하고 배열에 저장하고 내보내기



    코멘트 내보내기.gs
    
      var data = [];
      var head = ["プロダクト","施策名","リリース日時","URL"];
      var comments = {コメントオブジェクト};
     var maxCol =0;
      var cCount = Object.keys(comments["items"]).length; 
    
      //コメントの必要なプロパティを1行ずつ取得
      for(var i=0; i<cCount; i++){
        var tempArray =[];
        Array.prototype.push.apply(tempArray,head);
        var items = comments["items"][i];
    
        var formattedDate = Utilities.formatDate(new Date(items["createdDate"]), "JST", "yyyy/MM/dd HH:mm:ss"); //日時のフォーマットを RFC3339から変換
        tempArray.push(formattedDate); //記載日時
    
        // コメント箇所に空白を選択していてcontextのvalueがUndifinedなら空欄にする
        if("context" in items) { 
         tempArray.push(items["context"]["value"]); 
        } else {
         tempArray.push(" ");
        }
    
        tempArray.push(items["author"]["displayName"]); //記載者
        tempArray.push(items["content"]); //コメント内容
    
        var replyCount = Object.keys(comments["items"][i]["replies"]).length;  //i番目のコメントのリプライ数  
    
        //リプライを行の末尾へ追加
        for(var j=0; j<replyCount; j++){
          var repContent = items["replies"][j]["content"];
          if(repContent != ""){
            tempArray.push(items["replies"][j]["author"]["displayName"]); //リプライ者
            tempArray.push(repContent); //リプライ内容
          }
        }
        //最大の列数(reply数)を取得
        if(maxCol < tempArray.length){
          maxCol =tempArray.length;
        }
        data.push(tempArray);
      }
      data.reverse();
    
    //スプレッドシートに書き出す
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート名");
      var lastRow = sheet.getLastRow() + 1;
      data.forEach(function(item){
        item.length = maxCol
      })
      sheet.getRange(lastRow, 1, data.length, maxCol).setValues(data);
    
    
    

    리플라이가 몇번 계속되는지 코멘트마다 달라, 최대수도 미리 모르기 때문에 조금 번거로운 처리가 되고 있습니다.

    넘어진 포인트로서는 코멘트할 때 공백을 선택되어 있으면 context가 undifined가 되어 에러가 된 것입니다.
    스프레드시트에 내보내기 때문에 배열로 처리하고 있습니다만, 객체 그대로 처리하는 것이 더 스마트할지도 모릅니다.

    결과





    1 코멘트 1 레코드에서 스프레드시트에 데이터를 내보내는 중입니다.
    이것에 의해 QUERY() 함수등을 사용해 제품이나 시책수마다의 코멘트수(불량 보고수)를 가시화할 수 있어 구체적인 개선 제안을 실시할 수 있게 되었습니다.

    코멘트의 내용도 기록하고 있으므로, 텍스트 마이닝을 사용해 빈출하는 지적의 경향 등의 분석에도 도전하고 있습니다.

    좋은 웹페이지 즐겨찾기