即時関数で変数のスコープを絞る
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);
}
変数sheetとlastRowはtoに値を設定したらもう使わない.しかし,関数全体にスコープを持ち続ける.以下のように,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)を教えてくれた.これならsheetとlastRowのスコープを最小にできる.
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