次に、2 つのスクリプトを作成します。コア機能は Web アプリとしてデプロイされ、単純なコンテナーにバインドされたスクリプトは、Web アプリを呼び出すためのインターフェイスを提供します。
Web アプリはドキュメントにバインドされていないため、次のスキームに従うことができます。
function doGet(e){
if(e.parameter.docId){
doStuff(DocumentApp.openById(e.parameter.docId));
}
}
アプリをデプロイすると、機能にアクセスできるリンクが表示されます。
コンテナーにバインドされたスクリプトから、適切なパラメーターを使用して Web アプリにリンクする UI (サイド パネルの Anchor 要素など) を追加できます。
ScriptApp.getService().getUrl() + "?docId=" + DocumentApp.getActiveDocument().getId()
またはUrlFetchAppを使用して結果を取得し、UI に表示します。
残念ながら、これはすべてのドキュメントに自動的に機能を追加することと同じではなく、完全なスクリプトではなく、機能を追加する各ドキュメントに比較的軽量のフックのみをインストールする方法です。私はそれを達成できる方法を知りません。ドキュメントのコピーを作成すると、そのコピーにはすべてのスクリプトが含まれるため、追加機能が必要なドキュメントのテンプレートを作成できることに注意してください。ただし、複数のスクリプトを組み合わせて一致させたい場合は、これがうまくいかないことがあります。
この方法の利点は、コア機能を変更すると、スクリプトを更新する必要なく、それを使用するすべてのドキュメントで変更がすぐに利用できることです。一方、コンテナ スクリプトが UI と頻繁にやり取りする必要がある場合は、複雑になり、2 つのスクリプトに分けることの有用性が低下する可能性があります。