Google Apps Script(GAS)でプログラミングの学習を進めると、必ず「オブジェクト」という重要な概念に出会います。スプレッドシートやドキュメントを操作する際、私たちはすでに SpreadsheetApp といった便利なオブジェクトに触れています。
しかし、「オブジェクトとは具体的に何なのか?」と問われると、戸惑ってしまう方も多いのではないでしょうか。
オブジェクトは、複数の関連する情報をひとまとめにして扱う際に強力な力を発揮します。例えば、「名前:佐藤、年齢:30歳、部署:営業」といった社員情報を、配列よりもずっと直感的に管理できるのです。
この記事では、GAS初心者の方を対象に、この「オブジェクト」の基本的な概念から、自分でオブジェクトを作成して利用する方法までを、具体的な例を交えながら丁寧に解説していきます。オブジェクトを理解し、スクリプト作成の幅を広げましょう。
オブジェクトとは
オブジェクトの基本的な作り方
GASで「プロパティだけを持つ」最も基本的なオブジェクトを作成するには、波括弧 {} を使います 。
書き方はとてもシンプルです。 { キー1: 値1, キー2: 値2, ... } という形式で、キー(プロパティ名)と値をコロン : でペアにし、各ペアをカンマ , で区切って並べていきます。
// 商品情報を管理するオブジェクト
let product = {
id: 'S-001',
name: '高機能ノートPC',
price: 128000
};
この例では、「product」という名前のオブジェクトを作成しました。 このオブジェクトは、
idというキー(プロパティ)に'S-001'という値nameというキー(プロパティ)に'高機能ノートPC'という値priceというキー(プロパティ)に128000という値 を持っています。
オブジェクトのプロパティにアクセスする
オブジェクトを作成したら、次はその中身(プロパティの値)を読み取ったり、使ったりしてみましょう。 アクセスする方法は、主に2つあります 。
1. ドット( . )を使う方法
最も一般的で、直感的な方法です。
オブジェクト名.プロパティ名 のように記述します 。
console.log(product.name); // '高機能ノートPC' が出力されます
console.log(product.price); // 128000 が出力されます
2. 角括弧( [] )を使う方法
もう一つは、 オブジェクト名['プロパティ名'] のように、プロパティ名を文字列として角括弧で囲む方法です 。
console.log(product['id']); // 'S-001' が出力されます
この2つの方法は、ほとんどの場合で同じ結果になります 。 基本的にはシンプルで書きやすい「ドット( . )」を使い、プロパティ名を後から変数で指定したい場合など、特別なケースでは「角括弧( [] )」を使う、と覚えておくと良いでしょう。
オブジェクトのプロパティを変更・追加・削除する
オブジェクトの便利な点は、作成した後からでも中身を自由に変更できることです。
1. 値の変更と追加
すでにあるプロパティの値を変更する場合も、新しいプロパティを追加する場合も、書き方は同じです 。 オブジェクト名.プロパティ名 = 新しい値; と記述します 。
function updateProduct() {
let product = {
id: 'S-001',
name: '高機能ノートPC',
price: 128000
};
console.log(product); // {id: "S-001", name: "高機能ノートPC", price: 128000}
// 1. 値の変更 (price を 118000 に変更)
product.price = 118000;
console.log(product); // {id: "S-001", name: "高機能ノートPC", price: 118000}
// 2. 値の追加 (新しく stock プロパティを追加)
product.stock = 10;
console.log(product); // {id: "S-001", name: "高機能ノートPC", price: 118000, stock: 10}
}
このように、 product.price のようにすでにキーが存在する場合は「値の上書き(変更)」になり、 product.stock のようにキーが存在しない場合は「新しいキーと値のペア(追加)」として扱われます 。
2. プロパティの削除
プロパティ(キーと値のペア)ごと削除したい場合は、 delete という命令を使います 。
delete オブジェクト名.プロパティ名; と記述します 。
function deleteProductProperty() {
let product = {
id: 'S-001',
name: '高機能ノートPC',
price: 118000,
stock: 10
};
console.log(product); // {id: "S-001", name: "高機能ノートPC", price: 118000, stock: 10}
// 'stock' プロパティを削除する
delete product.stock;
console.log(product); // {id: "S-001", name: "高機能ノートPC", price: 118000}
}
stock プロパティが削除されているのが分かります。
オブジェクトのプロパティを順番に取り出す(for…in文)
オブジェクトが持っているプロパティと値を、すべて順番に確認したい場合があるかもしれません。 配列の場合は for ループを使って i = 0 から順番に処理しましたが、オブジェクトには「順番」という概念がありません 。
その代わり、オブジェクト専用のループとして for...in 文が用意されています 。
for (let 変数 in オブジェクト名) { ... } と記述します 。
function listProductDetails() {
let product = {
id: 'S-001',
name: '高機能ノートPC',
price: 128000
};
// 'product' オブジェクトの中をループ
for (let key in product) {
// key にはプロパティ名('id', 'name', 'price')が順番に入る
console.log('プロパティ名: ' + key);
// 値は オブジェクト[キー] で取得する
console.log('値: ' + value);
}
}
このスクリプトを実行すると、コンソールには次のように出力されます。
プロパティ名: id
値: S-001
プロパティ名: name
値: 高機能ノートPC
プロパティ名: price
値: 128000
for...in ループを実行すると、 key という変数にプロパティ名('id' 'name' 'price')が一つずつ入ります。 そして、ループの中で product[key] (角括弧[ ]を使う方法)と記述することで、各プロパティ名に対応する値を取得することができます 。
このように、オブジェクトは関連する情報を名前(キー)で管理できる、非常に便利なデータの入れ物です。
オブジェクトの応用事例
オブジェクトの応用事例:スプレッドシートのデータを複雑な条件で並べ替える
オブジェクトの基本的な使い方を学んだところで、次にもっと実践的な応用例を見ていきましょう。
GASの操作では、スプレッドシートのデータを並べ替える機会がよくあります。 例えば、商品リストを「カテゴリ順(昇順)」で並べ、さらに同じカテゴリの中では「価格が高い順(降順)」で並べ替えたい、といった複雑な要求です。
このような複数の条件を指定した並べ替えこそ、オブジェクトが活躍する典型的な場面です。
1. サンプルデータの準備
まずは、並べ替えの対象となるデータを用意します。 以下の関数(prepareSheetData)を実行すると、アクティブなスプレッドシートに「商品リスト」という名前のシートが作成され、サンプルデータが入力されます。
function prepareSheetData() {
const sheetName = '商品リスト';
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (sheet) {
sheet.clear();
} else {
sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName);
}
const data = [
['商品名', 'カテゴリ', '価格', '在庫数'],
['高性能デスクトップPC', 'PC', 198000, 15],
['ワイヤレスマウス', '周辺機器', 3500, 50],
['4Kモニター', '周辺機器', 45000, 20],
['ノートPC(スタンダード)', 'PC', 120000, 30],
['メカニカルキーボード', '周辺機器', 15000, 25],
['タブレット端末', 'PC', 88000, 40]
];
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
// データの幅を自動調整
sheet.autoResizeColumns(1, data[0].length);
console.log('サンプルデータを「' + sheetName + '」シートに準備しました。');
}
2. 複数の条件で並べ替える
prepareSheetData を実行してデータが準備できたら、次にこのデータを並べ替える関数を作成します。
スプレッドシートの範囲(Range)を並べ替えるには、sort() メソッドを使います。 この sort() メソッドの引数に、オブジェクトを使った「並べ替えのルール」を渡すことができます。
以下の sortProductList 関数を実行してみてください。
function sortProductList() {
const sheetName = '商品リスト';
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (!sheet) {
console.log('「' + sheetName + '」シートが見つかりません。');
return;
}
// 1行目はヘッダーなので、並べ替えの対象から除外する
// 2行目からデータの最終行までを範囲として取得
const startRow = 2; // ヘッダー行の次から
const lastRow = sheet.getLastRow();
const lastColumn = sheet.getLastColumn();
// データが2行以上ある場合のみ実行
if (lastRow < startRow) {
console.log('並べ替えるデータがありません。');
return;
}
const range = sheet.getRange(startRow, 1, lastRow - startRow + 1, lastColumn);
// --- ここがオブジェクトの応用ポイント ---
// 並べ替えのルールを「オブジェクトの配列」で指定
const sortRules = [
// ルール1: 2列目(カテゴリ)を昇順 (ascending: true)
{ column: 2, ascending: true },
// ルール2: 3列目(価格)を降順 (ascending: false)
{ column: 3, ascending: false }
];
// range.sort() に並べ替えルールを渡す
range.sort(sortRules);
console.log('並べ替えを実行しました。');
}
実行結果
sortProductList を実行すると、スプレッドシートのデータが次のように並べ替えられます。
実行前:

