※本記事はプロモーションを含みます
目次
名前が同じファイルが複数あるとき
Google Apps Script(プログラム自動化ツール)を用いて作業の効率化を行う場合、スプレッドシートID(一意識別子)の利用を避けて通ることはできません。スプレッドシートIDというのは、Google Drive(クラウドストレージツール)上に保存されている各ファイルに割り当てられた、世界で一つだけの固有の識別符号です。
スプレッドシートIDというのは、人間の世界で例えるならマイナンバーのようなものです。ファイル名を途中で変更したり、保存先のフォルダを別の場所へ移動したりしても、このスプレッドシートIDが変更されることはありません。なので、プログラムから特定のファイルを確実に呼び出したい場合、ファイル名ではなくスプレッドシートIDを使用するのが鉄則となります。この記事では、Google Apps Scriptを用いてスプレッドシートIDを取得する方法について、基本となる記述から実際の業務における応用手順、そして初心者が間違いやすい注意点までを順を追って解説します。内容を一つずつ確認しましょう。
今開いているファイルの ID
まずは、スプレッドシートIDを抽出するための最も簡単で確実なコードを紹介します。以下の記述を実行することで、現在編集しているファイルのスプレッドシートIDを素早く取得できます。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const id = ss.getId();
Logger.log(id);
getActiveSpreadsheet のあと getId
一行ずつ内容を確認しましょう。
- 1行目:
const ss = SpreadsheetApp.getActiveSpreadsheet();
1行目の処理では、現在開いているスプレッドシートのオブジェクト(操作対象のデータのかたまり)を呼び出し、定数ssに保存しています。SpreadsheetAppというのは Google Apps Script で表計算ファイルを操作するための基本クラス(機能群)であり、getActiveSpreadsheet()というメソッドは、プログラムが紐付いているファイル自身を呼び出す役割を持ちます。 - 2行目:
const id = ss.getId();
2行目の処理では、1行目で取得したオブジェクト(ss)に対して、getId()というメソッドを実行しています。ただし、このメソッドを実行することで、目的の固有符号が抽出されます。抽出された文字列は定数idに保存されます。 - 3行目:
Logger.log(id);
3行目の処理では、取得した文字列をログ画面に表示させます。Logger.log()というのは開発中の挙動確認において非常に重要なメソッドであり、変数の中身が正しく取得できているかを画面上で確認するために使用します。実行結果を必ず確認しましょう。
URLに入っている文字列そのもの
Google Apps Script において、スプレッドシートIDというのはどのような特徴を持ち、なぜ重要視されるのでしょうか。その仕様を理解することは、より安定したプログラムを書くための第一歩となります。
URLに含まれるランダムな文字列の正体
getId() というメソッドは、Webブラウザのアドレスバーに表示されるURLに含まれたランダムな文字列(ID)を抜き出して返します。たとえば、対象のURLが以下のような形式で表示されていたと仮定します。
https://docs.google.com/spreadsheets/d/1A2B3C4D5E6F7G8H9I0J/edit
このURL構造において、/d/ と /edit の間に配置されている 1A2B3C4D5E6F7G8H9I0J という文字列自体が、該当するスプレッドシートIDとなります。
なぜファイル名ではなくIDで管理するのか
連携システムの構築やファイル経路の作成において、この文字列は最も信頼できる一意の識別符号として使用されます。仮にプログラム内部で「売上管理表」というファイル名を使って検索処理を行った場合、同じ名前のファイルが複数存在するときに意図しない別のファイルを処理してしまう危険性があります。なので、スプレッドシートIDを直接指定してファイルを処理する方法を選びましょう。IDを指定すれば、そのような誤作動を確実に防ぐことができます。
DriveApp や通知リンクに渡す
抽出したスプレッドシートIDは、単にログ画面へ表示させるだけでなく、他の連携ツールから対象のファイルを指定するキー(目印)として幅広く活用されます。実務でよく使われる具体的な活用例を確認しましょう。
DriveAppとの連携によるファイル操作
Google Apps Script の DriveApp クラス(ファイル管理機能)を使用すると、クラウド上のファイルを直接操作できます。スプレッドシートをPDFデータに変換してメールで自動送信したり、特定のフォルダへバックアップファイルを生成したりする際、対象のファイルを指定するためにスプレッドシートIDが必要となります。
const ss = SpreadsheetApp.getActiveSpreadsheet();
const id = ss.getId();
// 取得したIDを使ってDriveAppからファイルオブジェクトとして取得する
const file = DriveApp.getFileById(id);
Logger.log(file.getName() + " のバックアップ処理を開始します");
このように、表計算アプリの操作機能(SpreadsheetApp)からファイル管理機能(DriveApp)へ処理を引き継ぐ際に、スプレッドシートIDが重要な橋渡し役を果たします。
外部APIや別システムとの連携
たとえば、社内で利用しているチャットツールにスプレッドシートの更新通知を送信する際、対象ファイルの参照用リンクを通知文の中に含めたい場合があります。取得したスプレッドシートIDを用いて "https://docs.google.com/spreadsheets/d/" + id のように文字列を結合することで、正確なアクセス先URLを動的に生成できます。なので、外部システムとも円滑に連携させることが可能となります。正しいリンクが生成できるか確認しましょう。
単体スクリプトでは Active が無い
非常に便利な getActiveSpreadsheet() と getId() の組み合わせですが、プログラムの作成方法によってはエラーが発生する危険な落とし穴が存在します。実行環境の仕様の違いを正しく理解しておきましょう。
コンテナバインドスクリプトとスタンドアロンスクリプトの違い
エラーが発生する原因を理解するために、まずはプログラムの2つの作成形態を知る必要があります。
- コンテナバインドスクリプト:特定のスプレッドシートやドキュメントの画面内部から作成され、そのファイルと直接結びついているプログラム。
- スタンドアロンスクリプト:Google Drive の新規作成メニューから単独のファイルとして作成されたプログラム。特定のファイルには結びついていません。
getActiveSpreadsheet() の制約とエラー対策
落とし穴: SpreadsheetApp.getActiveSpreadsheet() という記述は、コンテナバインドスクリプト(ファイルに結びついたプログラム)以外の場所から呼び出すとエラーが発生します。スタンドアロンスクリプト内部でこの処理を実行した場合、システムは「どのファイルを対象とすればよいのかわからない」という状態になるので、処理が途中で停止してしまいます。
対策: スタンドアロンスクリプトから特定のファイルを操作したい場合は、getActiveSpreadsheet() ではなく openById() というメソッドを利用しましょう。対象となるスプレッドシートIDをあらかじめブラウザのアドレスバーから確認しておき、その文字列を直接指定してファイルを開きます。
| スクリプトの種類 | ファイルの指定方法 | 使用するメソッド |
|---|---|---|
| コンテナバインドスクリプト | 紐付いているファイル自身を取得 | getActiveSpreadsheet() |
| スタンドアロンスクリプト | IDを使って外部からファイルを開く | openById("スプレッドシートID") |
// スタンドアロンスクリプトでの正しい実装例
const targetId = '1A2B3C4D5E6F7G8H9I0J'; // 操作したいファイルのIDを指定
const ss = SpreadsheetApp.openById(targetId);
Logger.log("指定したファイル名:" + ss.getName());
このように、自身が作成しているプログラムの形態がどちらに該当するかを把握して、適切なメソッドを選んで記述しましょう。
紐付きか単体かで開き方を分ける
Google Apps Script においてスプレッドシートIDを取得して正しく扱う手順は、業務の自動化プログラムを構築する上でとても重要です。getId() というメソッドを使えば簡単に固有の識別符号を取得できるので、DriveApp や外部ツールとの連携をスムーズに進めることができます。ただし、プログラムの作成形態(コンテナバインドかスタンドアロンか)による動く仕組みの違いには十分に注意しましょう。これらの仕様の違いを事前に確認しておけば、エラーが発生した際にもプログラムを素早く修正できるようになります。

