即時関数で変数のスコープを絞る

2026-09-13

はじめに

例えば,以下のソースはGoogle SpreadsheetのA列にあるメールアドレスを取得している.

function myFunction() {
  const sheet=SpreadsheetApp.openById('xxx').getSheets()[0];
  const lastRow=sheet.getLastRow();
  const to=sheet.getRange(1, 1, lastRow, 1).getValues().join(',');
  Logger.log(to);
}

変数sheetlastRowtoに値を設定したらもう使わない.しかし,関数全体にスコープを持ち続ける.以下のように,toに値を設定する時だけスコープを持てれば良いのにと思っていた.ちなみに,このソースは動かない.念のため.

function myFunction() {
  const to={
    const sheet=SpreadsheetApp.openById('xxxxx').getSheets()[0];
    const lastRow=sheet.getLastRow();
    return sheet.getRange(1, 1, lastRow, 1).getValues().join(',');
  };
  Logger.log(to);
}

結論

Geminiに聞いたら,即時関数(IIFE:Immediately Invoked Function Expression)を教えてくれた.これならsheetlastRowのスコープを最小にできる.

function myFunction2() {
  const to=(()=>{
    const sheet=SpreadsheetApp.openById('xxx').getSheets()[0];
    const lastRow=sheet.getLastRow();
    return sheet.getRange(1, 1, lastRow, 1).getValues().join(',');
  })();
  Logger.log(to);
}

環境

  • Google Apps Script