INDEX
Googleスプレッドシートは多くのビジネスやプロジェクトで活用されていますが、そのデータをAPI経由でアクセスできるようにすることで、他のシステムやアプリケーションと統合することが可能になります。この記事では、Google Apps Script(GAS)を使ってスプレッドシートのデータをAPIとして公開し、そのデータをJSON形式で取得できるAPIを作成する方法をステップバイステップで説明します。
ステップ 1: スプレッドシートの準備
まず、APIで公開したいデータを含むGoogleスプレッドシートを用意します。
下記の項目でシートを作成しています。
・ID
・新規事業
・印象、よく言われるキーワード
・トンマナ(複数選択可)
・作りたいジャンル(複数選択可)
・カラー
・一言コピー(テキスト形式)
※入力データの利用目的は、入力データをリアルタイムに近い形でAPIで公開させます。
ステップ 2: Google Apps Script でスクリプトを作成
次に、スプレッドシートにGoogle Apps Scriptを追加して、データを取得し、APIとして公開するスクリプトを作成します。
以下の手順で進めます。
1. GASエディタの起動
1. スプレッドシートを開きます。
2. メニューの「拡張機能」から「Apps Script」をクリックします。
2. スクリプトの作成
以下のスクリプトをApps Scriptエディタに貼り付けます。このスクリプトは、スプレッドシートのデータを取得し、JSON形式で出力するAPIを生成します。
// スプレッドシートのデータを JSON 形式に変換する関数
function makeJson() {
const cache = CacheService.getScriptCache(); // スクリプトのキャッシュサービスを使用
const cachedData = cache.get('jsonData'); // 'jsonData' というキーでキャッシュを取得
// キャッシュが存在する場合は、キャッシュされたデータを返す
if (cachedData) {
return JSON.parse(cachedData); // キャッシュをJSONとしてパースして返す
}
// アクティブなスプレッドシートの現在のシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 2行目から最後の行まで、A列からI列までのデータを取得
const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 9); // 2行目以降、A~I列を指定
const data = range.getValues(); // 各行のデータを配列として取得
// 1行目(ヘッダー)のデータを取得
const headers = sheet.getRange(1, 1, 1, 9).getValues()[0]; // A1~I1の範囲のヘッダー行
let jsonData = []; // 結果を保存するための配列
// 各行のデータをループ
for (let i = 0; i < data.length; i++) {
const row = data[i];
// 「選択してください」または空の「一言コピー」が含まれる行をスキップ
if (
row[headers.indexOf('新規事業')] === '選択してください' ||
row[headers.indexOf('印象、よく言われるキーワード')] === '選択してください' ||
row[headers.indexOf('トンマナ(複数選択可)')] === '選択してください' ||
row[headers.indexOf('作りたいジャンル(複数選択可)')] === '選択してください' ||
row[headers.indexOf('カラー')] === '選択してください' ||
row[headers.indexOf('一言コピー(テキスト形式)')] === ''
) {
continue; // 条件に該当する行をスキップ
}
// 各行のデータをJSON形式でオブジェクトに変換
let obj = {
id: row[headers.indexOf('ID')], // ID列の値
business: row[headers.indexOf('新規事業')], // 新規事業列の値
keyword: row[headers.indexOf('印象、よく言われるキーワード')], // 印象、キーワード列の値
toneStyle: row[headers.indexOf('トンマナ(複数選択可)')], // トンマナ列の値
genre: row[headers.indexOf('作りたいジャンル(複数選択可)')], // ジャンル列の値
color: row[headers.indexOf('カラー')], // カラー列の値
copy: row[headers.indexOf('一言コピー(テキスト形式)')], // コピー列の値
postDate: row[headers.indexOf('投稿日時')] // 投稿日時列の値
};
// 作成したオブジェクトを jsonData 配列に追加
jsonData.push(obj);
}
// 生成したJSONデータをキャッシュに保存(キャッシュの有効期限は5分 = 300秒)
cache.put('jsonData', JSON.stringify(jsonData), 300);
// 生成されたJSONデータを返す
return jsonData;
}
// GETリクエスト時のAPIエントリーポイント
function doGet(e) {
const jsonData = makeJson(); // makeJson関数を実行してJSONデータを取得
return ContentService.createTextOutput(JSON.stringify(jsonData)) // JSONデータを返す
.setMimeType(ContentService.MimeType.JSON); // MIMEタイプをJSONに設定
}
ステップ 3: APIとして公開
スクリプトが完成したら、次はAPIとして公開します。
1. デプロイ
1. エディタの上部メニューにある「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
2. デプロイの種類として「ウェブアプリ」を選択し、アクセスを「全員(匿名ユーザーを含む)」に設定します。
3. デプロイ後、公開されたURLが表示されるので、このURLがAPIエンドポイントになります。
2. APIの動作確認
ブラウザやPostmanなどのツールを使って、公開されたURLにアクセスします。正常に動作していれば、スプレッドシートのデータがJSON形式で返ってくるはずです。
例えば、ブラウザで以下のように表示されます。
[
{
"id": 1,
"business": "カフェ",
"keyword": "奇跡が奇跡を呼んだ",
"toneStyle": "モダン, コミカル",
"genre": "WEBサイト, ポスター",
"color": "グリーン",
"copy": "ほんとに歯が痛い",
"postDate": "2024.10.02.14.49.47"
},
{
"id": 2,
"business": "レストラン",
"keyword": "なんでもない日常",
"toneStyle": "ナチュラル, レトロ",
"genre": "名刺, チラシ",
"color": "パープル",
"copy": "最高のレストラン体験",
"postDate": "2024.10.02.14.50.32"
}
]
ステップ 4: 最適化とキャッシュの活用
APIのレスポンス速度を改善するために、キャッシュを利用する方法をスクリプトに組み込みました。スクリプト内でデータが変更されない限り、毎回同じデータを再生成するのではなく、キャッシュに保存されたデータを再利用します。これにより、同じデータが頻繁にリクエストされる場合でもパフォーマンスを向上させることができます。