GASのthrow文入門|処理を中断するエラー処理の基本
GASでスクリプトを書いてるんですが、throwってどんな時に使うんですか?エラー処理に使うって聞いたんですが…

猫男

catman
いい質問だ。throwは、プログラムの中で「これはおかしい」と判断した時に自分でエラーを発生させるための文だ。処理を止めたい時に使えるぞ。
GASにおけるthrow文の使い方
Google Apps Scriptでは、異常な状況に出会ったときに throw を使ってエラーを発生させられます。
「これはおかしいから、この先の処理を止めたい!」
なんてときに使う、プログラマ側の強制的なエラー出力です。
throwでエラーを表示したら、その先の処理は進まなくなるのですね。
基本の構文
function checkNumber(num) {
if (num <= 0) {
throw new Error("正の数を入力してください");
}
return num;
}
この関数では、0以下の数が渡されたら throw
を使って処理を中断し、エラーメッセージを出しています。
try-catchでエラーを処理する
でも、throw文がtry-catch
の中に含まれていれば処理は止まりません。
throw
で発生させたエラーは try-catch
で受け取って処理できます。
function main() {
try {
const value = checkNumber(-5);
Logger.log("結果: " + value);
} catch (e) {
Logger.log("エラーが発生しました: " + e.message);
}
}
この例では、さっき出てきたcheckNumber
関数がエラーを投げた時、catch
ブロックでメッセージをログに表示しています。
エラーが発生しました: 正の数を入力してください
というエラー文が表示されるはずですね。
GASでのエラー処理の基本も復習してみてください。
https://earthpg.school/gas-error-handling/
throwを使う理由
- 不正な値が渡されたときに処理を止められる
- エラーメッセージを開発者やログで確認できる
- 問題が起きた場所を明確にできる
なるほど、
throw
は自分でエラーを出して、ちゃんと気づけるようにするためのものなんですね!
猫男

catman
その通り!「おかしいな」と思ったら
throw
でしっかり止めて、後でcatch
で対応する。これが基本だ。
練習問題
以下の関数 processScore
は、テストの点数を受け取って2倍して返す関数です。
ただし、負の点数が渡されたときは処理を止めてエラーを出すように修正してください。
function processScore(score) {
// TODO: 負の点数のときにエラーを投げる
return score * 2;
}
function run() {
try {
const result = processScore(-10);
Logger.log("結果: " + result);
} catch (e) {
Logger.log("エラーが発生しました: " + e.message);
}
}
解答と解説
function processScore(score) {
if (score < 0) {
throw new Error("点数は0以上でなければなりません");
}
return score * 2;
}
function run() {
try {
const result = processScore(-10);
Logger.log("結果: " + result);
} catch (e) {
Logger.log("エラーが発生しました: " + e.message);
}
}
score
が0未満だった場合に throw
を使ってエラーを発生させています。
このように、「ありえない値が来たら throw で止める」という書き方は、GASだけでなく他の言語でもよく使われる安全な書き方です。