ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptのライブラリを取り込んで再利用する!共通コードの設計

【Googleスプレッドシート】Apps Scriptのライブラリを取り込んで再利用する!共通コードの設計
🛡️ 超解決

同じ処理を複数のスプレッドシートで使い回したいと思ったことはありませんか。Apps Scriptには「ライブラリ」という機能があり、共通のコードを一箇所で管理し、他のプロジェクトから呼び出せます。この記事では、ライブラリを作成して取り込む手順と、保守しやすい共通コードの設計方法を解説します。ライブラリを使えばコードの重複を減らし、修正も一箇所で済むため、効率的な開発が可能になります。

【要点】Apps Scriptライブラリの取り込みと共通コード設計

  • ライブラリの作成と公開: スクリプトエディタでライブラリ用プロジェクトを作成し、バージョンを設定して公開します。
  • ライブラリの取り込み: 利用側プロジェクトの「リソース」→「ライブラリ」からスクリプトIDを指定して追加します。
  • 関数の呼び出し方: ライブラリ名.関数名() の形式で呼び出し、引数や戻り値をやり取りします。
  • 設計上の注意点: 公開範囲を制限し、命名規則を統一して、バージョン管理を徹底します。

ADVERTISEMENT

Apps Scriptライブラリの概要とできること

ライブラリとは、複数のスクリプトプロジェクト間でコードを共有するための仕組みです。あるプロジェクトで作成した関数やクラスをライブラリとして公開すると、別のプロジェクトからスクリプトIDを指定して読み込めます。ライブラリを使うことで、同じ処理を何度も書く必要がなくなり、修正が必要な場合もライブラリ側のコードだけを直せば全呼び出し元に反映されます。また、ライブラリのバージョンを指定して固定できるため、安定した動作を保ちながらアップデートを管理できます。

ライブラリとして公開できるのは、関数、グローバル変数、カスタムメニューなどです。ただし、ライブラリ内のコードは呼び出し元のプロジェクトから独立した実行環境で動作するため、ライブラリ側で現在のスプレッドシートを操作するには、呼び出し元からスプレッドシートIDなどを引数で渡す必要があります。この制約を理解しておくことが重要です。

ライブラリを作成して取り込む手順

1. ライブラリ用プロジェクトの作成

  1. 新しいスクリプトプロジェクトを開く
    Googleスプレッドシートを開き、「拡張機能」→「Apps Script」をクリックしてスクリプトエディタを起動します。デフォルトのプロジェクト名を分かりやすい名前に変更します。
  2. 共有したい関数を記述する
    例えば、特定の計算を行う関数や、データ整形の関数を書きます。関数名は一意にし、接頭辞などでライブラリ独自の名前空間を意識すると良いです。
  3. バージョンを設定して公開する
    「ファイル」→「バージョンを管理」をクリックし、新規バージョンを作成します。次に「公開」→「ライブラリとしてデプロイ」を選択し、スクリプトIDをコピーします。このIDが呼び出し元で必要になります。

2. 利用側プロジェクトにライブラリを取り込む

  1. 呼び出し元のスクリプトプロジェクトを開く
    ライブラリを使いたいスプレッドシートのスクリプトエディタを開きます。
  2. ライブラリを追加する
    メニューから「リソース」→「ライブラリ」を開き、先ほどコピーしたスクリプトIDを貼り付けます。バージョンを指定(通常は最新)し、「追加」ボタンをクリックします。
  3. 識別子を設定する
    追加したライブラリの「識別子」欄に、呼び出し時に使う名前を入力します。通常はライブラリ名と同じにします。「保存」をクリックして完了です。

3. ライブラリの関数を呼び出す

  1. 呼び出しコードを記述する
    スクリプトエディタで、ライブラリ識別子.関数名() の形式で呼び出します。例:MyLibrary.calculateTotal(data)
  2. 引数や戻り値を適切に扱う
    ライブラリの関数にスプレッドシートのオブジェクト(SpreadsheetAppなど)を渡すことはできないので、必要なデータは配列や文字列などの基本型で渡しましょう。

