ray88’s diary

お仕事で困ったとき用の自分用の覚書

GASの変数宣言:var, let, constの違いと使い分け

GAS 目次 - ray88’s diary
各種目次 - ray88’s diary
Google Apps Scriptで安全にコーディングするための基本

Google Apps Script(GAS)では、変数を宣言するために「var」「let」「const」の3つの方法があります。これらの使い分けを正しく理解することで、安全かつバグの少ないコードを書くことができます。本記事では、それぞれの違いと推奨される使い方について詳しく解説します。

3つの変数宣言の基本

まずは、各宣言方法の特徴を一覧で確認しましょう。

宣言方法 用途 再代入 再宣言 推奨度
`var` レガシー 可能 可能 ❌ 避ける
`let` 変更される変数 可能 不可 ⭕ 推奨
`const` 定数 不可 不可 ⭕ 推奨

スコープ(有効範囲)の違い

変数が有効な範囲も、それぞれの宣言方法で異なります。

`var` は関数スコープ:

function testVar() {
    if (true) {
        var x = 1;
    }
    console.log(x); // 1が出力される(ifブロック外でもアクセス可能)
}

`let` はブロックスコープ:

function testLet() {
    if (true) {
        let y = 1;
    }
    console.log(y); // エラー!yはifブロック外では使用できない
}

再宣言の違い

`var` の再宣言(危険):

var name = "田中";
var name = "佐藤"; // エラーにならない(意図しないバグの原因)

`let` の再宣言(安全):

let name = "田中";
let name = "佐藤"; // エラー!同じ名前の変数は宣言できない

巻き上げ(ホイスティング)の違い

`var` のホイスティング:

console.log(a); // undefined(エラーにならないが危険)
var a = 5;

`let` のホイスティング:

console.log(b); // エラー!宣言前にはアクセスできない
let b = 5;

現在の推奨される使い方

基本的には `const` と `let` を使い分け、`var` は避けるのがモダンなJavaScriptおよびGASの書き方です。

1. 定数には `const` を使用:

const PI = 3.14159;        // 数学定数
const API_URL = "https://example.com/api";  // API URL
const MAX_RETRY = 3;       // 最大リトライ回数

2. 値が変化するものには `let` を使用:

let counter = 0;           // カウンター
let userName = "";         // ユーザー名
let isComplete = false;    // フラグ

// 値の変更
counter++;
userName = "田中";
isComplete = true;

3. `var` は避ける:

// ❌ 古い書き方(使用を避ける)
var oldStyle = "レガシーコード";

// ⭕ 新しい書き方
let newStyle = "現代的なコード";

GASでの実践例

以下は、実際に `const` と `let` を使ってスプレッドシートを処理する関数の例です。

function processSpreadsheet() {
    // 定数:変更されない値
    const SHEET_NAME = "データ";
    const HEADER_ROW = 1;
    
    // 変数:処理中に値が変わる
    let currentRow = 2;
    let totalCount = 0;
    
    // スプレッドシートの取得
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
    
    // データ処理のループ
    while (currentRow <= sheet.getLastRow()) {
        let cellValue = sheet.getRange(currentRow, 1).getValue();
        
        if (cellValue !== "") {
            totalCount++;
        }
        
        currentRow++;
    }
    
    console.log(`処理完了:${totalCount}件のデータを処理しました`);
}

まとめ

現在のベストプラクティスは以下の通りです:

  • `const`:値が変更されない定数に使用
  • `let`:値が変更される変数に使用
  • `var`:使用を避ける(レガシーコードでのみ)

この使い分けを正しく行うことで、より堅牢でメンテナンス性の高いGASコードが書けるようになります。