🚀 【GAS超入門】GAS (Google Apps Script) の始め方とJavaScript基礎

-----

Google Apps Script (GAS) は、Google の各種サービスを連携・自動化できる強力なツールです。本記事では、GAS を始めるための環境準備から、JavaScript の基礎、そしてGAS 独自の構文までを、初心者の方にも分かりやすく解説します。
今回は、より手軽に始められる\*\*「コンテナバインド型」\*\*のGASを例に進めていきます。

-----

### 1\. GAS を始める準備

GAS を記述・実行するには、Google アカウントと、GAS を紐付ける Google アプリ（今回はスプレッドシート）が必要です。

#### ステップ1：Google アカウントを用意する

既に Google アカウントをお持ちの場合は、このまま次のステップへ進んでください。

#### ステップ2：Google ドライブを開く

Google のトップページを開き、右上の\*\*「Google アプリ」アイコン（点の集合体）**をクリックします。表示されるメニューから**「ドライブ」\*\*を選択します。

#### ステップ3：スプレッドシートを新規作成

Google ドライブが開いたら、左上の\*\*「+ 新規」**ボタンをクリックし、**「Google スプレッドシート」\*\*を選択して新しいスプレッドシートを作成します。

#### ステップ4：スクリプトエディタを開く

作成したスプレッドシートを開き、メニューバーから\*\*「機能拡張」\*\* \> \*\*「Apps Script」\*\*の順に選択します。

これにより、このスプレッドシートに紐付いたスクリプトエディタが開きます。スクリプトエディタは、GAS のプログラムを記述するための開発環境です。

-----

### 2\. コードの記述と実行

スクリプトエディタが開いたら、実際にコードを記述して実行してみましょう。

#### サンプルコードの記述

スクリプトエディタには `function myFunction() {}` というひな形が既に記述されています。この `{}` の中にコードを記述します。

今回は、A1 セルに「こんにちは！」と表示する以下のサンプルコードを記述します。

```javascript
function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange('A1').setValue('こんにちは！');
}
```

コードを記述したら、画面上部の\*\*「保存」アイコン（フロッピーディスクの形）\*\*をクリックして保存します。

#### コードの実行

保存後、画面上部の\*\*「実行」アイコン（再生ボタンの形）\*\*をクリックしてコードを実行します。

-----

### 3\. 初回実行時の認証作業

GAS のスクリプトを初めて実行する際には、Google アカウントに対する認証作業が必要です。これは、スクリプトがあなたの Google アカウントにアクセスすることを許可するためのものです。

1.  \*\*「権限を確認」\*\*をクリックします。
2.  スプレッドシートを開いている**あなたの Google アカウントを選択**します。
3.  「このアプリは確認されていません」といった画面が表示される場合があります。その際は\*\*「詳細」をクリック**し、さらに**「○○（安全ではないページ）に移動」をクリック\*\*します。
      * 一見危険そうに見えますが、これは**あなたが作成したスクリプト**に対する認証なので問題ありません。
4.  **「続行」をクリック**し、Google アカウントへのアクセスを許可します。

認証が完了し、スクリプトエディタ下部の\*\*「実行ログ」\*\*に「実行開始」と「実行完了」が表示されたら成功です。

スプレッドシートに戻ると、\*\*A1 のセルに「こんにちは！」\*\*と表示されているはずです。

-----

### 4\. JavaScript + GAS (Google Apps Script) 基礎構文

ここからは、GAS で使用する JavaScript の基本的な構文について解説します。

-----

#### 4.1. プログラムの基本構造（関数）

GAS のコードは、基本的に**関数**の形で記述します。

```javascript
function myFunction() {
  // ここに処理を書く
  console.log('Hello World');
}
```

  * `function`：処理のまとまりを定義するためのキーワードです。
  * `myFunction`：関数の名前です。自由に決められますが、分かりやすい名前をつけましょう。
  * `()`：関数の引数を記述する場所です。
  * `{}`：関数の処理の範囲を示します。この中にコードを記述します。
  * `;`：文の終わりを示します。JavaScript では省略可能な場合もありますが、記述する習慣をつけると良いでしょう。
  * `//`：コメントアウトを示す記号です。この後に書かれた内容はプログラムとして実行されません。メモなどに使います。
  * `console.log()`：開発者がデバッグのために\*\*「実行ログ」\*\*タブに情報を出力する際に使用します。画面に直接表示されるわけではありません。

-----

#### 4.2. 変数

**変数**は、データを一時的に保存するための「箱」のようなものです。

```javascript
const name = '太郎'; // 文字列
const age = 25;   // 数値
let score = 100;  // 変更可能な数値
```

  * `const`：一度代入した値を後から変更できない変数を宣言します。
  * `let`：後から値を変更できる変数を宣言します。
  * 変数名は、その変数が何を表すのかを分かりやすく付けるように心がけましょう。

-----

#### 4.3. データ型

JavaScript (GAS) には、いくつかの基本的な**データ型**があります。

