GAS의 getAs가 어느 날 갑자기 에러를 토하게 되어 현재도 미해결

요약


  • 반년 정도 안정 가동하고 있던 GAS(Slack에의 그래프 자동 투고)가 갑자기 에러를 토해, 실행되지 않게 되었다
  • 빌드 된 그래프를 지정된 파일 형식으로 변환 getAs 잠재적 인 버그가있는 패턴
  • 해외에서도 유사한 사례가 종종 발생하고 있으며, 사용자는 엄청난 삶을 살고 있습니다

  • 어느 날 눈치챘다



    당사에서는 매일 그래프화한 KPI를, GAS를 이용해 Slack에 통지하고 있다.
    그 그래프는 특정 채널·특정 시간에 자동 투고되는데…

    게시되지 않은, 그렇다면 ......?

    확인해 보니 일주일 약 정도 투고되지 않았다.
    당황해 GAS쪽을 확인해 본다… … 역시 에러를 토하고 있었다.
    これらの列は範囲外にあります。 at myFunction(コード:100)
    당연히 낯선 오류였다. 해당 행을 보러 간다.
      // sample code
      const sheet = SpreadsheetApp.getActiveSheet();
      const range = sheet.getRange("A1:B13");
      const chart = sheet.newChart().addRange(range).asComboChart().build();
      const chartImage = chart.getAs('image/png')
    
    

    ※ 화상의 데이터는 샘플입니다.


    여러가지 시행착오한 결과, setPostion() 라는 함수를 추가하는 것으로 잘 되는 것을 알 수 있었다. 이 함수는 생성한 그래프를 어딘가의 시트에 삽입하고 싶을 때 그 셀 위치를 정하는 함수이다. 원래 코드에서는 Slack에 그래프 이미지를 보낼 뿐이었기 때문에 이용하지 않았다.
      // 修正後
      const sheet = SpreadsheetApp.getActiveSheet();
      const range = sheet.getRange("A1:B13");
      const chart = sheet.newChart().addRange(range).asComboChart().setPostion(1,3,0,0)build();
      const chartImage = chart.getAs('image/png')
    
    

    이 함수를 추가하면 getAs()에서 오류가 발생하지 않습니다.
    그러나 setPostion() 가 없어도 지금까지 안정적으로 실행되고 있었고, 왜 갑자기 에러가 되었을 것이다.

    그것만이 아니다. 투고 후 그래프 이미지가 보기 좋지 않다.
    위의 코드는 샘플을 위해 간소화하여 기재했지만, 실제 코드는 그래프의 외관을 좋게 하기 위해, 여러가지 설정을 더하고 있었던 것이다. 그런데 setPostion() 를 추가하면 그 설정이 전혀 효과가 없어져 버리는 것 같았다.

    setPostion()의 추가로 에러는 나오지 않게 되었지만…



    Slack에 그래프 이미지를 투고할 수 있어도, 외형이 너무 나쁘기 때문에 사용하는 것이 되지 않는다.
    여러가지 조사한 바, 해외에서도 같은 사례가 발생하고 있는 것 같고, google의 issuetracker에서 같은 논의가 되고 있었다.
    결론으로서는 아마 GAS의 잠재 버그일지 모르지만, google로부터의 공식적인 대답은 없고, 모두 엄청나게 살고 있었다.
    논의의 끝에는 이런 문장이 있었다…

    마지막은 신 부탁인가…

    좋은 웹페이지 즐겨찾기