GoogleAppsScript を実行するためのアカウント

佐野

佐野 2014年3月28日

GoogleAppsScriptでは、ウェブアプリケーションとして作成する事もでき、
そのアプリにアクセスした状況に応じて、
スクリプトを稼動させることが可能です。

そこで注意したい事は、どのアカウントで動作をさせるかという事です。

20140328133134

つまり、そのウェブアプリケーションに
アクセスしたユーザーアカウントで動作させるか、
そのスクリプトのオーナーのアカウントで動かすかです。

前者の場合は、アクセスしたユーザーの
Gmailやカレンダー等のサービスを操作するといった事も可能ですが、
そのためには、まずはそのユーザーもGoogleにログインしている事が前提で、
また、スクリプトが別のスプレッドシートなどを読み出す際には、
そのスプレッドシートにも、共有権限を持たせておくことが必要です。

後者の場合は、スクリプトのオーナーのアカウントが、
スクリプトを動作させる事になるため、
どのユーザーがウェブアプリにアクセスしても、
オーナーのアカウントが動かしている事になります。

また、メール送信のために使われる関数、
「GmailApp.sendEmail()」「MailApp.sendEmail()」でも、
スクリプトを実行するオーナーが、メールを送信しているという事になります。
ちなみにメール送信の関数は、以上の2つがありますが、
どちらも大差はありません。
つまりは、スクリプトで送信したメールの「送信元」が、
スクリプト実行者という事になります。

「送信元」というのは、Gmailの画面であれば、件名の右側に表示される、
誰が送ったメールかという証明のようなものです。
少々混同しやすいのが「返信先」ですが、それとは別物です。

先述の送信用関数の第4引数のオプション部分に、
{replyTo:(返信先)}と、連想配列で指定すれば返信先を指定できますが、
「送信元」は別で、「送信元」はスクリプトを動かしたユーザーとなります。
また、{noReply:true}にすることで、「送信元」メールアドレスも
「noreply」にすることが可能です。

しかし、お客さんによっては、
この「送信先」も指定したいと、おっしゃる場合もあります。
これはもう、そのアカウントでスクリプトを動作させるしかありません。

普通にフォームの処理を行うだけなら、
そのアカウントでスクリプトトリガーを設定すればいいのですが、
ウェブアプリケーションの場合、そうもいかないようです。

20140328133155

じつは、ウェブアプリケーションの場合、
アプリにアクセスするユーザーか、スクリプトのオーナーしか、
選択できません。
「次のユーザーとしてアプリケーションを実行」の選択肢のも、
「プロジェクト オーナー」しか存在せず、
オーナー以外のユーザーは、選択する事すらできません。
項目をクリックしても何も起こりません。

それならスクリプトのオーナー権を譲渡すればとも思いますが、
じつは
スクリプト自体のオーナー権は譲渡できない
ようなのです。
また、スクリプトの存在するスプレッドシートのオーナー権を譲渡しても、
その中のスクリプト自体のオーナー権までは反映されないようです。
つまり、ウェブアプリから発信されるメールの
「送信元」を変えるためだけに、送信元にしたいアカウントで、
スプレッドシート丸ごとコピーをし、
改めて設定を行う必要がある場合もあります。
そうなると、お客さんが利用する
システムの報告をし直すという事にもなりかねません。

ちなみに「noReply」のオプションを使用すれば
「noreply」にする事は可能ですが、
複数ドメインをお持ちのお客さんの場合、
「送信元」のドメイン(@より右側)までは変更できません。

ですので、GoogleAppsScriptで何かシステムを作ろうと思えば、
どのアカウントでもいいとは考えず、
企画の段階で、どのアカウントで作成するのかも、
考えておいたほうがいいかもしれません。