エンジニアの人、夢の中でもソースコード書きがち
こんばんは、やましょです。
前回の振り返り
前回はAPIを作成するための準備を行いました。
準備ができてない方はこちらを記事をご覧ください。
この記事を読んで分かること
- コピペで動かせるソースコード
- ソースコードの詳細
それでは実装をしていきましょう!!
実装する
1. スプレッドシートIDを確認
スプレッドシートのURLからIDを確認することができます!
https://docs.google.com/spreadsheets/d/{ スプレッドシートID }/edit#gid=0
URKが https://docs.google.com/spreadsheets/d/12345/edit#gid=0
となっていた場合、IDは 12345
となります。
2.ソースコードをコピペして、必要な情報を入力
// *************************
// ご自身が作成されたスプレッドシートの情報を記載してください↓
// *************************
// スプレッドシートのURLから取得する
const SHEET_ID = 'XXXXXXXXXXXXX';
// 対象のシート名。今回の例ではusers
const SHEET_NAME = 'users';
// *************************
// スプレッドシートの情報を取得
// *************************
function getSheetValues (spreadsheetId, sheet_name) {
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheet_name);
const rows = sheet.getDataRange().getValues();
const keys = rows.splice(0, 1)[0];
return { rows, keys };
}
// *************************
// スプレッドシートの内容からデータを取得
// *************************
function getObjects () {
const { rows, keys } = getSheetValues(SHEET_ID, SHEET_NAME);
const objects = [];
rows.forEach(function (row) {
const object = {};
row.forEach(function (column, index) {
const key = keys[index];
object[key] = column;
});
objects.push(object);
});
return objects;
}
// *************************
// APIのURLを叩いた時に実行される関数
// *************************
function doGet () {
const objects = getObjects();
return ContentService.createTextOutput(JSON.stringify(objects))
.setMimeType(ContentService.MimeType.JSON);
}
プログラムの詳細を見ずに、とりあえず動かしたい方は、コピペして、必要な情報を入力して、デプロイしてみてください!
このように値を取得できたら完成です!

ソースコードの詳細を知りたい方は引き続きご覧ください。
実装内容詳細
1. スプレッドシートの情報を取得
getSheetValues()
についてです。
対象のシートを取得
スプレッドシートのIDをもとに、スプレッドシートを取得し、シート名によりシートを取得します。
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheet_name);
全てのデータを取得
const rows = sheet.getDataRange().getValues();
Spreadsheetクラス
のgetDataRange()
メソッドを使うことで、データが存在する範囲を取得することができます。
そして、Rangeクラス
のgetValues()
メソッドを使うことで、範囲内のデータを全て配列形式で取得することができます。

キーを取得
取得したrows
には、現在name
、age
といったキーとなる値と、たろう
、18
といった値が一緒になっているので、それを分割する処理を行います。
const keys = rows.splice(0, 1)[0];
JavaScriptのArray(配列)クラスのsplice
メソッドを使用してます。
spliceは
開始位置と削除する数を指定することで、対象の配列からそれらを削除し、戻り値として、削除した要素を含む配列を返します。
今回の場合、rows
の1番目(インデックスは0) の値がキーとなるので、1番目を削除します。

// rowsの0番目から1つの値を取り除く
const return = rows.splice(0, 1);
console.log(return);
// 削除された要素の配列
//=> [ ['name', 'age', 'description'] ]
console.log(rows);
// 0番目の値が削除されている
// => [ ['たろう', 18, 'いつも...'], ['はなこ', 16 ...] ]
そしてキーは、削除された配列の1番目に存在するので、 下記のコードでキーを取得することができます。
const keys = rows.splice(0, 1)[0];
これで、スプレッドシートからキーと値を取得することができました。
スプレッドシートから取得した値を整形する
getObject
についてです。
function getObjects () {
// getSheetValuesからキーと値を取得
const { rows, keys } = getSheetValues(SHEET_ID, SHEET_NAME);
const objects = [];
// 値の配列をeachする
rows.forEach(function (row) {
const object = {};
row.forEach(function (column, index) {
const key = keys[index];
object[key] = column;
});
objects.push(object);
});
return objects;
}
配列形式になっていた値を

JSON形式にしてます。

取得できた値を返す
doGet
についてです。
ここまでで取得できたユーザの一覧のデータをJSON文字列に変換します。
そして、返却する型にJSONを指定します。
const objects = getObjects();
return ContentService.createTextOutput(JSON.stringify(objects))
.setMimeType(ContentService.MimeType.JSON);
これでAPIが完成となります!
最後に
無事に完成できましたでしょうか??
ソースコード内に console.log
を追加して、値を確認してみると、それぞれどのような値になっているか分かるので、もっとくわしく知りたい方は試してみてください!
また、作成したAPIを使うサンプルアプリケーションを作成しましたので、使用例をみたい方はぜひご覧ください!
参考
スプレッドシート関連
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyidid
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getSheetByName(String)
https://developers.google.com/apps-script/guides/content?hl=en#serving_json_from_scripts
JavaScript Array spliceメソッド
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice