【GAS入門】「Objectクラス」とは?オブジェクトを完全に理解しよう

最近GASを勉強していて、「Objectクラス」ってよく出てくるけど、いまいちピンとこないんだよね。
猫男
猫男
catman
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
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
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
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
catman
そうそう。GASでAPIレスポンスやシートのデータを扱うときに、Objectを使いこなせると本当に強いんだ。

GASのObjectクラスまとめ

ポイント 内容
Objectはキーと値のペアでデータを管理する箱 { key: value } の形で定義
Objectクラスは操作用の便利関数を提供 keys, values, entries
スプレッドシートやAPIデータと相性抜群 行データをオブジェクトとして扱うのが定石