ライブラリ

ライブラリとは、他のスクリプトで関数を再利用できるスクリプト プロジェクトです。

ライブラリを使用するスクリプトは、すべてのコードが 1 つのスクリプト プロジェクトに含まれている場合ほど高速には実行されません。ライブラリを使用すると開発とメンテナンスが便利になりますが、速度が重要なプロジェクトでは慎重に使用してください。この問題のため、Google Workspace アドオンでのライブラリの使用は制限されています。

ライブラリにアクセスする

プロジェクトにライブラリを含めるには、少なくとも表示レベルのアクセス権が必要です。含めるライブラリの作成者でない場合は、作成者に連絡してアクセス権をリクエストしてください。

含めるライブラリのスクリプト ID が必要です。ライブラリにアクセスできる場合は、[プロジェクトの設定] ページでスクリプト ID を確認してください。

スクリプト プロジェクトにライブラリを追加する

  1. Apps Script エディタの左側にある [ライブラリ] の横にある [ライブラリを追加] をクリックします。
  2. [スクリプト ID] フィールドに、ライブラリのスクリプト ID を貼り付けます。
  3. [Look up] をクリックします。
  4. [バージョン] プルダウンをクリックし、使用するライブラリのバージョンを選択します。
  5. デフォルトの [識別子] 名が、このライブラリで使用する名前であることを確認します。これは、スクリプトがライブラリを参照するために使用する名前です。たとえば、Test に設定した場合は、 のようにライブラリのメソッドを呼び出します。Test.libraryMethod.
  6. [追加] をクリックします。

ライブラリを使用する

含めたライブラリは、デフォルトのサービスと同じように使用します。たとえば、ライブラリの識別子が Test の場合は、Test の直後にピリオドを入力すると、ライブラリ内のメソッドのリストが表示されます。

含めたライブラリの参照ドキュメントを開く手順は次のとおりです。

スクリプト エディタの左側にあるライブラリ名の横にあるその他 > [新しいタブで開く] をクリックします。

ライブラリを削除する

スクリプト エディタの左側にあるライブラリ名の横にあるその他 > [削除] > [ライブラリを削除] をクリックします。

ライブラリが作成者によって削除された場合でも、含めたライブラリのリストから削除する必要があります。

ライブラリを更新する

ライブラリのバージョンを変更するか、識別子を更新します。

  1. エディタの左側にある [ライブラリ] で、ライブラリの名前をクリックします。
  2. 変更を加えて、[保存] をクリックします。

ライブラリを作成して共有する

スクリプト プロジェクトをライブラリとして使用して共有する手順は次のとおりです。

  1. スクリプトの バージョン管理されたデプロイメントを作成します。
  2. ライブラリの潜在的なすべてのユーザーと、少なくとも表示レベルのアクセス権を共有します。
  3. これらのユーザーにスクリプト ID を提供します。スクリプト ID は、[Project Settings] ページで確認できます。

ベスト プラクティス

ライブラリを作成する際のガイドラインは次のとおりです。

  1. プロジェクトには意味のある名前を選択してください。他のユーザーがライブラリを含める際に、デフォルトの識別子として使用されます。
  2. スクリプトの 1 つ以上のメソッドをライブラリ ユーザーに表示(使用)しないようにするには、メソッド名の末尾にアンダースコアを追加します。例: myPrivateMethod_
  3. ライブラリ ユーザーには、列挙可能なグローバル プロパティのみが表示されます。これには、関数宣言、var を使用して関数の外部で作成された変数、グローバル オブジェクトに明示的に設定されたプロパティが含まれます。たとえば、enumerablefalse に設定した Object.defineProperty() は、ライブラリで使用できるシンボルを作成しますが、このシンボルはユーザーがアクセスできません。
  4. ライブラリ ユーザーがスクリプト エディタの自動補完と自動生成されたドキュメントを利用できるようにするには、すべての関数に JSDoc スタイルのドキュメントを含めます。次に例を示します。

    /**
     * Raises a number to the given power, and returns the result.
     *
     * @param {number} base the number we're raising to a power
     * @param {number} exp the exponent we're raising the base to
     * @return {number} the result of the exponential calculation
     */
    function power(base, exp) { ... }
    

