G-gen の西田です。単一の Google Apps Script(GAS)を、複数のスプレッドシートで共用する方法について解説します。

はじめに
当記事について
当記事では、複数のスプレッドシートで同じ Google Apps Script(GAS)プログラムを使用する方法について解説します。作成した GAS プログラムは、ライブラリとしてデプロイすることで、複数のスプレッドシートファイルから呼び出して使用することができます。
この方法のメリットは、ソースコードの管理負荷を軽減しながら複数の部門などに共通のプログラムを提供できる点です。
今回の検証では、スプレッドシートに入力されている宛先リストに一斉にメール送信をするプログラムを、利用部門ごとに管理される宛先リストやメール文面で使用する例を紹介します。
Google Apps Script(GAS)とは
Google Apps Script(GAS)は、Google Workspace と統合されたアプリケーションを簡単に作成できるアプリケーション開発プラットフォームです。JavaScript でソースコードを記述します。GAS では、スプレッドシート、Gmail、カレンダーなどの Google Workspace アプリ用の組み込みライブラリを使用できます。
2つの GAS 作成方法
GAS の作成方法には、2つのパターンあります。
1つは、コンテナバインドと呼ばれる方法で、スプレッドシートなどの Google アプリケーションに紐付けてスクリプトを作成する方法です。
もう1つは、スタンドアロンと呼ばれる手法で、Google アプリケーションに紐付けずにスクリプトを単体で作成します。
GAS で操作対象のスプレッドシートなどのファイルを指定する際に、スタンドアロンではファイルの URL や ID などを明示的に指定する必要があります。一方コンテナバインドでは、GAS が実行されたファイルをアクティブファイルと指定して取得することができます。
【スプレッドシート指定方法の例】
// 【コンテナバインド】バインドされたファイルをアクティブファイルとして指定できる SpreadsheetApp.getActiveSpreadsheet();
// 【スタンドアロン】ファイルの URL や ID で直接指定する必要がある SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/');
共用 GAS スクリプトの準備
スクリプトの作成
まずは複数のスプレッドシートで共用する GAS スクリプトを作成します。
共用の GAS は、スタンドアロンで作成して、ライブラリとしてデプロイする必要があります。検証用のソースコードは以下の通りです。
/** * メールを一斉送信プログラムです。リストアップされたメールアドレス宛にメールを一斉送信します。 */ function sendEmails() { // アクティブスプレッドシートを取得 const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 送信先対象者データの取得 const lastRowColA = activeSheet.getRange(activeSheet.getMaxRows(),1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); const recipientsValues = activeSheet.getRange(2,1,lastRowColA-1, 3).getValues(); // メール内容テンプレート文面の取得 const subject = activeSheet.getRange('F2').getValue().toString(); let templateBody = activeSheet.getRange('F3').getValue().toString(); // 件名か本文のいずれかが空欄の場合は処理を終了 if (!subject || !templateBody) { SpreadsheetApp.getUi().alert('件名 あるいは 本文が空欄のため、処理を終了します。'); return; } // メール一斉送信 let cnt = 0; // 送信メールカウンター for (let i=0; i<recipientsValues.length; i++) { // 変数値の取得 let email = recipientsValues[i][0]; let company = recipientsValues[i][1]; let name = recipientsValues[i][2]; // 送信先に'@'が含まれていない場合はスキップ if (!email.toString().includes('@')) { continue; } // メール文面の変数を置換 let mailBody = templateBody.replace('{会社名}', company); mailBody = mailBody.replace('{氏名}', name); mailBody = mailBody.replace('{電話番号}', PropertiesService.getScriptProperties().getProperty('TEL_NO')); // メール送信の実施 GmailApp.sendEmail(email, subject, mailBody); cnt = cnt + 1; } SpreadsheetApp.getUi().alert(cnt + '件のメールを送信しました。'); }
スクリプトのデプロイ
エディタ画面右上の [デプロイ] > [新しいデプロイ] から、作成したスクリプトをデプロイします。デプロイタイプを「ライブラリ」とし、任意の説明文を入力して [デプロイ] をクリックします。
- 参考 : デプロイの作成と管理


デプロイしたスクリプトのスクリプト ID は後の工程で使用するため、メモしておきます。

スクリプトの共有
この後作成するスプレッドシートでデプロイされたスクリプトを使用するためには、実行ユーザーがスクリプトに対するアクセス権限を持っている必要あります。
今回は、ドメイン内の全てのユーザーに「閲覧者」権限を付与することで、実行できるように設定しておきます。

スプレッドシートの準備
シートの作成
宛先リスト、メール文面、プログラム実行ボタンを設置するスプレッドシートを作成します。

ライブラリの読み込み
スプレッドシート上部のタブの [拡張機能] から[Apps Script] を選択して、スクリプトエディタ画面にアクセスします。
スクリプトエディタの左ペイン内の [ライブラリ] の追加ボタン(+)をクリックし、先ほどメモしたスクリプト ID で検索して追加ボタンをクリックします。
- 参考 : ライブラリ

読み込んだライブラリ内のメソッドを、このスプレッドシートで使えるように、スクリプトに記述します。今回は myFunction の中に記述します。

シート上の図形を右クリックし、3点リーダーから [スクリプトを割り当て] を選択し、スプレッドシートで作成した関数名を入力します。

部門用にスプレッドシートを複製
上記で作成したスプレッドシートを、営業部用と購買部用に複製します。複製されたスプレッドシートにも、追加したライブラリやスクリプト、図形へのスクリプトの割り当てが引き継がれています。
動作確認のため、宛先リストとメール文面の内容をそれぞれ変更しておきます。
【営業部用】
【購買部用】

動作確認
送信メール内容の確認
営業部用と購買部用、それぞれのスプレッドシートからプログラムを実行した際に送信されたメールの内容は以下の通りです。
想定通り、営業部門用のスプレッドシートからは「織田信長」に、購買部門用のスプレッドシートからは「武田信玄」に送信されており、メールの文面もそれぞれのスプレッドシートに記載した内容となっております。
【営業部からの送信メール】
【購買部からの送信メール】

補足
メールの最終行に記載されている電話番号は、共用の GAS のスクリプトプロパティで設定した値が引用されます。
このように、コードに直接記載したくない値は、スクリプトプロパティに環境変数として設定することで、ライブラリ経由でもアクセスできます。

西田 匡志(記事一覧)
クラウドソリューション部ソリューションアーキテクト課
美容商社→物流→情シスを経て、2025年6月G-genにジョイン。Google Cloud を通じて多くの人に貢献できるよう日々精進!