はじめに (対象読者・この記事でわかること)
本記事は、Google Apps Script(GAS)でメール送信機能を実装しようとした際に「関数 sendEmails が見つかりません」というエラーに直面した開発者・初心者を対象としています。
このエラーはスクリプトの構成ミスやデプロイ設定の齟齬が原因で起きやすく、原因を突き止めずに放置すると、業務フローが止まってしまうリスクがあります。
この記事を読むことで、以下ができるようになります。
- エラーの根本原因と発生パターンを把握できる
- コード・プロジェクト構成を正しく整理し、関数が認識されるように修正できる
- デバッグ手順とベストプラクティスを実践できる
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- 基本的な JavaScript の文法と関数定義
- Google Apps Script のエディタ操作とプロジェクト構成
- Gmail の送信権限(スコープ)に関する基礎知識
背景とエラー概要
Google Apps Script は、スプレッドシートやフォームといった Google 製品と連携させるための JavaScript ベースのサーバーレス環境です。
メール自動送信を行う典型的なコードは次のようになります。
Javascriptfunction sendEmails() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('宛先'); const rows = sheet.getDataRange().getValues(); rows.forEach(row => { const [email, subject, body] = row; GmailApp.sendEmail(email, subject, body); }); }
しかし、GAS のエディタ上で「関数 sendEmails が見つかりません」と表示されると、実行やトリガー登録ができなくなります。
このエラーは主に以下の 3 つに分類されます。
- 関数がスクリプトファイルに存在しない
- ファイル名が誤っている、または関数が別ファイルに定義されているがプロジェクトに追加されていない。 - スコープの問題
- 関数がvarやletでラップされたスコープ内に閉じ込められており、グローバルから見えない。 - デプロイまたはトリガー設定の不整合
- スクリプトエディタの「実行」メニューから実行しようとしたが、保存されていない、またはデプロイが古いまま。
各パターンの具体的な対処法を次の章で詳しく解説します。
具体的な手順と実装方法
ステップ 1 ― プロジェクト内のファイル構成を確認する
- GAS のエディタ左側に表示される「ファイル」リストを開く。
コード.gsやmain.gsといった名前のファイルが存在し、そこにfunction sendEmails()が記述されているか確認する。- 関数が別ファイルに分割されている場合は、「リソース」 > 「ライブラリ」 ではなく、「ファイル」 > 「新しいスクリプトファイル」 で同一プロジェクトに追加する。
ポイント
関数名は必ずfunction sendEmails()のように グローバル に定義する。即時関数 (IIFE) やモジュールパターンでラップしないこと。
ステップ 2 ― スコープの問題を解消する
Javascript// NG パターン:即時関数でラップしている (function() { function sendEmails() { // ... } })();
上記のように即時関数で閉じると、外部から sendEmails が参照できなくなります。対策は次の通りです。
Javascript// OK パターン:グローバルにエクスポート function sendEmails() { // 本体はそのまま }
もし名前空間を利用したい場合は、this に明示的に公開します。
Javascriptvar MyApp = MyApp || {}; MyApp.sendEmails = function() { // … };
そしてトリガー設定時は MyApp.sendEmails を指定します。
ステップ 3 ― 保存とデプロイの徹底
- コードを書き換えたら必ず 「保存」(Ctrl+S)を行う。保存忘れは最も頻繁に起こるミスです。
- Web アプリとしてデプロイしている場合は、「新しいバージョンを作成」 → 「デプロイ」 の手順で最新コードを反映させる。
- トリガー設定画面で関数名が
sendEmailsになっているか最終確認する。
ハマった点やエラー解決
| 発生した状況 | 原因 | 解決策 |
|---|---|---|
| 「関数が見つかりません」 | ファイルに sendEmails が定義されていない |
正しいファイルに関数を追加し、保存する |
| 同名関数が別スクリプトにある | プロジェクトにそのファイルが未追加 | 「ファイル」→「スクリプトファイルの追加」でインポート |
| トリガー実行時にエラー | トリガーが古いバージョンを参照 | デプロイ時に新バージョンを作成し、トリガーを再設定 |
sendEmails がスコープ外 |
即時関数でラップしていた | グローバル関数として定義し直す |
解決策まとめ
- 関数は必ずプロジェクト内のグローバルスコープに定義
- コード変更後は必ず保存し、デプロイで最新バージョンを反映
- トリガー設定は関数名とバージョンを合わせて確認
まとめ
本記事では、Google Apps Script で「関数 sendEmails が見つかりません」エラーが発生する典型的な原因と、コード・プロジェクト構成・デプロイ手順の観点からの具体的な解決策を紹介しました。
- 関数はグローバルに定義し、即時関数で隠さない
- プロジェクトに全ファイルが正しく追加されているか確認
- 保存・デプロイ・トリガー設定の順序を守る
これらを実践すれば、メール自動送信スクリプトをスムーズに動作させられるようになります。次回は「Gmail 送信制限を回避するベストプラクティス」や「エラーハンドリングを組み込んだ堅牢なメール送信フロー」について解説する予定です。
参考資料
- Google Apps Script 公式ドキュメント – スクリプトエディタ
- GmailApp.sendEmail の使い方
- Google Apps Script でのトリガー設定方法
- 「Google Apps Script 実践入門」 (技術評論社)