リソースのスコープ設定

ライブラリを使用する場合、リソースには共有リソースと非共有リソースの 2 種類があります。共有リソースとは、ライブラリと含めるスクリプトの両方が、リソースの同じインスタンスに組み込みのアクセス権を持っていることを意味します。次の図は、ユーザー プロパティの例を使用して、共有リソースを示しています。

共有リソース

非共有リソースとは、ライブラリと含めるスクリプトの両方が、リソースのインスタンスにのみ組み込みのアクセス権を持っていることを意味します。ただし、ライブラリは、非共有リソースを操作する明示的な関数を持つことで、非共有リソースへのアクセスを提供できます。スクリプト プロパティを公開するためにライブラリに含める関数の例を次に示します。

  function getLibraryProperty(key) {
    const scriptProperties = PropertiesService.getScriptProperties();
    return scriptProperties.getProperty(key);
  }

次の図は、スクリプト プロパティの例を使用して、非共有リソースを示しています。

共有されないリソースの例

次の表に、共有リソースと非共有リソースを示します。

リソース 共有* 非共有** メモ
ロック ライブラリで作成された場合、同じインスタンスがすべての含めるスクリプトに表示されます。
スクリプト プロパティ ライブラリで作成された場合、同じインスタンスがすべての含めるスクリプトに表示されます。
キャッシュ ライブラリで作成された場合、同じインスタンスがすべての含めるスクリプトに表示されます。
トリガー ライブラリで作成されたシンプルなトリガーは、含める スクリプトによってトリガーされません。
ScriptApp
UiApp
ユーザー プロパティ
ロガーと実行トランスクリプト
サイト、スプレッドシート、その他のコンテナ getActive を呼び出すと、含めるスクリプトのコンテナが返されます。
MailApp と GmailApp
* これは、ライブラリに機能/リソースの独自のインスタンスがなく、呼び出したスクリプトによって作成されたインスタンスを使用していることを意味します。
** これは、ライブラリにリソース/機能の独自のインスタンスがあり、ライブラリを使用するすべてのスクリプトが同じインスタンスを共有してアクセスできることを意味します。

ライブラリをテストする

ライブラリをテストするには、ヘッド デプロイメントを使用します。スクリプトに対する編集者レベルのアクセス権を持つユーザーは、ヘッド デプロイメントを使用できます。

ライブラリのバージョンを少なくとも 1 つ保存する必要があります。

ライブラリをデバッグする

ライブラリを含むスクリプトをデバッグする場合、ライブラリ コードにステップインしたり、ブレークポイントを設定したりすることはできません。デバッグモードでライブラリ関数にステップインしようとすると、デバッガは関数をスキップして、呼び出し元のスクリプトの次の行にステップインします。

ライブラリのバージョンに [HEAD(開発モード)] を使用しても、ライブラリにステップインしたり、ライブラリ内でブレークポイントにヒットしたりすることはできません。

ライブラリ コードをデバッグするには、次のいずれかの方法を使用します。

  • ライブラリ プロジェクトからデバッグする: Apps Script スクリプト エディタでライブラリ スクリプト プロジェクトを開きます。特定の引数を使用してライブラリ関数をテストするには、ライブラリ関数を呼び出す一時的な「テスト」関数をライブラリ プロジェクト内に作成し、そのテスト関数をデバッグモードで実行します。
  • ロギング: ライブラリ関数内で console.log() を使用して、実行ログに出力します。ライブラリが別のスクリプトによって呼び出されると、これらのログが呼び出し元のスクリプトの実行ログに表示されます。