Google Apps Script (GAS) では、オブジェクトという単語をよく見かけます。当記事ではオブジェクト型について、クラスオブジェクトとオブジェクト型の違い、定義や使い方、プロパティの取り出し方、変更、追加、削除の方法についてご説明します。
オブジェクト型とクラスオブジェクト
GASにはオブジェクト型とクラスオブジェクトがあります。二つともオブジェクトと呼ばれて、混乱してしまう要因なので最初にご説明しておきます。ご存知の方は飛ばしていただいても大丈夫です。
オブジェクト型とは?
本題であるオブジェクト型です。オブジェクトとは、プロパティを設定する部品であり、プロパティはキーと値をセットにしたものです。
const customer = {
name: name,
address: address,
age: age
};
詳細はのちほど説明するとして、ここではオブジェクト型では{}の中にキー:値が入ったものと覚えておいてください。
クラスオブジェクトとは?
クラスオブジェクトとは、GASのサービスやAPIを操作するためのオブジェクトです。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
上記のコードだとSpreadsheetAppがクラスオブジェクトです。SpreadsheetAppクラスオブジェクトを使うことでスプレッドシートを呼び出します。クラスオブジェクトには定義済みのプロパティとメソッドがあります。本題から逸れるので今回は割愛いたします。

今回は{}で括られたオブジェクト型についての説明です。
オブジェクト型とは
オブジェクト型は、先ほどもご説明しましたが、キーと値のペアを持つデータ構造です。オブジェクト型を使用することで、次のように関連するデータや機能を一つにまとめることができます。
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚"
};
キーは文字列で、値は任意のデータ型(文字列、数値、配列、関数、他のオブジェクトなど)を設定できます。

実際にオブジェクトってどう使うのよ?
オブジェクト型の使い方
オブジェクトは関連するデータをひとつにまとめることができます。関連するデータとはお客様情報や車の種類、野菜の種類など多岐に亘り、それでこそ作りたいスクリプトで違います。今回はわかりやすいお客様情報を例にしましょう。

油揚げを100枚食べたいな。よーし通販で頼もう

きつね部長がフォームに入力したデータをオブジェクト化します、また今回のコードはあくまでオブジェクトの流れを理解するためなので全然つかえないよ!
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚"
};
入力されたデータをオブジェクト化しました。今回はわかりやすく入力されたデータをそのまま使います。

あれ、油揚げ何枚注文したっけ?確認画面で確認しよう
function order(customer) {
Logger.log("氏名: " + customer.name);
Logger.log("住所: " + customer.address);
Logger.log("商品: " + customer.item);
Logger.log("個数: " + customer.total);
}
order(customer);
上記のコードでオブジェクトの中身を確認することができます。このように、関連するデータをオブジェクト化しておくことで、動的に入力される顧客情報でも確認画面で出力できるのです。
オブジェクトは、確認画面だけでなく、注文情報をデータベースに登録するときやメールを送信時など様々な場所で活躍します。

Functionの中括弧は関数宣言、オブジェクトの中括弧はオブジェクトリテラルと呼ばれます
プロパティの取り出し・変更・追加・削除
オブジェクト内のプロパティを取り出したり変更したりしましょう。プロパティにアクセスする方法はドット記法とブラケット記法の2種類ありますすので、両方合わせてご紹介します。
プロパティの取り出し
//ドット記法
function order(customer) {
Logger.log(customer.name);
}
//ブラケット記法
function order(customer) {
Logger.log(customer["name"]);
}
ドット記法は、オブジェクトが入っている値とキーを「.」で繋いで取り出します。ブラケットとは大括弧を意味する英単語であり、こちらも名前の通り[]を用いてプロパティを取り出します。
プロパティの変更
//ドット記法
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚"
};
customer.total = "150枚";
//ブラケット記法
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚"
};
customer["total"] = "150枚";
オブジェクト外で再代入することでオブジェクトを変更できます。
プロパティの追加
//ドット記法
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚"
};
customer.day = "2024/7/10";
//ブラケット記法
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚"
};
customer["day"] = "2024/7/10";
オブジェクト外で新しく値とキーを設定することで、オブジェクトを追加することができます。
プロパティの削除
//ドット記法
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚",
day: "2024/7/10"
};
delete customer.day;
//ブラケット記法
const customer = {
name: "きつね",
address: "きつねタウン",
item: "油揚げ",
total: "100枚",
day: "2024/7/10"
};
delete customer["day"];
delete
演算子を使用してオブジェクトのプロパティを削除します。削除されたプロパティにアクセスすると undefined
が返されます。

全部ドット記法じゃダメなの?見やすいし

ドット記法ではできないこともあります
ドット記法とブラケット記法
ドット記法は、オブジェクトが入っている値とキーを「.」で繋いで取り出し、ブラケット記法は[]を用いてプロパティを取り出します。ドット記法とブラケット記法には次のようなメリットデメリットがあります。
ドット記法 | ブラケット記法 | |
メリット | コードの可読性が高い | スペースや特殊文字でも使用が可能 動的な変数も使用が可能 |
デメリット | 特殊文字や動的な変数では使用できない | コードの可読性が下がる |
プロパティ名の制約
ドット記法では、プロパティ名が変数として有効でなければなりません。つまり、プロパティ名にスペースや特殊文字が含まれている場合、ドット記法を使うことができません。
var obj = {
"first name": "たぬき", // 空白
"last-name": "たぬ吉" //
ハイフン
};
// ドット記法では無効
console.log(obj.first name);
console.log(obj.last-name);
動的なプロパティアクセスができない
ドット記法では、プロパティ名を動的に決定することができません。プロパティ名が変数として保持されている場合には、ブラケット記法を使用する必要があります。
var obj = {
name: "たぬき",
age: 30
};
var propName = "name";
// ドット記法では動的なアクセスができない
console.log(obj.propName);// ブラケット記法ならOK
console.log(obj[propName]);

ふーん(よくわからん)

ドット記法は静的または固定化されたプロパティ名を使うときに便利。ブラケット記法はプロパティ名が動的である場合や、特殊文字を含む場合に使うと良いです。
まとめ
オブジェクトを使いこなすことで、もっとできることが広がります。ぜひオブジェクト型を使いこなしてくださいね。

ブラケット記法ってなんだか温そうで良いよね〜

(ブランケットじゃね?)
コメント