Google Apps Script (GAS)でスプレッドシートのデータを外部システムと連携させたい場合、過去にはgetDataSourceUrl()というメソッドが使われていました。しかし、このメソッドは現在では非推奨となっており、利用には注意が必要です。
この記事では、getDataSourceUrl()がどのような機能であったかと、現在推奨されている代替方法について解説します。

getDataSourceUrl()とは?(※非推奨)
getDataSourceUrl()は、指定したRangeのデータを、外部からJSON形式で取得できる特殊なURLを生成するメソッドでした。
このURLを知っていれば誰でもデータにアクセスできるため、手軽なデータ公開手段として利用されていましたが、セキュリティ上のリスクも大きいものでした。
過去の基本的な使い方
// ※ このコードは現在推奨されていません
function generateLegacyDataSourceUrl() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('公開データ');
// スプレッドシートの共有設定を「リンクを知っている全員」にする必要があった
const dataRange = sheet.getRange('A1:B10');
const sourceUrl = dataRange.getDataSourceUrl();
console.log('生成されたデータソースURL:', sourceUrl);
}
この機能は、Googleのセキュリティ強化方針により、現在ではその利用が推奨されていません。既存のスクリプトで使われている場合を除き、新規での利用は避けるべきです。
代替案:ContentServiceを使って安全なAPIを作成する
現在、スプレッドシートのデータを外部に公開する最も安全で推奨される方法は、ContentServiceを使って自作のWeb APIを作成することです。
doGet()という特別な関数を定義することで、GASプロジェクトのURLにアクセスがあった際に、指定したデータを返すAPIとして機能させることができます。
doGet()を使ったAPIの基本実装
以下のスクリプトは、特定のスプレッドシートのデータをJSON形式で返すシンプルなWeb APIです。
// この関数は、ウェブアプリとしてデプロイすると機能します
function doGet(e) {
try {
const ss = SpreadsheetApp.openById("ここにスプレッドシートIDを入力");
const sheet = ss.getSheetByName("公開用シート");
const data = sheet.getDataRange().getValues();
// データをJSON文字列に変換
const jsonString = JSON.stringify(data);
// ContentServiceを使ってJSONとして出力
return ContentService.createTextOutput(jsonString)
.setMimeType(ContentService.MimeType.JSON);
} catch (error) {
// エラーハンドリング
const errorJson = JSON.stringify({ error: error.message });
return ContentService.createTextOutput(errorJson)
.setMimeType(ContentService.MimeType.JSON);
}
}
この方法のメリット
- アクセス制御: スクリプトの実行権限を「自分のみ」または「Googleアカウントでログインしているユーザー」に限定でき、意図しない第三者によるアクセスを防げます。
- 柔軟なデータ加工:
getValues()で取得したデータをGAS上で自由に加工・整形してから返すことができます。必要なデータだけを選別したり、形式を整えたりすることが可能です。 - セキュリティ: スプレッドシート自体を「リンクを知っている全員」に公開する必要がありません。スクリプト経由でのみデータが公開されるため、元データの安全性が高まります。
- パラメータの利用:
doGet(e)の引数eを通じて、URLのクエリパラメータ(例:?id=123)を受け取り、返すデータを動的に変更することも可能です。
まとめ
getDataSourceUrl()は過去の遺物であり、現在ではContentServiceを用いたWeb APIの作成がベストプラクティスです。
getDataSourceUrl()はセキュリティリスクがあるため使用しない。ContentServiceとdoGet(e)を使って、安全で柔軟なAPIを自作する。- API化することで、スプレッドシートを共有設定で公開する必要がなくなり、元データの安全性が向上する。
外部とのデータ連携を実装する際は、必ずContentServiceを利用する方法を検討してください。

