【GAS入門】「Objectクラス」とは?オブジェクトを完全に理解しよう
最近GASを勉強していて、「Objectクラス」ってよく出てくるけど、いまいちピンとこないんだよね。
猫男
catman
良いところに気がついたね!Objectクラスは、GASのデータ処理の基礎になる超重要な仕組みなんだ。catmanが丁寧に解説しよう!
GASのObjectクラスとは?
Objectクラスは、
Google Apps Script(JavaScript)でデータをまとめて扱うための基本的な「箱」のようなもの
です。
配列が「順番」でデータを並べるのに対して、Objectは「名前(キー)」でデータを整理します。
const cat = {
name: "みい",
color: "gray",
age: 3
};
Logger.log(cat.name); // みい
Logger.log(cat["color"]); // gray
このように、Objectは「キー」と「値」のペアでデータを保持します。
なるほど、キーと値でセットになってるんだね。でも、それをどう操作するの?
猫男
catman
そこで登場するのが、Objectクラスの便利メソッドたちさ。これを使えば、オブジェクトの中身を自由自在に取り出せるんだ。
GASで使えるObjectクラスの基本メソッド
| メソッド | 説明 | 出力例 |
|---|---|---|
Object.keys(obj) |
キーを配列で返す | ["name", "color", "age"] |
Object.values(obj) |
値を配列で返す | ["みい", "gray", 3] |
Object.entries(obj) |
キーと値のペア配列を返す | [["name","みい"], ["color","gray"], ["age",3]] |
const cat = {
name: "みい",
color: "gray",
age: 3
};
Logger.log(Object.keys(cat)); // ["name", "color", "age"]
Logger.log(Object.values(cat)); // ["みい", "gray", 3]
Logger.log(Object.entries(cat));// [["name","みい"], ["color","gray"], ["age",3]]
配列に変換できるんだ!それならループ処理もできそうだね!
猫男
catman
その通り!実際、
Object.keys() と forEach() を組み合わせれば、オブジェクトを簡単に繰り返し処理できるんだ。GASでObjectをループで処理するスクリプト例
Objectクラスを使えば、こんな感じでオブジェクトをループ処理できます。
const cat = {
name: "みい",
color: "gray",
age: 3
};
Object.keys(cat).forEach(key => {
Logger.log(`${key} : ${cat[key]}`);
});
実行結果はこんな感じ ↓
name : みい
color : gray
age : 3
GASでの実用例:スプレッドシートをオブジェクト化
実際のGAS開発では、スプレッドシートのデータをObjectとして扱うと便利です。1行を1つのObjectにすれば、コードがとても読みやすくなります。
function getSheetDataAsObjects() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("データ");
const values = sheet.getDataRange().getValues();
const headers = values.shift();
const objects = values.map(row => {
let obj = {};
headers.forEach((header, i) => obj[header] = row[i]);
return obj;
});
Logger.log(objects);
}
結果:
[
{ 名前: "山田", 年齢: 25, 趣味: "読書" },
{ 名前: "佐藤", 年齢: 30, 趣味: "映画" }
]
Objectって、スプレッドシートの行を扱うのにもピッタリなんだね!
猫男
catman
そうだ。データを「名前」で扱えるようになると、コードが一気に直感的になるんだ。
練習問題
次のオブジェクトから、Object.values() を使って値の合計を求めてみましょう。
const scores = {
math: 90,
english: 85,
korean: 95
};
解答・解説
const scores = {
math: 90,
english: 85,
korean: 95
};
const total = Object.values(scores).reduce((sum, score) => sum + score, 0);
Logger.log(total); // 270
Object.values()で値を配列化し、reduce()で合計しています。ObjectとArrayメソッドを組み合わせるとデータ処理が一気にスムーズになります。
Objectクラスの使い方、ようやくわかってきた!配列と違ってキーで管理できるのが便利だね!
猫男
catman
そうそう。GASでAPIレスポンスやシートのデータを扱うときに、Objectを使いこなせると本当に強いんだ。
GASのObjectクラスまとめ
| ポイント | 内容 |
|---|---|
| Objectはキーと値のペアでデータを管理する箱 | { key: value } の形で定義 |
| Objectクラスは操作用の便利関数を提供 | keys, values, entries |
| スプレッドシートやAPIデータと相性抜群 | 行データをオブジェクトとして扱うのが定石 |