Googleスプレッドシートで作成したファイルをコピーして利用しようとしたところ、組み込んでいたスクリプト(Google Apps Script)が突然動作しなくなることがあります。この現象は、コピー元のファイルでは正常に動いていたにもかかわらず、コピー先でだけ発生するため、戸惑う方が多いです。多くの場合、原因はスクリプトの実行に必要な権限がコピー先のファイルに正しく引き継がれていないことにあります。この記事では、ファイルコピー後にスクリプトが動かない原因を具体的に切り分け、適切な権限確認と再設定の手順を解説します。会社で共有されているスプレッドシートやテンプレートを複製して使うケースにおいて、スムーズにスクリプトを動作させるための実践的な内容です。
【要点】この記事で確認すること
- 最初に見る場所: スクリプトエディタの「承認済みユーザー」設定と、ファイルの所有権・共有設定です。
- 切り分けの軸: スクリプトが「トリガー」か「カスタム関数」か、あるいは「ボタン実行」かによって権限の要求が異なります。また、コピー元とコピー先でスクリプトのアクセス範囲(スプレッドシート、ドライブ、メールなど)を比較してください。
- 注意点: 会社の管理ポリシーによっては、スクリプトの実行に管理者の承認が必要な場合があります。自分で権限を変更できないときは、IT管理者に連絡してください。また、コピー元のスクリプトを削除してしまうと元に戻せなくなるため、作業前にバックアップを取ることを推奨します。
ADVERTISEMENT
目次
ファイルコピー後にスクリプトが動かない主な原因
Googleスプレッドシートのファイルをコピー(「コピーを作成」機能や「Googleドライブで複製」)した際に、スクリプトが動作しなくなる原因は、大きく分けて3つあります。それぞれの原因を理解することで、適切な対処が可能になります。
1. スクリプトの承認情報がコピーに引き継がれない
Google Apps Scriptは、スクリプトが初めて実行される際に、ユーザーに対して権限の承認を求めます。この承認情報は、ブラウザのキャッシュやユーザーアカウントに紐づいて保存されるため、ファイル単位での承認ではありません。つまり、元のファイルで承認済みであっても、コピーしたファイルでは新たに承認が必要です。特に、スクリプトがGoogleカレンダーやGmailなど、スプレッドシート以外のGoogleサービスにアクセスする場合、承認画面が表示されないままエラーになることがあります。
2. トリガーがコピーされない
スクリプトに設定したトリガー(時間主導型やスプレッドシートの変更時など)は、ファイルのコピー時に継承されません。そのため、コピー先ファイルではトリガーが一切設定されていない状態になります。トリガーで動くスクリプトは、手動で再設定する必要があります。
3. スクリプトのプロパティや依存関係の不整合
スクリプト内で ScriptProperties や UserProperties、あるいは CacheService などを使っている場合、これらのデータはファイルのコピーに含まれません。また、外部APIのエンドポイントやスクリプトIDをハードコードしていると、コピー先で正しく動作しないことがあります。
権限確認とトラブルシューティングの手順
以下の手順に従って、問題の原因を特定し、解決を図ります。手順は、問題の切り分けを意識して進めてください。
- スクリプトエディタを開く: コピー先のスプレッドシートで、メニュー「拡張機能」→「Apps Script」を開きます。
- すべての関数を手動実行する: エディタ上部の「デバッグ」または「実行」ボタンから、各関数を1つずつ手動で実行してみます。このとき、承認画面が表示されたら「許可」をクリックしてください。承認画面が出ない場合、エラーメッセージを確認します。
- トリガーを確認する: スクリプトエディタ左側のメニューから「トリガー」をクリックし、設定されているトリガーが存在するか確認します。空であれば、「トリガーを追加」から元のファイルと同じ設定を追加します。
- スクリプトのプロパティを確認する: スクリプトエディタで「プロジェクトの設定」→「スクリプトのプロパティ」を開き、元のファイルと同じプロパティが設定されているか確認します。なければ追加してください。
- 権限スコープを確認する: スクリプトエディタの「権限の確認」をクリックし、スクリプトが要求している権限(スプレッドシート、ドライブ、メールなど)を確認します。必要に応じて、manifestファイル(appsscript.json)を編集し、権限を明示的に指定することもできます。
- OAuth同意画面(管理者向け): 会社のGoogle Workspaceアカウントで、スクリプトが内部アプリとして登録されている場合、管理者がOAuth同意画面を設定している可能性があります。その場合は、管理者に連絡してコピー先ファイルのテストユーザー追加を依頼してください。
- シートのコンテナバインドかスタンドアロンか: スクリプトがスプレッドシートにコンテナバインドされている場合(スクリプトエディタがシート内から開ける)、ファイルのコピーで移動しますが、スタンドアロンスクリプトの場合は手動で再リンクする必要があります。スタンドアロンスクリプトの場合は、スプレッドシートにスクリプトがリンクされているか確認してください。
原因別の症状と対応方法
| 原因 | 症状 | 対応方法 |
|---|---|---|
| 承認情報が未承認 | スクリプトを実行すると「承認が必要です」というエラーが表示され、続行できない。 | スクリプトエディタから関数を手動実行し、承認画面で許可する。 |
| トリガーが未設定 | スクリプトを手動で実行すると動くが、自動実行されない。 | トリガーを再設定する。 |
| プロパティが欠落 | 特定の関数だけエラーになる。プロパティに依存している処理が失敗する。 | 元のファイルからプロパティをコピーする。 |
| OAuth同意画面の制限 | 承認画面が表示されず、「このアプリはブロックされました」と表示される。 | 管理者にテストユーザー追加または公開設定を依頼する。 |
ADVERTISEMENT
よくある失敗パターンとその対処
パターン1: 承認画面が出ない、または「無効なスコープ」エラー
スクリプトが要求する権限が、Google Workspace管理者のポリシーで制限されている可能性があります。特に、Gmail送信やカレンダーへのアクセスは、デフォルトで制限されていることが多いです。この場合、管理者に連絡し、該当のスコープを許可するよう依頼する必要があります。また、スクリプトエディタの「プロジェクトの設定」で「OAuth 2.0 スコープ」を確認し、不要なスコープが含まれていないか見直しましょう。
パターン2: 「スクリプト関数が見つかりません」と表示される
カスタム関数(スプレッドシートのセルで =関数名() として使うもの)を定義している場合、コピー先のファイルでその関数が認識されないことがあります。原因として、カスタム関数は毎回の再計算で実行されるため、承認情報が必要です。一度手動でスクリプトエディタからその関数を実行し、承認を済ませると直ります。
パターン3: コピーしたのだから権限は継承されると思っていた
多くのユーザーが誤解しがちな点ですが、Google Apps Scriptにおける権限承認は「ユーザーアカウント」に対して行われ、「ファイル」に対して行われるわけではありません。したがって、ファイルをコピーしても、新しいファイルで初めてスクリプトを実行する際には、改めて承認を求められます。ファイルを複製して使う際は、必ず最初に手動でスクリプトを実行して承認を得る習慣をつけましょう。
管理者へ伝えるべき情報
会社のGoogle Workspace環境でスクリプトが動かない場合、管理者に以下の情報を伝えると問題の解決が早まります。
- スクリプトのプロジェクトID: スクリプトエディタの「プロジェクトの設定」から確認できるプロジェクトIDを共有してください。管理者が監査ログを調べる際に役立ちます。
- エラーの正確なメッセージ: 例:「Exception: この操作を完了するために必要な権限がありません。」「Access denied: 必要なスコープが許可されていません。」など。
- 使用しているGoogle Workspaceエディション: Business Starter、Business Standard、Business Plus、Enterpriseなど、エディションによって利用できるスクリプトの制限が異なります。
- スプレッドシートの所有者と共有設定: ファイルが組織外と共有されている場合、アクセス権限の影響でスクリプトが制限されることがあります。
よくある質問(Q&A)
Q1. ファイルを「コピーを作成」しても、スクリプトは自動的にコピーされますか?
コンテナバインドされたスクリプト(スプレッドシートに直接埋め込まれているスクリプト)は、ファイルのコピーに自動的に含まれます。ただし、トリガーや承認情報は含まれません。スタンドアロンスクリプトの場合は、ファイルのコピーとは別にスクリプトも複製する必要があります。
Q2. コピー先のファイルでスクリプトを実行するたびに承認画面が出ます。どうすれば防げますか?
承認画面は、スクリプトが初めて実行される時、またはスコープが変更された時に表示されます。毎回表示されるのは異常です。その場合、ブラウザのキャッシュクリアや、シークレットモードでのテスト、別のGoogleアカウントでのテストを行ってください。それでも解決しない場合は、管理者がOAuth同意画面の設定で「ユーザーごとに承認が必要」にしている可能性があります。
Q3. トリガーがコピーされないのは仕様ですか?
はい、仕様です。トリガーはファイルではなくユーザーアカウントに紐づく設定であるため、ファイルのコピーでは引き継がれません。手動で再設定する必要があります。また、テンプレートとして配布する場合は、トリガー設定手順をドキュメント化しておくと親切です。
まとめ
Googleスプレッドシートのファイルをコピーした後にスクリプトが動かない場合、まずは承認情報の再取得とトリガーの再設定を試みてください。これらの手順で多くの問題は解決します。もしそれでも動かない場合は、スクリプトのプロパティやOAuthスコープ、管理者のポリシーが原因である可能性が高いです。会社のIT管理者と連携し、適切な権限設定を確認することで、スクリプトを安定して動作させることができます。また、ファイルを複製する前に、スクリプトの動作に必要な設定をメモしておく習慣をつけると、トラブルを未然に防ぐことができます。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
