意外とハマる! Google Apps Script で関数が期待通りに呼び出されない場合の確認ポイント

2024.03.16

こんにちは、CX 事業本部製造ビジネステクノロジー部の若槻です。

Google スプレッドシート上の処理を自動化する際に便利なのが Google Apps Script です。

Google Apps Script では、スクリプトファイルの中に関数を定義して、それを呼び出すことで処理を実行することができます。

今回は、最近 Google Apps Script による開発をしている時に、関数が期待通りに呼び出されない(想定と異なる関数が呼び出される)ことがあったので、確認ポイントを書き残しておきます。

呼び出したい関数が指定されているか確認する

事象

myFunction1myFunction2 を呼び出す次のようなスクリプトがあります。

Code.gs

function myFunction2() {
  console.log("subFunction2 is called!")
}

function myFunction1() {
  myFunction2()

  console.log("myFunction1 is called!")
}

myFunction1 が呼び出されることを期待し[Run]をクリックしてスクリプトを実行しましたが、myFunction2 が呼び出されてしまいます。(subFunction2 is called!のみが出力されている。)

原因、解決

原因は、呼び出したい関数が指定されていないためでした。誤ってmyFunction2 を呼び出してしまっていました。

myFunction1 を選択した上で実行すると、期待通りの結果が得られました。

単純な見落としではありますが、下記の理由によりハマりやすいポイントとなっているので、注意が必要です。

  • 先頭で宣言されている関数がデフォルトで選択状態となる
  • Node.js と異なり、呼び出される関数が先に宣言される必要がある

複数のファイルに同名の関数がないか確認する

事象

先程のスクリプトの myFunction1 を改めて呼び出そうとしました。すると次は myFunction1 でも myFunction2 でもない関数が呼び出されてしまいました。(hogeのみが出力されている。)

原因、解決

原因は、別のスクリプト(Code2.gs)で同じ名前の関数が定義されていたためでした。

Code2.gs

function myFunction1() {
  console.log("hoge")
}

呼び出しの優先順位は分かりませんでした。ワークアラウンドとして、同じ名前の関数を複数のスクリプトで定義しないように注意してください。

おわりに

Google Apps Script で関数が期待通りに呼び出されない場合の確認ポイントでした。

今回は間違った関数が呼び出されたことが分かるように、関数ごとにデバッグログを出力しましたが、そのようなログ出力が無い場合は原因究明が難しくなり、私は結構ハマりました。みなさんもお気をつけください。

以上