#25 @OnlyCurrentDoc って何?
以前の記事で、「Google スプレッドシート」で記録されたマクロがどんなプログラムになっているのかを確認しました。
このマクロとして作成されたプログラムの先頭に、
/** @OnlyCurrentDoc */と書かれていたんです。以前の記事では、
1 ~ 2行目は、/* と */ で囲まれた中はコメントとして扱われるので、動作に意味がありません。
と説明していたものの、この記述には意味があったようです。
どんな意味が?
Manual authorization scopes for Sheets, Docs, Slides, and Forms では、以下のように説明されています。
An opposing annotation, @NotOnlyCurrentDoc, is available if your script includes a library that declares @OnlyCurrentDoc, but the master script actually requires access to more than the current file.
要約すると、@OnlyCurrentDoc が指定されている場合には、その関連付けられたドキュメント(例えば、フォームやスプレッドシート)にしかアクセスしないことを明示するもののようです。
以下のページで説明されている内容から判断するに、他のドキュメントにはアクセスしないプログラムであれば、この宣言を行っておけば、面倒な権限の確認が簡略化されるようです。
確認したところ、@OnlyCurrentDoc が指定されていても、指定されていなくても、権限の確認は行われますが、簡略化されるようです。どう変化するかを、説明しておきます。
まず、スクリプトを実行すると以下のように「承認が必要」ダイアログが表示され、どのアカウントでスクリプトを実行するのかを選択するところまでは変わりません。


@OnlyCurrentDoc が未指定
下図のような「このアプリは Google で確認されていません」という、ちょっと心配になるようなダイアログが表示され、ページ下部の「詳細」というリンクを選択します。

「詳細」というリンクをクリックしたら、追加で表示された更なるメッセージを確認して、「…(安全ではないページ)に移動」というリンクをクリックします。

ページ中央には「Google スプレッドシートのすべてのスプレッドシートの参照、編集、作成、削除」の許可を求めていることが表示されます。

以降、内容を確認して、ページをスクロールして最下部の「許可」を選択する流れが続きます。
@OnlyCurrentDoc を指定
@OnlyCurrentDoc を指定していると、「このアプリは Google で確認されていません」ダイアログが表示されずに、権限の許可を求めるダイアログが表示されます。
また、許可を求めている内容が「このアプリケーションがインストールされているスプレッドシートの表示と管理」と限定的になっています。

以降、内容を確認して、ページをスクロールして最下部の「許可」を選択する流れが続きます。
まとめ
作成するプログラムによっては、確認を求められる内容が変わってくるかと思いますが、@OnlyCurrentDoc を指定できる内容のプログラムであれば、プログラムの影響範囲を限定的にできるので安心できると思いました。
今後作成するプログラムについては、この辺りも考慮していこうと思います。過去に作成したものについては、更新することがあればそのタイミングで変更しようと思います。
