GASの関数を理解する|書き方と呼び出しの基本

GASを触りはじめて、こんなところで止まっていませんか?

  • ネットで見つけたコードをコピペして動かしているけれど、function が何をしているのか説明できない
  • 関数のカッコの中の name や、return の意味があいまい
  • コードを少し変えたいのに、どこを触っていいのか分からず不安になる

ですよね。最初に入っている function myFunction() {} をそのまま使っているうちは、あまり困りません。でも、自分で処理を足そうとした瞬間に「関数」がわからないと手が止まってしまいます。

この記事では、GASの関数の書き方と呼び出し方を、短いコードで一緒に確認していきます。

💡
この記事でわかること
  • 関数の書き方(宣言)と、実行までの流れ
  • 引数(値を渡す)と戻り値(結果を受け取る)の役割
  • スプレッドシートに書き込む関数の例
  • 「何も起きない」「undefined と出る」ときの原因

結論:関数は「名前を付けた処理のかたまり」です

関数は、やりたい処理に名前を付けてひとまとめにしたものです。形はいつも同じで、「function + 名前 + () + { }」です。

関数に渡す値が引数、関数が返してくる結果が戻り値です。この2つが分かれば、ほとんどのコードが読めるようになります。

引数を渡し、関数の中で処理して、戻り値が返ってくるという関数のしくみを示した図

手順1:関数を宣言して実行する

まずは、いちばん小さい関数です。実行ログに文字を出すだけの処理にします。

  • 1
  • 2
  • 3
function sayHello() {
  Logger.log('こんにちは');
}

スクリプトエディタ上部の関数選択欄で sayHello を選び、「実行」を押します。結果は「実行ログ」に表示されます。実行方法に不安があれば、GoogleAppsScriptのコードを実行する方法 も見てください。

ここで大事なのは、関数は書いただけでは動かないという点です。実行するか、ほかの関数から呼び出して、はじめて中身が動きます。

手順2:引数で値を渡す

同じ処理でも、名前だけ変えたいことがありますよね。そのときに使うのが引数です。カッコの中に、受け取る値の名前を書きます。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
function greet(name) {
  Logger.log('こんにちは、' + name + 'さん');
}

function testGreet() {
  greet('かいと');
}

testGreet を実行すると、ログに「こんにちは、かいとさん」と出ます。greet('かいと') のように関数名のあとにカッコを付けて書くことを、関数の呼び出しといいます。

注意したいのは、エディタの「実行」ボタンは、引数を渡さずに関数を実行するという点です。greet を直接実行すると name が空になり、「こんにちは、undefinedさん」と表示されます。引数のある関数を試すときは、testGreet のような呼び出し用の関数を別に作るのが定番です。

手順3:戻り値で結果を受け取る

関数の中で作った結果を、呼び出し元で使いたいときは return を使います。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
function add(a, b) {
  return a + b;
}

function testAdd() {
  const result = add(3, 4);
  Logger.log(result); // 7
}

add(3, 4) の結果 7 が result に入ります。変数の使い方に自信がなければ、GoogleAppsScriptの変数と定数の使い方 で確認しておくと安心です。

return を書かなかった関数の結果は undefined になります。「計算したはずなのに値が空」というときは、まず return の書き忘れを疑ってみてください。

用語 役割 上の例
引数 関数に渡す値 name、a、b
呼び出し 関数を動かす書き方 greet('かいと')
戻り値 関数が返す結果 return a + b の a + b

手順4:スプレッドシートに書き込む関数にする

最後に、関数をスプレッドシートの操作とつなげます。あいさつの文章を作る関数と、セルに書き込む関数を分けてみます。スプレッドシートの「拡張機能」から開いたスクリプトで試してください。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
function makeGreeting(name) {
  return 'こんにちは、' + name + 'さん';
}

function writeGreeting() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange('A1').setValue(makeGreeting('かいと'));
}

writeGreeting を実行すると、A1セルに「こんにちは、かいとさん」が入ります。初回の実行では、スプレッドシートへのアクセス許可を求める画面が出ることがあります。内容を確認して進めてください。

文章を作る処理と書き込む処理を分けておくと、あとから文面だけ変えたいときに、直す場所が1か所で済みます。

つまずきやすい点

症状 考えられる原因 確認すること
実行しても何も起きない 関数を宣言しただけ、または別の関数を選んでいる 関数選択欄の名前と、中で呼び出している関数
「こんにちは、undefinedさん」と出る 引数のある関数をエディタから直接実行した 呼び出し用の関数を作って実行する
結果が undefined になる return を書いていない 関数の最後に return があるか
どの関数が動くか分かりにくい 同じ名前の関数を複数書いた 関数名が重複していないか

補助的な関数には、名前の最後に _ を付ける書き方もあります。Apps Scriptではプライベート関数を示す目印として扱われ、実行する関数の選択欄にも出てこなくなります。

まとめ:次の一歩

関数は「名前を付けた処理のかたまり」で、引数で渡し、戻り値で受け取る。ここまで読めば、コピペしたコードの構造が少しずつ見えてくるはずです。

次の一歩:手順3の add を、かけ算やあいさつの文面など、自分の作業に近い内容に書き換えて、testAdd のような確認用の関数で動かしてみましょう。

複数の値をまとめて関数に渡したくなったら、次に必要になるのが配列とオブジェクトです。続編の候補として考えているテーマです。

関連する本・記事

Kindle本

note

関連記事