```javascript
// 文字列型 (テキスト)
const message = 'こんにちは';

// 数値型 (数字)
const price = 1000;

// 論理型 (真偽値: true/false)
const isActive = true;

// 配列型 (複数の値を順序付けて格納)
const fruits = ['りんご', 'バナナ', 'ぶどう'];

// オブジェクト型 (関連するデータをまとめる)
const person = {
    name: '田中',
    age: 30,
    city: '東京'
};
```

**データの取り出し方：**

  * **配列:** `配列名[インデックス番号]` で取り出します。インデックスは `0` から始まります。
    ```javascript
    console.log(fruits[0]); // 'りんご'
    ```
  * **オブジェクト:** `オブジェクト名.プロパティ名` または `オブジェクト名['プロパティ名']` で取り出します。
    ```javascript
    console.log(person.name); // '田中'
    ```

-----

#### 4.4. 演算子

**演算子**は、値の計算や比較、結合などを行うために使われます。

##### 算術演算子（計算）

| 演算子 | 説明   | 例           | 結果 |
| :----- | :----- | :----------- | :--- |
| `+`    | 足し算 | `10 + 3`     | `13` |
| `-`    | 引き算 | `10 - 3`     | `7`  |
| `*`    | 掛け算 | `10 * 3`     | `30` |
| `/`    | 割り算 | `10 / 3`     | `3.333...` |
| `%`    | 余り   | `10 % 3`     | `1`  |

##### 比較演算子（比較）

| 演算子 | 説明             | 例           | 結果  |
| :----- | :--------------- | :----------- | :---- |
| `==`   | 等しい（値のみ） | `5 == 10`    | `false` |
| `!=`   | 等しくない（値のみ） | `5 != 10`    | `true`  |
| `<`    | 小さい           | `5 < 10`     | `true`  |
| `>`    | 大きい           | `5 > 10`     | `false` |
| `<=`   | 以下             | `5 <= 10`    | `true`  |
| `>=`   | 以上             | `5 >= 10`    | `false` |

##### 論理演算子（条件の組み合わせ）

| 演算子 | 説明       | 例                           |
| :----- | :--------- | :--------------------------- |
| `&&`   | かつ（両方が真） | `age >= 18 && hasLicense`    |
| `||`   | または（どちらかが真） | `age < 18 || !hasLicense`    |
| `!`    | でない（反対）   | `!hasLicense` (hasLicenseが`true`なら`false`) |

##### 代入演算子（値の代入）

| 演算子 | 説明             | 例           | 結果 |
| :----- | :--------------- | :----------- | :--- |
| `=`    | 代入             | `score = 100` | `100` |
| `+=`   | 加算して代入     | `score += 10` | `score = score + 10` と同じ |
| `-=`   | 減算して代入     | `score -= 5`  | `score = score - 5` と同じ |
| `*=`   | 乗算して代入     | `score *= 2`  | `score = score * 2` と同じ |
| `/=`   | 除算して代入     | `score /= 2`  | `score = score / 2` と同じ |

##### 文字列の結合

文字列は `+` 演算子で結合できます。

```javascript
const firstName = '太郎';
const lastName = '田中';

const fullName = lastName + firstName; // '田中太郎'
```

より推奨されるのは\*\*テンプレートリテラル（テンプレート文字列）\*\*です。バッククォート `` ` `` で囲み、 `${変数名}` の形式で変数を埋め込みます。

```javascript
const greeting = `こんにちは、${fullName}さん`; // 'こんにちは、田中太郎さん'
```

-----

#### 4.5. 制御構造

**制御構造**は、プログラムの「流れ（順番や繰り返し）」をコントロールする文法のことです。

##### 条件分岐（if文）

指定した条件によって処理を分岐させます。

```javascript
const age = 25;

if (age >= 20) {
    console.log('成人です'); // 条件が真の場合に実行
} else {
    console.log('未成年です'); // 条件が偽の場合に実行
}

// 複数の条件をチェックする場合
if (age >= 65) {
    console.log('高齢者');
} else if (age >= 20) {
    console.log('成人');
} else {
    console.log('未成年');
}
```

##### 繰り返し（for文）

特定の処理を繰り返し実行します。

```javascript
// 1から5まで表示
for (let i = 1; i <= 5; i++) {
    console.log(i + '回目');
}

// 配列の全要素を処理
const colors = ['赤', '青', '緑'];
for (let i = 0; i < colors.length; i++) {
    console.log(colors[i]);
}
```

-----

#### 4.6. カスタム関数

自分で**関数**を作成することで、繰り返し使う処理をまとめて再利用できます。

```javascript
// 関数を作成
function greet(name) {
  return 'こんにちは、' + name + 'さん';
}

// 関数を使用
const message = greet('田中');
console.log(message); // 'こんにちは、田中さん'
```

  * **仮引数（かりひきすう）**: 関数を定義する際に、その関数が受け取る値を一時的に格納する変数の名前 (`greet(name)` の `name`)。
  * **実引数（じつひきすう）**: 関数を呼び出す際に、実際に渡す値 (`greet("田中")` の `"田中"`)。

複数の引数を持つ関数も作成できます。

```javascript
function calculate(price, tax) {
  return price * (1 + tax);
}

