プログラミングを学び始めると、「オブジェクト指向」という言葉を聞くことがあります。なんだか難しそうで、GAS(Google Apps Script)を始めたばかりの方には少しハードルが高く感じるかもしれません。
しかし、この「オブジェクト指向」という考え方は、実はGASをより深く理解し、効率的にコードを書いていくためにとても役立つ大切な概念です。
この記事では、GAS初心者の方向けに、「オブジェクト指向とは何か?」その基本的な考え方やメリットを、できるだけ専門用語を避けて分かりやすく解説していきます。GASでのプログラミングを次のステップに進めるために、一緒に学んでいきましょう。
オブジェクト指向の考え方
オブジェクト指向とは何か?
プログラミングの学習を進めると、「オブジェクト指向」という言葉を耳にすることがあります。これは、プログラミングを行う上での「考え方」や「設計思想」の一つです。
難しく聞こえるかもしれませんが、基本的な考え方は「現実世界にあるモノ(オブジェクト)」を基準に考えることです。
例えば、私たちの周りには「車」や「人」、「家」など、たくさんの「モノ」があります。プログラミングの世界でも、プログラムを構成する要素を、こうした「モノ(オブジェクト)」の集まりとして捉えて設計していくのが、オブジェクト指向の基本的なスタイルです。
なぜGASでオブジェクト指向が重要なのか?
実は、Google Apps Script (GAS) は、このオブジェクト指向の考え方を強く反映して作られています。
私たちがGASで操作したい「スプレッドシート」「ドキュメント」「カレンダー」「Gmailのメール」などは、GASの世界ではすべて「オブジェクト(モノ)」として扱われます。
例えば、「特定のスプレッドシート(オブジェクト)を開き、その中の特定のシート(オブジェクト)に値を書き込む」といった具合です。
この考え方を理解すると、「GASがどのようにGoogleのサービスを動かしているのか」が直感的に分かりやすくなり、学習の助けになります。
オブジェクト指向の基本的な考え方
オブジェクト指向を理解するために、最低限必要な二つの要素をご紹介します。それは「プロパティ」と「メソッド」です。
1. プロパティ (属性・情報)
プロパティとは、その「モノ(オブジェクト)」が持っている「情報」や「状態」のことです。
例えば、「車」オブジェクトなら:
- 色(赤、青、白など)
- メーカー名(トヨタ、ホンダなど)
- 現在のスピード(時速60kmなど)
- 走行距離(10,000km)
「スプレッドシートの特定のセル」オブジェクトなら:
- セルの番地(A1, B2など)
- セルの背景色(#FFFFFFなど)
- セルの行番号(1, 2, 3など)
これらがプロパティにあたります。
2. メソッド (操作・動作)
メソッドとは、その「モノ(オブジェクト)」ができる「操作」や「動作」のことです。
例えば、「車」オブジェクトなら:
- 走行する()
- 停車する()
- 曲がる()
「スプレッドシートの特定のセル」オブジェクトなら:
- 値を取得する()
- 値を書き込む()
- 背景色を変更する()
これらがメソッドにあたります。メソッド(操作)は、多くの場合、名前の後ろに ()
が付くのが特徴です。
GASでの具体例:スプレッドシート
GASを使って「現在開いているスプレッドシートの名前をコンソール(ログ)に出力する」という簡単な例を見てみましょう。
SpreadsheetApp
というのが、GASでスプレッドシート全体を操作するために用意されている、一番大きな「オブジェクト」です。
function objectExample() {
// 「SpreadsheetApp」という大きなオブジェクトから...
// 「現在開いているスプレッドシート」というオブジェクトを取得します
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// 取得した「spreadsheet」オブジェクトの「メソッド(操作)」を使います
// .getName() という「名前を取得する」メソッドです
const name = spreadsheet.getName();
// 取得した名前をコンソールに出力します
console.log(name);
}
このコードを分解してみましょう。
SpreadsheetApp.getActiveSpreadsheet()
SpreadsheetApp
という「オブジェクト」が持つgetActiveSpreadsheet()
という「メソッド(操作)」を呼び出し、「現在アクティブなスプレッドシート」という新しい「オブジェクト」を取得しています。spreadsheet.getName()
次に、先ほど取得したspreadsheet
(スプレッドシートファイル)という「オブジェクト」が持つgetName()
という「メソッド(操作)」を呼び出し、その「名前(プロパティの一種)」を取得しています。
このように、GASでは「オブジェクト」が持つ「メソッド」をドット(.)で繋いで呼び出すことで、目的の処理を実行していきます。「AのBを実行する」(スプレッドシートアプリの、アクティブなシートを取得する)のように読み解くと分かりやすいです。
オブジェクト指向のメリット
オブジェクト指向の考え方を取り入れると、以下のようなメリットがあります。
- 直感的に理解しやすい 「スプレッドシートを開く」「シートを取得する」など、私たちが実際に行う操作とプログラムのコードが結びつきやすくなります。
- コードが整理しやすい 「どのオブジェクト(モノ)に対する命令なのか」が明確なため、コードが読みやすく、管理しやすくなります。
- 効率的な開発 GASが標準で用意してくれている便利な「オブジェクト(SpreadsheetAppなど)」を組み合わせることで、複雑な処理も短いコードで効率的に実現できます。
まずは、「GASは、スプレッドシートなどの『モノ』を『メソッド(操作)』で動かしていくんだな」というイメージを持つことから始めてみましょう。
メソッドとプロパティについて
オブジェクトの構成要素:「プロパティ」と「メソッド」
前回の記事で、GASはスプレッドシートなどを「オブジェクト(モノ)」として扱う、と説明しました。
この「オブジェクト」は、大きく分けて2つの要素で構成されています。それが「プロパティ」と「メソッド」です。
HTMLやCSSを学んだ方なら、JavaScriptで document.getElementById('test').innerHTML = 'こんにちは';
のようなコードを見たことがあるかもしれません。
この場合、document
や getElementById('test')
が返す要素が「オブジェクト」です。そして、innerHTML
が「プロパティ」、getElementById()
が「メソッド」にあたります。
この2つの違いを理解することが、GASを使いこなす第一歩です。
1. プロパティ (Property) とは?
プロパティは、そのオブジェクトが持つ「情報」「状態」「属性」を表します。
- 特徴: 名前の後ろに
()
が付きません。 - 役割: オブジェクトの現在の状態(色、名前、値、位置など)を保持したり、参照したりするために使います。
- 例:
- (車のオブジェクトなら)「色」「メーカー名」「スピード」「走行距離」
- (JavaScript DOMなら)
element.innerHTML
(要素の中身),element.style.color
(文字色)
GASでプロパティがよく使われるのは、「トリガー」という機能で関数が実行された時です。例えば、スプレッドシートのセルを編集したときに自動で動く関数 onEdit(e)
を設定した場合、引数 e
(イベントオブジェクト)に便利なプロパティが含まれています。
e.value
: 編集されたセルに入力された「値」という情報。e.range
: 編集された「セル(範囲)」という情報(Rangeオブジェクト)。
2. メソッド (Method) とは?
メソッドは、そのオブジェクトができる「操作」「動作」「命令」を表します。
- 特徴: 名前の後ろに必ず
()
が付きます。(()
の中に情報を渡すこともあります) - 役割: オブジェクトの状態を変更したり、何らかの処理を実行させたりするために使います。
- 例:
- (車のオブジェクトなら)
startEngine()
(エンジンをかける),accelerate()
(加速する) - (JavaScript DOMなら)
document.getElementById()
(IDで要素を探す)
- (車のオブジェクトなら)
GASでは、ほとんどの操作がメソッドを使って行われます。
SpreadsheetApp.getActiveSpreadsheet()
: 現在開いているスプレッドシートを取得する「操作」。sheet.getRange('A1')
: A1セルの範囲を取得する「操作」。range.setValue('こんにちは')
: セルに値を設定する「操作」。
GASにおけるプロパティとメソッドの使い分け
GAS(特に SpreadsheetApp
など)を操作する場合、JavaScriptのDOM操作などで見られる element.innerHTML
のような ()
のないプロパティに直接アクセスすることは少なく、多くの場合「情報を操作するためのメソッド」を使います。
情報を取得するメソッド (ゲッター)
range.getValue()
: セルの「値(プロパティ)」を取得する「操作(メソッド)」。sheet.getName()
: シートの「名前(プロパティ)」を取得する「操作(メソッド)」。
情報を設定するメソッド (セッター)
range.setValue('値')
: セルの「値(プロパティ)」を設定する「操作(メソッド)」。range.setBackground('#FF0000')
: セルの「背景色(プロパティ)」を設定する「操作(メソッド)」。
このように、GASでは「プロパティ(情報)を直接さわる」代わりに、「プロパティを取得するメソッド」「プロパティを設定するメソッド」が用意されている、と考えると分かりやすいです。

具体例:編集されたセルの情報を取得して操作する
onEdit(e)
を使って、プロパティとメソッドがどのように連携するか見てみましょう。 (このコードは、スプレッドシートのスクリプトエディタに貼り付けて保存し、A列のどこかを編集すると自動で実行されます)
function onEdit(e) {
// 1. 「e」オブジェクトの「プロパティ」にアクセス
const editedRange = e.range; // 編集されたセル(Rangeオブジェクト)を取得
const editedValue = e.value; // 編集された値を取得
// 2. 取得した「editedRange」オブジェクトの「メソッド」を実行
const row = editedRange.getRow(); // 編集されたセルの行番号を取得
// 3. コンソールに出力
console.log('編集されたのは ' + row + ' 行目です');
console.log('入力された値は「' + editedValue + '」です');
// 4. もしA列が編集されたら、B列に「確認済」と入力する(メソッドの利用)
if (editedRange.getColumn() == 1) { // getColumn() メソッドで行番号を取得
// offset() メソッドで隣のセル(Rangeオブジェクト)を取得し、
// setValue() メソッドで値を設定する
editedRange.offset(0, 1).setValue('確認済');
}
}
この例では、e.range
や e.value
という ()
のない「プロパティ」で情報を取得し、その情報(editedRange
)が持つ getRow()
や setValue()
といった ()
のある「メソッド」で操作を行っています。
プロパティとメソッドのまとめ
- プロパティ: オブジェクトの「情報」や「状態」。基本的には
()
が付きません。(例:e.range
) - メソッド: オブジェクトの「操作」や「動作」。必ず
()
が付きます。(例:range.setValue()
)
GASでは、スプレッドシートなどの「オブジェクト」が持つ「メソッド」を呼び出したり、「プロパティ」を参照したりしながら、処理を組み立てていきます。
まずは、「ドット(.)で繋いで、命令(メソッド)を実行する」という感覚を掴んでいきましょう。
クラスとオブジェクトについて
クラスとオブジェクト:設計図と実体
オブジェクト指向を理解する上で、最も重要となるのが「クラス (Class)」と「オブジェクト (Object)」の関係性です。
この2つは、よく「たい焼きの型(クラス)」と「たい焼き(オブジェクト)」に例えられます。
- クラス (Class): 「型」や「設計図」のことです。
- オブジェクト (Object): その「型」や「設計図」から作られた「実体(モノ)」のことです。
たい焼きの「型」(クラス)は1つですが、その型を使えば、同じ形をした「たい焼き」(オブジェクト)を何個も作ることができます。作られた「たい焼き」は、それぞれ別のモノ(あんこが入っている、クリームが入っているなど)になります。
1. クラス (Class) とは?
クラスとは、オブジェクトの「設計図」です。
「これからこういうモノを作りたい」と考えたとき、そのモノが持つべき「プロパティ(情報)」と「メソッド(操作)」を、あらかじめまとめて定義したものです。
例えば、「社員」クラスという設計図を作るとします。
設計図:「社員」クラス
- 持つべきプロパティ(情報):
- 名前
- 所属部署
- できるメソッド(操作):
- 自己紹介する ()
この設計図(クラス)を作っただけでは、まだ具体的な「社員」は存在しません。あくまで「社員とはこういうものである」と定義しただけです。
2. オブジェクト (Object) / インスタンス (Instance) とは?
オブジェクトとは、「クラス(設計図)」を基にして、実際に作成された「実体(モノ)」のことです。
クラス(設計図)からオブジェクト(実体)を作ることを、専門用語で「インスタンス化 (Instantiation)」と呼びます。そして、作られたオブジェクトのことを「インスタンス (Instance)」とも呼びます。
(ここでは「オブジェクト」と「インスタンス」は、ほぼ同じ意味で「設計図から作られた実体」と捉えてください)
先ほどの「社員」クラス(設計図)から、実際の社員(オブジェクト)を作ってみましょう。
- 「社員」クラスから、「田中さん(営業部)」というオブジェクトを作ります。
- 「社員」クラスから、「鈴木さん(開発部)」というオブジェクトを作ります。
これで、「田中さん」と「鈴木さん」という2つの独立したオブジェクトが作成されました。両方とも「社員」クラス(設計図)から作られたので、「名前」「所属部署」というプロパティと、「自己紹介する()」というメソッドを持っています。

GAS (JavaScript) でのクラスの使い方
GAS(JavaScript)では、class
というキーワードを使って、自分でクラス(設計図)を定義することができます。
// 「社員」を表す設計図(クラス)を定義します
class Employee {
// constructor(コンストラクタ)は、オブジェクトが作られる瞬間に
// 自動で実行される特別なメソッド(初期設定)です。
constructor(name, department) {
// 「this」は「今から作るオブジェクト自身」を指す特別な言葉です
this.name = name; // 受け取った name を、自身の「name」プロパティに設定
this.department = department; // 受け取った department を、自身の「department」プロパティに設定
}
// メソッド(操作)を定義します
introduce() {
// 自身のプロパティを使って処理を実行します
console.log('こんにちは、' + this.department + 'の' + this.name + 'です。');
}
}
// --- ここからが実行部分 ---
function createEmployees() {
// 「new」キーワードを使って、Employeeクラス(設計図)から
// オブジェクト(インスタンス)を作成します。
// constructor に '田中' と '営業部' が渡されます。
const tanaka = new Employee('田中', '営業部');
// 別のアカウント(インスタンス)を作成します。
const suzuki = new Employee('鈴木', '開発部');
// それぞれのオブジェクトが持つメソッドを実行します
tanaka.introduce();
// 出力結果: こんにちは、営業部の田中です。
suzuki.introduce();
// 出力結果: こんにちは、開発部の鈴木です。
}
この例では、Employee
というクラス(設計図)を定義し、new Employee(...)
という命令で tanaka
と suzuki
という2つのオブジェクト(実体)を作成しました。
tanaka
と suzuki
は、同じ設計図から作られていますが、それぞれが異なるプロパティ(名前や部署)を持つ、独立したオブジェクトとして動作しています。
GASの標準オブジェクトとクラスの関係
では、私たちがGASで普段使っている SpreadsheetApp
や、sheet.getRange('A1')
は何なのでしょうか。
これらも、Googleがあらかじめ用意してくれた「クラス(設計図)」から作られた「オブジェクト(実体)」です。
Spreadsheet
クラス(スプレッドシートファイルの設計図)Sheet
クラス(シートの設計図)Range
クラス(セルの範囲の設計図)
SpreadsheetApp.getActiveSpreadsheet()
を実行すると、Googleは内部的に Spreadsheet
クラス(設計図)を使って、現在開いているスプレッドシートの「オブジェクト」を生成して、私たちに返してくれます。
私たちはその返された「オブジェクト」の getName()
や getSheetByName()
といった「メソッド」を使って、スプレッドシートを操作しているのです。
クラスとオブジェクトのまとめ
- クラス (Class): オブジェクトの「設計図」。プロパティやメソッドを定義します。
- オブジェクト (Object): クラス(設計図)から
new
などの操作によって作られた「実体(モノ)」です。
GASプログラミングの基本は、「Googleが用意したクラス(設計図)から、SpreadsheetApp
などの命令を通じてオブジェクト(実体)を取得し、そのオブジェクトが持つメソッドを実行する」ことです。
自分でクラスを作る機会は、初心者の方には少ないかもしれませんが、「クラス=設計図」「オブジェクト=実体」という関係性を知っておくことは、GASの仕組みを深く理解する上で非常に重要です。
まとめ:オブジェクト指向の第一歩
今回は、GASを学ぶ上で重要な「オブジェクト指向」の基本的な考え方について解説しました。
難しく聞こえるかもしれませんが、要点は「スプレッドシートやセルといった操作対象を『モノ(オブジェクト)』として捉える」ということです。
そして、その「オブジェクト」は、e.range
のような「情報(プロパティ)」と、range.setValue()
のような「操作(メソッド)」で構成されています。
私たちがGASで行うことのほとんどは、「クラス」という設計図から作られた「オブジェクト(実体)」を取得し、そのオブジェクトが持つ「メソッド(操作)」を呼び出して実行することです。
まずは「どのオブジェクトの、どのメソッドを使えば良いか」を意識しながらコードを書くことで、GASの仕組みがより深く理解できるようになります。