ライブラリ利用時の注意点とよくあるトラブル

ライブラリの関数が呼び出し元で認識されない

ライブラリを追加したのに「未定義」エラーが出る場合は、ライブラリの関数が公開されていない可能性があります。ライブラリ側で関数の先頭に「public」修飾子を付けるか、デフォルトで公開されるように設定してください。また、スクリプトエディタの「実行」で一度ライブラリ側の関数を実行して認証を済ませておく必要もあります。

バージョンを固定しないと予期せぬ変更が入る

ライブラリを追加する際にバージョンを「HEAD」にすると、常に最新のコードが使われます。開発中は便利ですが、本番環境では特定のバージョンを固定して安定性を確保しましょう。バージョン名には「v1.0」「v1.1」など意味のある名前を付けると管理が楽です。

ライブラリ内で現在のスプレッドシートを参照できない

ライブラリ内で SpreadsheetApp.getActiveSpreadsheet() を呼び出しても、呼び出し元のスプレッドシートは取得できません。必ず呼び出し元からスプレッドシートIDやシート名を引数で渡し、ライブラリ側で SpreadsheetApp.openById() を使って開くように設計します。

ライブラリのサイズ制限に注意する

Apps Scriptのライブラリにはファイルサイズの上限があります。現在は各ライブラリのコードサイズが最大250KBまでとなっています。大きなコードをライブラリにまとめすぎるとエラーになるため、複数のライブラリに分割するなど対策が必要です。

ADVERTISEMENT

ライブラリと単純なスクリプト埋め込みの比較

項目 ライブラリ コードのコピー&ペースト
コードの一元管理 可能。修正が全プロジェクトに反映 不可能。各プロジェクトで個別修正が必要
バージョン管理 バージョン指定で固定可能 手動管理のみ
実行環境の独立性 独立しており、呼び出し元と変数が衝突しない 同一プロジェクト内で変数が重複しやすい
呼び出しの手間 ライブラリ追加と識別子指定が必要 そのまま使える
アクセス権限 スクリプトIDを知っていれば誰でも組み込み可能 コードを共有する必要がある
更新の容易さ ライブラリを更新し、バージョンを上げるだけで全呼び出し元に反映 各プロジェクトを直接編集する必要がある

共通コードを設計する際のポイント

関数の粒度を小さく保つ

1つの関数に複数の処理を詰め込まず、単一の責務だけを持たせます。そうすることで、テストが容易になり、再利用性が高まります。例えば、日付変換、数値計算、文字列整形は別々の関数に分割します。

引数と戻り値を明確にする

ライブラリの関数は呼び出し元から独立しているため、必要なデータはすべて引数で渡します。戻り値も単純な型(数値、文字列、配列、オブジェクト)にすると扱いやすくなります。スプレッドシートの範囲オブジェクトは渡せない点に注意しましょう。

エラーハンドリングをライブラリ内で行う

ライブラリの関数内で try-catch を使ってエラーをキャッチし、エラー内容を文字列で返すか、特定の値を返して呼び出し元に判断させます。呼び出し元でエラーが発生すると原因特定が難しくなるため、ライブラリ側で適切に処理します。

命名規則を統一する

ライブラリの関数名や変数名には、ライブラリ名の接頭辞を付けるなどして、他のコードとの衝突を防ぎます。また、関数名は処理内容が明確にわかるように命名します(例:myLib_formatDatemyLib_validateEmail)。

まとめ

Apps Scriptのライブラリ機能を使えば、共通コードを一箇所で管理し、複数のスプレッドシートから再利用できます。ライブラリを作成して取り込む手順はスクリプトIDとバージョン設定だけで完了し、関数の呼び出しも識別子を指定するだけです。設計時には、引数でデータを渡すことやバージョン固定を意識しましょう。次は、ライブラリに複数の関数をまとめてユーティリティライブラリとして整備すると、さらに便利に使えます。例えば、日付処理、文字列操作、バリデーションなどの汎用関数をまとめたライブラリを作成し、チーム内で共有することで作業効率が大幅に向上します。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。