実行後:

まず「カテゴリ」列(B列)で昇順(PC → 周辺機器)に並べ替えられ、さらに同じ「PC」カテゴリの中では「価格」列(C列)で降順(198000 → 120000 → 88000)に並んでいることが確認できます。
なぜオブジェクトを使うのか?
range.sort() メソッドは、「どの列を」「昇順か降順か」という2つの情報をセットにして、それを複数受け取る必要があります。
{ column: 2, ascending: true }
この形式は、まさにオブジェクトの得意分野です。
columnというキー(プロパティ)に「列番号」という値ascendingというキー(プロパティ)に「昇順かどうか(true/false)」という値
この2つの情報をセットにした「設定オブジェクト」を作成し、それを配列 [ ... ] に入れることで、複数の並べ替えルール(第一優先、第二優先…)をGASに順番通りに伝えることができるのです。
このように、オブジェクトは単にデータをまとめるだけでなく、GASの機能(メソッド)に対して「複雑な設定」や「指示」を渡すための、非常に整理された手段として広く活用されています。
まとめ
この記事では、Google Apps Script(GAS)における「オブジェクト」の基本的な概念から、その具体的な活用法までを解説しました。
オブジェクトは、{ キー: 値 } というペアで、関連する情報をひとまとめに管理できる、非常に強力なデータの「入れ物」です。プロパティの値を読み取ったり、変更・追加・削除したりする方法、そして for...in ループですべてのデータを取り出す方法を学びました。
さらに応用例として、スプレッドシートの sort メソッドで複数の並べ替えルールを指定する際に、オブジェクトが設定情報を整理してGASに伝える重要な役割を果たすことを見ました。
最初は配列との違いに戸惑うかもしれませんが、オブジェクトはGASのあらゆるところで活用されています。この概念に慣れることが、より複雑で実用的なスクリプトを作成するための鍵となります。ぜひ今回の内容を土台にして、オブジェクトを使いこなしていきましょう。













