Google Apps Script(以降GAS)のスクリプトは2種類存在することを知っていますでしょうか?普段GASのスクリプトを作る際には、スクリプトの種類を気にしなくとも問題なく扱うことができます。
しかし、スクリプトのそれぞれの特徴を知らないままだと、知らぬ間に機密情報が漏れてしまったり、スクリプトの変更時に予期せぬエラーが発生することも。そこで今回は、GASの2種類のスクリプトについて、両者の特徴・違い・使い分けを初心者の方でも分かるよう具体例を挙げながら徹底比較します。
「えっGASのスクリプトの種類なんてなくない?」「そんなの知らなくても動くスクリプト作れるからいいや」という方にこそ、是非読んでいただきたい内容となっています。
GASのスクリプトは2種類存在する
GASには、「コンテナバインドスクリプト」と「スタンドアロンスクリプト」の2種類のスクリプトが存在します。名前を覚える必要は一切ありません。横文字で分かりづらいので、以降は
- 連携型(スプレッドシートやドキュメントに紐づく)
- 独立型(単独で作られたもの)
と表記して説明します。
連携型(コンテナバインドスクリプト)
連携型(コンテナバインドスクリプト)は、名前のとおりGoogleスプレッドシートやGoogleドキュメントなどに含まれるスクリプトです。
Excelでいう、VBA(マクロ)のようなものとイメージすると分かりやすいかと思います。ただ、Excelの場合は拡張子が「xlsm」となるので見分けが付くのですが、スプレッドシート上では見分けがつきません。そのため、スクリプトを新規作成する場合には、
連携型(コンテナバインドスクリプト)のメリット
連携型スクリプトのメリットは以下のとおりです。
連携型はGASから連携しているドキュメントを開ける
連携型(コンテナバインドスクリプト)は、GASから連携しているドキュメントを開くことができます。以下はGASのホーム画面です。これまでに作成したスクリプトが並んでいますが、このうち、ドキュメントのアイコンが表示されているものが連携型のスクリプトです。
連携型のスクリプトにカーソルを当てると、上の図のように連携しているドキュメント名が表示されます。ここをクリックすると、別タブでドキュメントが開きます。
また、スクリプトエディタ画面からも連携しているドキュメントを開くことができます。スクリプトエディタの左側メニューの一番上にある「概要」を押すと、「コンテナ」にドキュメントが表示されています。
連携型の場合、スプレッドシートからGASのスクリプトを開くこともできます。
ドキュメントのIDを指定する必要がない
連携型の場合は、ドキュメントのIDを指定しなくても、そのドキュメントに対する操作が可能です。例えば、スプレッドシートからGASのスクリプトを作成する場合、以下のようなソースコードになります。
2行目で書き込み対象のシートを取得していますが、IDを指定することなくgetActiveSheetを実行するだけでスプレッドシートのアクティブなシートを取得することができます。
これが独立型の場合は、以下のソースコードのように、スプレッドシートのIDを指定する必要があります。
独立型(スタンドアロンスクリプト)
独立型(スタンドアロンスクリプト)は、スクリプトが独立して存在するものをさします。
単体のスクリプトは、API連携する場合や、Google Driveを操作する場合、スクレイピング結果をCSV出力場合など、様々な場面で利用されます。ExcelのマクロはExcelありきですが、GASはスクリプト単体で動かすことができます。
独立型で作成した場合でも、スプレッドシートやドキュメントと連携させることができます。
独立型(スタンドアロンスクリプト)のメリット
独立型スクリプトのメリットは以下のとおりです。
スクリプトは公開せずドキュメントのみ配布できる
連携型(コンテナバインドスクリプト)のスプレッドシートを共有する場合、スクリプトも見ることができてしまいます。スクリプトに会社の情報やAPIキーなどの機密情報が書かれていた場合、それが意図せず漏洩してしまうリスクもあります。
独立型(スタンドアロンスクリプト)の場合、スプレッドシートを配布してもスクリプトの中身を見られることがないため、連携型と比較してセキュリティ面での安全性が高いといえます。
管理のしやすさ
連携型の場合、最初に紐づけたGASのスクリプトを変更することはできません。よって、新しいスプレッドシートで管理することになった場合、スクリプトを移行する必要があります。いっぽう、独立型であれば、スプレッドシートをIDで指定しているため、新しいスプレッドシートになった場合はIDを差し替えるだけで対応できます。
独立型と連携型の比較
独立型と連携型の比較について、表にまとめておきます。
独立型(スタンドアロン) | 連携型(コンテナバインド) | |
---|---|---|
GASでのドキュメント呼び出し | IDが必要 | IDが不要 ※IDでの呼び出しはエラー |
共有 | GASで設定 | ドキュメントから設定 ※それぞれ設定を変えることは不可 |
連携先の変更 | ー | 不可 |
管理のしやすさ | 〇 | △ |
安全性 | 〇 | △ |
ドキュメントとの連携 | × | 〇 |
では、具体的にどのように使い分けをすれば良いのか、以降にて解説します。
独立型と連携型の使い分け
ここまで読んで、
独立型でもあとから連携できるなら、どっちでもいいんじゃないの???
と思った方もいらっしゃるかと思います。しかし、GASのスクリプトは連携型と独立型の両者をきちんと区別して使わないと、思わぬところでつまづいたり情報漏洩のリスクもあります。そこで、それぞれどのように使い分けをすれば良いか解説します。
独立型を使うべきシーン
独立型を使うべきシーンは以下の通りです。
ドキュメント(スプシ、フォーム等)を配布・共有する場合
独立型(スタンドアロンスクリプト)のメリットでも紹介したとおり、スプレッドシートやGoogleドキュメントなどを他社に共有・配布する場合には独立型で作成すべきです。
スクリプトに機密情報が書かれていない場合は問題ないと思ってしまいがちですが、スプレッドシートの編集権限がある場合スクリプトの編集権限も付与されます。つまり、スプレッドシートの編集権限を持つユーザーにスクリプトを変更される可能性もゼロではありません。
複数のドキュメントを使う場合
Excel VBAのように、完全にひとつのドキュメントに紐づいたスクリプトを作成する場合には連携型でも問題ありません。しかし、複数のスプレッドシートを操作したい、スプレッドシートとフォームを操作したいなど複数のドキュメントを使いたいという場面は多いかと思います。
そのようなとき場合、連携型のスクリプトでも使えなくはないですが、連携型のスクリプトでドキュメントをIDで指定するとエラーになります。
Exception: Unexpected error while getting the method or property openById on object SpreadsheetApp.
エラー内容は「予期せぬエラー」と、とてもざっくりとした内容になっています。これだけでは何が悪いのかさっぱりですよね。
しかし、連携型であっても、連携していないドキュメントのIDを指定した場合はエラーになりません。スクリプト内で、連携しているドキュメントはID指定せず、連携していないドキュメントはID指定するよう区別して書けば良いですが、なんとも分かりづらいソースコードになってしまいます。なので、複数のドキュメントを扱う場合には、最初から独立型のスクリプトにしたほうが後々楽です。
外部アプリと連携する場合
外部アプリというのは、LINEやSlackなどのGAS以外のサービスをさします。これらのサービスと連携する際にはAPIを使うことが一般的です。API連携には「APIキー」という、サービス間を連携するときに使う認証キーを使います。APIキーは他の人に絶対に知られてはならない大切な情報です。もし、APIキーを知られてしまったら、勝手に有料のサービスを利用されてしまったり、機密情報を見られてしまう可能性があります。
先ほど説明したとおり、スプレッドシート等のドキュメントと連携しているスクリプトでは、スクリプトの中身を見られてしまいます。なので、外部アプリと連携するスクリプトを作成する場合も、最初から独立型のスクリプト一択となります。
連携型を使うべきシーン
連携型を使うべきシーンは以下のとおりです。
ひとつのシートのみ扱う場合
ひとつのシートのみを扱う場合には、連携型のスクリプトのほうが便利です。例えるならExcelのVBAのような用途で使っている場合です。家計簿の集計、勤務表、その他帳簿など、長期的に見てシートを新しくする予定もなく、追加で参照するシートがなさそうな場合におすすめです。
ドキュメント内でGASを実行したいとき
ドキュメント内でGASのスクリプトを実行したいときは、連携型のスクリプトを使います。例えば、スプレッドシート内にボタンを設置して、そのボタンを押したらGASのスクリプトを実行するとします。
このボタンを押すと、GASで作成したスクリプトが実行されます。
これは、GASと連携している場合でしかできない操作です。打刻ボタン、集計ボタンなど、ボタン操作でスクリプトを実行させたい場合には連携型を使うことになります。
作成方法
連携型(コンテナバインドスクリプト)、独立型(スタンドアロンスクリプト)それぞれを作成する方法を解説します。
連携型(コンテナバインドスクリプト)
連携型は、ドキュメントから作成します。
スプレッドシート・ドキュメント
スプレッドシートまたはドキュメントからスクリプトを作成する場合は、上部メニューから「拡張機能」>「Apps Script」と進みます。
Googleフォーム
Googleフォームからスクリプトを作成する場合は、右上の3点マークから「スクリプト エディタ」を押します。
作成したスクリプトを再度開く場合
2回目以降に開く場合は、上記の手順か、Apps Scriptのホーム画面から開きます。スクリプトの編集画面のリンクをブックマークしておいて直接開いてもOKです。
独立型(スタンドアロンスクリプト)
独立型としてスクリプトを作成する場合は、Apps Scriptのホーム画面を開きます。画面左側メニューにある「新しいプロジェクト」を押すと、新規で独立型のスクリプトが作成されます。
作成したスクリプトを再度開く場合
Apps Scriptのホーム画面から開きます。スクリプトの編集画面のリンクをブックマークしておいて直接開いてもOKです。
注意点
注意点は、独立型または連携型で作成したスクリプトは、後から変更ができないということです。
連携型として作成したスクリプトは、ドキュメントとの連携を解除することはできません。なので、独立型に変更したい場合には、新しいスクリプトを作成し、そこにスクリプトを移行してくるしかありません。
独立型として作成したスクリプトを、あとからドキュメントに連携することもできません。連携したい場合には、ドキュメントからApps Scriptを開いて、そこにスクリプトを転記するようになります。
どちらについても、「一度その形式で作ったら絶対に変更はできないよ!!!」というわけではありませんが、連携型でしか使えない関数もあり、移行時にエラーが発生する可能性もあるので、なるべくなら途中で変更の必要が発生しないよう気を付けたいところです。
まとめ
今回は、独立型(スタンドアロンスクリプト)と連携型(コンテナバインドスクリプト)それぞれの特徴、メリット・デメリット、使い分けについて解説しました。
GASを操作する上で、2種類のスクリプトが存在するということを理解しておくのとそうでないのとでは、エラー対処やセキュリティ対策など様々な面で差が出てきます。初心者の方や、これからGASを触る方にこそ知っておいてほしい点です。
最近は、インターネット環境さえあればスマホからでも操作できるスプレッドシートの需要が高まっており、Excelからスプレッドシートへ移行する方も増えてきています。当ブログでは、スプレッドシートとGASを使った様々なアイディアを紹介していますので、是非チェックしてみてください♪
コメント