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本
- Google Apps Script × 生成AI 全自動仕事術:Googleアカウントがあれば始められます。生成AIに日本語で頼みながら、GASで仕事を自動化したい人向けです。
note
関連記事
- GoogleAppsScriptの変数と定数の使い方:変数と定数の書き方を確認できます。
- GoogleAppsScriptの制御構文を理解する:if文や繰り返しを、関数の中で使えるようになります。
- GoogleAppsScriptでセルの値に基づいてハイパーリンクを設定する:セルの値に応じた処理を書く実例です。
- Google Apps Scriptで処理を爆速化!遅いGASを劇的に改善する実践テクニック:配列を使った一括処理で、遅いGASを速くする方法です。
- GAS学習の進め方|既存記事をつなぐ学習マップ:GAS記事を読む順番をまとめた学習マップです。