Googleスプレッドシートは、データ管理や共有において多くの場面で利用されています。しかし、そのデータを外部アプリやウェブサイトで活用する際に、安全に共有する方法を検討する必要があります。
特に、特定の許可されたユーザーにのみアクセスを許可したい場合、適切な認証プロセスを構築することが不可欠です。本記事では、Google Apps ScriptとGoogle Cloud Platform(GCP)を活用してスプレッドシートのデータをJSON形式で提供し、特定のユーザーのみがアクセスできるようにする手順を詳細に解説します。
Contents
ディスプレイ広告
どんな時に使用するのか
以下のような状況でこの方法が役立ちます:
- スプレッドシートに保存されたデータを、社内システムやウェブアプリで利用したい場合。
- 特定の許可されたユーザー(例:社内メンバーやクライアント)にのみデータを公開したい場合。
- API形式でデータを提供し、JavaScriptなどを使って動的にウェブページに表示したい場合。
- セキュリティを考慮し、不特定多数へのアクセスを防ぎたい場合。
Google Cloud Platform(GCP)のプロジェクト設定
1. GCPプロジェクトを作成
- Google Cloud Consoleにアクセスし、Googleアカウントでログインします。
- 左上の「プロジェクト選択」をクリックし、「新しいプロジェクトを作成」を選択します。
- プロジェクト名を入力し、「作成」をクリックします。
2. APIとサービスを有効化
- GCPのダッシュボードで作成したプロジェクトを選択します。
- 「APIとサービス」→「ライブラリ」を選択します。
- 「Google Sheets API」を検索し、「有効化」をクリックします。
- 同様に「Google Apps Script API」を検索し、「有効化」をクリックします。
3. OAuth 2.0クライアントIDを作成
- 「APIとサービス」→「認証情報」→「認証情報を作成」をクリックします。
- 「OAuth 2.0 クライアント ID」を選択します。
- 「アプリケーションの種類」で「ウェブアプリケーション」を選択します。
- 「リダイレクト URI」を設定します。以下のURIを追加してください:
https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec
※YOUR_SCRIPT_ID
にはApps ScriptのデプロイURLからスクリプトIDを置き換えてください。 - 「作成」をクリックすると、クライアントIDとクライアントシークレットが表示されます。
- クライアントIDをメモしておきます(後ほど使用します)。
実際の記述や具体的な手順
1. Google Apps Scriptの設定
以下のコードをスプレッドシートのApps Scriptに追加します。
// Googleスプレッドシートのデータを取得してJSON形式で返す
function doGet(e) {
const userEmail = Session.getActiveUser().getEmail(); // 現在のユーザーのメールアドレス
const allowedEmails = ["user1@example.com", "user2@example.com"]; // 許可するユーザーリスト
// 許可されていない場合、エラーメッセージを返す
if (!allowedEmails.includes(userEmail)) {
return ContentService.createTextOutput(JSON.stringify({ error: "Access denied" }))
.setMimeType(ContentService.MimeType.JSON);
}
// 許可されたユーザーにはデータを返す
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
const data = sheet.getDataRange().getValues();
return ContentService.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
2. フロントエンドの設定
Google OAuth認証を用いてデータを取得するHTMLを用意します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Google OAuthでJSONデータ取得</title>
<script src="https://apis.google.com/js/platform.js" async defer></script>
<script>
const CLIENT_ID = 'YOUR_CLIENT_ID'; // GCPで取得したクライアントID
const SCRIPT_URL = 'YOUR_SCRIPT_URL'; // Apps ScriptのデプロイURL
const SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly';
function authenticate() {
gapi.load('client:auth2', () => {
gapi.auth2.init({ client_id: CLIENT_ID, scope: SCOPES }).then(() => {
const GoogleAuth = gapi.auth2.getAuthInstance();
GoogleAuth.signIn().then(() => fetchData());
});
});
}
function fetchData() {
const GoogleAuth = gapi.auth2.getAuthInstance();
const user = GoogleAuth.currentUser.get();
const token = user.getAuthResponse().id_token;
fetch(SCRIPT_URL, {
method: 'GET',
headers: {
Authorization: `Bearer ${token}`
}
})
.then(response => response.json())
.then(data => {
console.log(data);
document.getElementById('data-container').innerText = JSON.stringify(data, null, 2);
})
.catch(error => {
console.error('Error:', error);
});
}
</script>
</head>
<body>
<button onclick="authenticate()">データを取得する</button>
<pre id="data-container"></pre>
</body>
</html>
注意点
- Apps ScriptのURLをGCPで正確にリダイレクトURIとして登録してください。
- 許可されたユーザーリストを定期的に更新する必要があります。
- セキュリティを確保するため、必要最小限のスコープを設定してください。
まとめ
本記事では、Googleスプレッドシートのデータを特定の許可されたユーザーだけがJSON形式でアクセスできるようにする方法を解説しました。
GCPの設定からApps Script、フロントエンドまでの詳細な手順を提供しました。この方法を活用して、より安全で効率的なデータ管理を実現しましょう!
※参考する場合は自己責任でお願いします。
ディスプレイ広告
ディスプレイ広告