const total = calculate(1000, 0.1); // 1100
console.log(total);
```

-----

#### 4.7. 組み込み関数

JavaScript には、あらかじめ用意されている便利な**組み込み関数**が多数あります。

##### 数学関数（`Math` オブジェクト）

```javascript
Math.round(3.7);  // 4 (四捨五入)
Math.floor(3.7);  // 3 (切り捨て)
Math.ceil(3.7);   // 4 (切り上げ)
Math.abs(-5);     // 5 (絶対値)
Math.random();    // 0以上1未満のランダムな数値
```

##### 文字列関数

文字列に対して様々な操作を行う関数です。

```javascript
const text = 'Hello World';
text.length;       // 11 (文字数)
text.toUpperCase(); // 'HELLO WORLD' (大文字に変換)
text.includes('o'); // true (文字列が含まれるか)
text.split(' ');   // ['Hello', 'World'] (指定した区切り文字で分割)
```

##### 日付関数（`Date` オブジェクト）

現在の日付や時刻を取得したり、日付の計算を行う際に使用します。

```javascript
const now = new Date();
now.getFullYear();  // 現在の年 (例: 2025)
now.getMonth() + 1; // 現在の月 (0から始まるため+1, 例: 6月なら6)
now.getDate();      // 現在の日 (例: 21)
```

-----

#### 4.8. GAS (Google Apps Script) 固有の構文

GAS は、Google のサービスを操作するための独自のオブジェクトやメソッドを提供しています。ここではスプレッドシート操作の基本を紹介します。

```javascript
function spreadsheetBasic() {
  // アクティブなスプレッドシートの、アクティブなシートを取得
  const sheet = SpreadsheetApp.getActiveSheet();

  // セルに値を書き込み
  sheet.getRange('A1').setValue('名前');
  sheet.getRange('B1').setValue('年齢');

  // セルから値を読み取り
  const name = sheet.getRange('A1').getValue();
  console.log(name); // '名前'
}
```

##### 複数セルの操作

`for` 文と組み合わせることで、複数のセルに対して処理を行うことができます。

```javascript
function processData() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // 2行目から5行目までを処理 (例: A列が名前、B列が年齢、C列に成人/未成年を書き込む)
  for (let row = 2; row <= 5; row++) {
    const name = sheet.getRange(row, 1).getValue(); // A列の値を取得
    const age = sheet.getRange(row, 2).getValue();  // B列の値を取得

    if (age >= 20) {
      sheet.getRange(row, 3).setValue('成人'); // C列に書き込み
    } else {
      sheet.getRange(row, 3).setValue('未成年'); // C列に書き込み
    }
  }
}
```

-----

### まとめ

GAS を始めるための環境構築から、JavaScript の基本的な構文、そしてスプレッドシートを操作する GAS 固有の構文までを解説しました。

**覚えるべきポイント**は以下の通りです。

  * **変数**: データを保存する「箱」
  * **データ型**: 文字列型、数値型、論理型、配列型、オブジェクト型など
  * **演算子**: 計算、比較、論理、代入など
  * **制御構造**: `if` 文（条件分岐）と `for` 文（繰り返し）
  * **関数**: 自分で作るカスタム関数と、元から用意されている組み込み関数
  * **GAS**: `SpreadsheetApp` などを使ったスプレッドシート操作の基本

これらの基礎をマスターすれば、あなたの Google サービスをより便利に、効率的に活用できるようになるでしょう。

まずは、今回紹介したコードを実際に動かしてみて、GAS の世界に触れてみてください！

-----

### 💡 さらにステップアップしたいあなたへ！講義開催のお知らせ

本記事でGASの基礎を学んだあなたなら、もっと色々なことができるようになります！

\*\*「【オンライン】Google Apps Script(GAS)で作る、RPA入門～手軽にはじめるプログラミング入門、承認申請フローツールを作ろう!」\*\*と題して、私自身が講師を務めるオンライン講義を開催します。

この講義では、単なるスプレッドシート操作にとどまらず、以下の実践的なテーマを扱います。

  * **Googleフォームとスプレッドシートを連携させる**
  * **特定の条件でメールを自動送信する**
  * **スクリプトの実行を自動化するトリガー設定**
  * **案件管理システムの実装**
  * **出勤管理システムの実装**
  * **承認申請フローの実装**

など、実務で役立つ具体的な応用例を多数ご紹介し、実際に手を動かしながら学べるハンズオン形式です。

\*\*「定型業務に追われている」「もっと効率的に仕事を進めたい」「プログラミングに興味がある」\*\*と感じている方に特におすすめの内容です。この機会に、GASであなたの業務を劇的に効率化しませんか？

講義の詳細・お申し込みはこちらから！
https://kokc.jp/e/fa7b34444ca2edb435a98552d032517c/

皆様のご参加を心よりお待ちしております！

-----