コンテンツにスキップ
Zidooka
スポンサーリンク

ReferenceError: xxx is not defined が出る原因と対処法【GAS / JavaScript】

※ この記事の内容について、業務・開発上お困りの場合は個別に対応できます(5,000円〜)。

JavaScript や Google Apps Script(GAS)を書いていると、次のようなエラーに遭遇することがあります。

ReferenceError: xxx is not defined

この記事では、このエラーがなぜ起きるのか、そしてどう直せばいいのかを、実際によくあるパターン別に解説します。 GAS・JavaScript 初学者がつまずきやすいポイントを中心に、再発防止まで含めて整理します。

ReferenceError: xxx is not defined とは何か

このエラーは一言で言うと、

「参照しようとした変数や関数が、どこにも定義されていない」

という意味です。

JavaScript では、変数や関数を使う前に、必ず定義する必要があります。

console.log(myVar);

この時点で myVar が定義されていなければ、

ReferenceError: myVar is not defined

というエラーが発生します。

よくある原因①:変数を宣言し忘れている

最も基本的なミスです。

例:変数を使う前に宣言していない

Logger.log(userName);
const userName = "Taro";

JavaScript では、変数を使う前に宣言する必要があります。

対処法

  • 変数を使う前に必ず宣言する
  • const または let を使う
const userName = "Taro";
Logger.log(userName);

よくある原因②:スコープの外から参照している

変数には「使える範囲(スコープ)」があります。

例:関数の中で定義した変数を外から参照

function test() {
  const message = "Hello";
}
Logger.log(message);

messagetest() 関数の中でしか使えません。

対処法

  • 変数のスコープを意識する
  • 必要なら関数の外で宣言する
const message = "Hello";
function test() {
  Logger.log(message);
}

よくある原因③:タイプミス

シンプルですが、非常に多い原因です。

例:変数名のスペルミス

const userName = "Taro";
Logger.log(usrName);

userNameusrName と間違えています。

対処法

  • 変数名は正確に入力する
  • コピー&ペーストを活用する
  • エディタの自動補完機能を使う

よくある原因④:GAS特有の「グローバルオブジェクトの勘違い」

GAS では、ブラウザの JavaScript とは異なるグローバルオブジェクトがあります。

例:window や document を使おうとする

window.alert("test");
document.getElementById("test");

GAS では windowdocument は使えません。

対処法

  • GAS では Browser.msgBox()HtmlService を使う
  • ブラウザ用のコードをそのまま使わない
Browser.msgBox("test");

よくある原因⑤:ライブラリや外部スクリプトの読み込み忘れ

外部のライブラリやスクリプトを使う場合、読み込みが必要です。

例:jQuery を使おうとしたが読み込んでいない

$('#test').click();

$ (jQuery) が読み込まれていません。

対処法

  • 必要なライブラリを正しく読み込む
  • GAS では「ライブラリ」機能を使う

よくある原因⑥:非同期処理のタイミング問題

変数が定義される前にアクセスしようとするケースです。

例:データ取得前に参照している

let data;
fetch(url).then(response => {
  data = response;
});
Logger.log(data);

fetch が完了する前に data を参照しています。

対処法

  • await を使う
  • コールバック内で処理する
async function getData() {
  const response = await fetch(url);
  Logger.log(response);
}

デバッグの基本チェックリスト

ReferenceError: xxx is not defined が出たら、次を順に確認します。

  1. 変数や関数は宣言されているか?
  2. スコープの範囲内で使っているか?
  3. タイプミスはないか?
  4. ブラウザ専用のオブジェクトを使っていないか?
  5. 必要なライブラリは読み込まれているか?
  6. 非同期処理のタイミングは適切か?

この6点だけで、ほとんどのケースは解決できます。

再発防止のための書き方

// 変数は使う前に宣言
const userName = "Taro";
// スコープを意識する
let globalVar = "global";
function test() {
  let localVar = "local";
  Logger.log(globalVar);
}
// エディタの自動補完を活用
// タイプミスを防ぐ

まとめ

ReferenceError: xxx is not defined は、 「存在しないものを参照しようとしている」というエラーです。

特に GAS では、

  • スコープの理解
  • ブラウザとの違い
  • ライブラリの読み込み

を意識するだけで、発生頻度は一気に下がります。

エラーメッセージをよく読んで、「どの変数が定義されていないのか?」を確認することが解決への第一歩です。

スポンサーリンク

ZIDOOKA!

この記事の内容について、対応できます

ZIDOOKA!では、この記事で扱っている内容に関連する技術トラブルや開発上の問題について、フリーランスとして個別対応を行っています。
「調べても解決しない」「業務で詰まっている」「社内で対応が難しい」といった場合にご相談ください。

個別対応:5,000円〜 (内容・工数により事前にお見積りします)


Warning: foreach() argument must be of type array|object, false given in /home/users/1/ciao.jp-yamakazu/web/zidooka/wp-content/themes/zidooka-tw/functions.php on line 1220

AI活用に関するポリシー

当サイトでは、記事の執筆支援にAIを活用する場合があります。ただし、AIに記事作成を全面的に委任することはなく、あくまでライティングの補助として利用しています。「AIを活用することで生産性が向上し、より伝わりやすいコンテンツになるならば積極的に利用すべき」という方針のもと運営しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です