【GAS超入門】プログラミングの基礎知識|オブジェクト指向

プログラミングを学び始めると、「オブジェクト指向」という言葉を聞くことがあります。なんだか難しそうで、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); 
}

このコードを分解してみましょう。

  1. SpreadsheetApp.getActiveSpreadsheet() SpreadsheetApp という「オブジェクト」が持つ getActiveSpreadsheet() という「メソッド(操作)」を呼び出し、「現在アクティブなスプレッドシート」という新しい「オブジェクト」を取得しています。
  2. spreadsheet.getName() 次に、先ほど取得した spreadsheet (スプレッドシートファイル)という「オブジェクト」が持つ getName() という「メソッド(操作)」を呼び出し、その「名前(プロパティの一種)」を取得しています。

このように、GASでは「オブジェクト」が持つ「メソッド」をドット(.)で繋いで呼び出すことで、目的の処理を実行していきます。「AのBを実行する」(スプレッドシートアプリの、アクティブなシートを取得する)のように読み解くと分かりやすいです。

オブジェクト指向のメリット

オブジェクト指向の考え方を取り入れると、以下のようなメリットがあります。

  • 直感的に理解しやすい 「スプレッドシートを開く」「シートを取得する」など、私たちが実際に行う操作とプログラムのコードが結びつきやすくなります。
  • コードが整理しやすい 「どのオブジェクト(モノ)に対する命令なのか」が明確なため、コードが読みやすく、管理しやすくなります。
  • 効率的な開発 GASが標準で用意してくれている便利な「オブジェクト(SpreadsheetAppなど)」を組み合わせることで、複雑な処理も短いコードで効率的に実現できます。

まずは、「GASは、スプレッドシートなどの『モノ』を『メソッド(操作)』で動かしていくんだな」というイメージを持つことから始めてみましょう。

メソッドとプロパティについて

オブジェクトの構成要素:「プロパティ」と「メソッド」

前回の記事で、GASはスプレッドシートなどを「オブジェクト(モノ)」として扱う、と説明しました。

この「オブジェクト」は、大きく分けて2つの要素で構成されています。それが「プロパティ」と「メソッド」です。

HTMLやCSSを学んだ方なら、JavaScriptで document.getElementById('test').innerHTML = 'こんにちは'; のようなコードを見たことがあるかもしれません。

この場合、documentgetElementById('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.rangee.value という () のない「プロパティ」で情報を取得し、その情報(editedRange)が持つ getRow()setValue() といった () のある「メソッド」で操作を行っています。

プロパティとメソッドのまとめ

  • プロパティ: オブジェクトの「情報」や「状態」。基本的には () が付きません。(例: e.range
  • メソッド: オブジェクトの「操作」や「動作」。必ず () が付きます。(例: range.setValue()

GASでは、スプレッドシートなどの「オブジェクト」が持つ「メソッド」を呼び出したり、「プロパティ」を参照したりしながら、処理を組み立てていきます。

まずは、「ドット(.)で繋いで、命令(メソッド)を実行する」という感覚を掴んでいきましょう。

クラスとオブジェクトについて

クラスとオブジェクト:設計図と実体

オブジェクト指向を理解する上で、最も重要となるのが「クラス (Class)」と「オブジェクト (Object)」の関係性です。

この2つは、よく「たい焼きの型(クラス)」と「たい焼き(オブジェクト)」に例えられます。

  • クラス (Class): 「型」や「設計図」のことです。
  • オブジェクト (Object): その「型」や「設計図」から作られた「実体(モノ)」のことです。

たい焼きの「型」(クラス)は1つですが、その型を使えば、同じ形をした「たい焼き」(オブジェクト)を何個も作ることができます。作られた「たい焼き」は、それぞれ別のモノ(あんこが入っている、クリームが入っているなど)になります。

1. クラス (Class) とは?

クラスとは、オブジェクトの「設計図」です。

「これからこういうモノを作りたい」と考えたとき、そのモノが持つべき「プロパティ(情報)」と「メソッド(操作)」を、あらかじめまとめて定義したものです。

例えば、「社員」クラスという設計図を作るとします。

設計図:「社員」クラス

  • 持つべきプロパティ(情報):
    • 名前
    • 所属部署
  • できるメソッド(操作):
    • 自己紹介する ()

この設計図(クラス)を作っただけでは、まだ具体的な「社員」は存在しません。あくまで「社員とはこういうものである」と定義しただけです。

2. オブジェクト (Object) / インスタンス (Instance) とは?

オブジェクトとは、「クラス(設計図)」を基にして、実際に作成された「実体(モノ)」のことです。

クラス(設計図)からオブジェクト(実体)を作ることを、専門用語で「インスタンス化 (Instantiation)」と呼びます。そして、作られたオブジェクトのことを「インスタンス (Instance)」とも呼びます。

(ここでは「オブジェクト」と「インスタンス」は、ほぼ同じ意味で「設計図から作られた実体」と捉えてください)

先ほどの「社員」クラス(設計図)から、実際の社員(オブジェクト)を作ってみましょう。

  1. 「社員」クラスから、「田中さん(営業部)」というオブジェクトを作ります。
  2. 「社員」クラスから、「鈴木さん(開発部)」というオブジェクトを作ります。

これで、「田中さん」と「鈴木さん」という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(...) という命令で tanakasuzuki という2つのオブジェクト(実体)を作成しました。

tanakasuzuki は、同じ設計図から作られていますが、それぞれが異なるプロパティ(名前や部署)を持つ、独立したオブジェクトとして動作しています。

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の仕組みがより深く理解できるようになります。

Dチームメルマガ登録|eBOOK「逆引きAIツールブック」プレゼント中


AIやマーケティングに関する情報を不定期配信中
eBOOK「逆引きAIツールブック」プレゼント中です
↓ ↓ ↓

Dチームメルマガはこちら>>>