0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASのgetAsがある日突然エラーを吐くようになり、現在も未解決

Posted at

要約

  • 半年ほど安定稼働していた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')

※ 画像のデータはサンプルです。
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からの公式的な回答はなく、みんな途方に暮れていた。
議論の最後にはこんな一文があった……
image.png
最後は神頼みか……

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?