Comprehensive Grammar Guide

文法編1:GASの基礎知識

GASを書くときに必要になる、最も重要な基礎知識をまとめました。
ただ暗記するのではなく、「なぜ必要なのか」「どんな場面で使うのか」と一緒に理解していきましょう。

このページの読み方

文法は、最初はどうしても抽象的に見えます。 しかし、GASでは「スプレッドシートを読む」「メールを送る」「予定を取得する」といった具体的な操作の中で文法を使うため、 単なる理論ではなく、実務の土台になります。

このページでは、文法を細かく暗記することよりも、 「こういう場面で、この書き方が必要になる」と理解することを目指します。

最初に意識しておきたいこと

  • コードは、データを扱うための手順書です
  • 文法は、手順書を正しく書くためのルールです
  • 最初は全部覚えようとせず、何度も使いながら身につければ十分です

1. データ型と変数(箱)

プログラムは、データを「名前のついた箱(変数)」に入れて管理します。
これを使う理由は、「後からの修正を1箇所で済ませるため」と、 「データに意味を持たせるため」です。

BEST USE const (定数)

「消費税率」や「メールの固定件名」のように、プログラムの途中で変わっては困るものに使います。

const taxRate = 0.1;
const subject = "【2026】重要なお知らせ";

VARIABLE let (変数)

「現在の合計金額」や「繰り返しのカウント」のように、処理が進むにつれて中身が変わるものに使います。

let totalAmount = 0;
totalAmount = totalAmount + 500;

なぜ変数が必要なのか

たとえばメール本文の件名を何度も直接書いていると、後で修正したいときに全部探して直す必要があります。 しかし変数に入れておけば、その変数の値を変えるだけで済みます。 また、subjecttotalAmount のような名前をつけることで、 そのデータが何を意味しているのかを自分でも他人でも理解しやすくなります。

💡 いつどの「型」を使う?

  • 1
    文字列 (String): メールの本文、スプレッドシートの名前。引用符 " " で囲みます。
  • 2
    数値 (Number): 金額、個数、最終行の番号。そのまま書きます。
  • 3
    真偽値 (Boolean): 「送信済みか?」「在庫があるか?」など Yes/No の判断。 true / false を使います。

初心者がつまずきやすい点

  • "123" は文字列、123 は数値です。見た目が似ていても別物です。
  • const を使うと再代入できません。後から値を変える予定があるなら let を使います。
  • 変数名を適当に xa にすると、後で自分でも意味が分からなくなります。

2. 四則演算と比較演算子

プログラムに計算をさせたり、値の大きさを比べさせたりするための記号です。 これらは「判断の材料」を作るために使います。

四則演算(計算)

足し算 10 + 5
引き算 10 - 5
掛け算 10 * 5
割り算 10 / 5

比較演算(くらべる)

等しい score === 100
より大きい / 小さい price > 5000
以上 / 以下 age >= 20
等しくない status !== "完了"
const threshold = 10000; // 1万円をしきい値にする
const orderAmount = 12000;

if (orderAmount > threshold) {
  // 1万円を超えた時だけ実行される
  console.log("高額注文を検知しました");
}

比較演算子は「条件分岐」の前準備

比較演算子そのものが重要なのではなく、 「条件によって処理を変える」ために必要です。 たとえば、一定金額以上なら通知する、未完了なら催促する、空欄ならスキップする、といった処理の土台になります。

間違えやすいポイント

  • = は代入、=== は比較です。意味がまったく違います。
  • 文字列と数値を比べると、思った結果にならないことがあります。
  • 「何を比較したいのか」を日本語で言えるようにしてから書くと間違いにくくなります。

3. 論理演算:もっと複雑な判断

「AかつB」や「AまたはB」など、複数の条件を組み合わせて、より実務に近い判断を作ります。

&&
AND(かつ)

両方の条件が正しい時だけOK。

||
OR(または)

どちらか片方でも正しければOK。

!
NOT(〜でない)

「完了ではない時」などの反転判定。

// 「在庫が10個以上」かつ「セール期間中」なら通知する

if (stock >= 10 && isSale === true) {
  console.log("大量SALEメールを送信します");
}

実務でよくある条件の組み合わせ

  • メールアドレスが空ではなく、送信対象フラグがONなら送る
  • 締切日を過ぎていて、かつ完了していないなら通知する
  • 管理者である、または承認権限があるなら実行する

初心者が混乱しやすい点

複数条件を書くときは、まず日本語で 「Aで、なおかつBなのか」 「AまたはBなのか」 をはっきりさせることが大切です。 日本語の条件が曖昧なままコードにすると、ほぼ確実に混乱します。

4. データの集合(配列とオブジェクト)

スプレッドシートの「名簿」や「売上データ」は、バラバラの変数ではなく、「集合」として扱うのがGASの基本です。

配列 (Array)

同じ種類のデータを「順番」で並べたものです。スプレッドシートの1行分のデータや、複数のメールアドレス一覧などを扱うのに向いています。
※ 番号は必ず「0」から数え始めます。

const userRow = ["田中太郎", "tanaka@ex.com", 25];
console.log(userRow[0]); // 田中太郎
console.log(userRow[1]); // tanaka@ex.com

スプレッドシートとの関係

GASで複数行を取得すると「2次元配列(配列の中に配列がある状態)」になります。 つまり、表をそのまま配列として受け取っているイメージです。

[
  ["名前", "メール"], // index 0 (1行目)
  ["田中", "t@ex.com"], // index 1 (2行目)
  ["佐藤", "s@ex.com"]  // index 2 (3行目)
]

オブジェクト (Object)

データを「名前(キー)」で管理します。順番ではなく「意味」でデータを取り出したい時に使います。

const config = {
  sheetName: "売上ログ",
  maxRows: 1000,
  isAdmin: true
};

// 「.名前」で中身を呼び出す。直感的!
console.log(config.sheetName); // 売上ログ

配列とオブジェクトの使い分け

  • 順番で扱いたいなら配列
  • 意味のある名前で扱いたいならオブジェクト
  • GASでは、シートから取ったデータはまず配列として受け取り、必要に応じて意味づけして使います

初心者がよく混乱する点

  • 配列は [0] のように番号で取り出す
  • オブジェクトは .sheetName のように名前で取り出す
  • スプレッドシートの表データは、想像以上に配列の形で扱う場面が多いです

5. 繰り返し (for):自動化のコア

ループは「手作業なら数時間かかる作業を、1秒で終わらせる」ために使います。 GASが業務自動化に強いのは、この繰り返し処理を簡単に書けるからです。

手作業の限界 😩

100人にメールを送る際、1通ずつメアドをコピーして、件名を打って送信ボタンを100回押す。ミスも起きやすい。

ループの威力 🚀

「名簿のリストを上から順に読み込み、メールを送る」という命令を1つ書くだけ。100通でも1000通でも数秒で終わります。

Example: Bulk Email
const customerList = ["a@ex.com", "b@ex.com", "c@ex.com"];

// 「for...of」:リストの中身を1つずつ「addr」として取り出しながら繰り返す
for (const addr of customerList) {
  GmailApp.sendEmail(addr, "2026年ご挨拶", "本年も宜しくお願いします");
  console.log(addr + " への送信が完了しました");
}

ループが必要になる場面

  • 名簿の全員にメールを送る
  • シートの全行をチェックする
  • 複数の予定を一覧化する
  • フォルダ内の複数ファイルを処理する

実務での注意

ループは便利ですが、メール送信やデータ更新のような処理をループに入れると、 一度に大量実行されます。テスト不足のまま本番データで回すと影響が大きいため、 最初は件数を絞って確認することが重要です。

6. 美しいコードの作法(コーディング規約)

インデント(字下げ)をサボらない

インデントは「読みやすさ」のためだけではありません。 プログラムの「範囲」を見極めるための地図です。

NG (ぐちゃぐちゃ)
function run() {
if(status === "OK") {
console.log("Send");
}
}
GOOD (美しい)
function run() {
  if (status === "OK") {
    console.log("Send");
  }
}

意味のある名前を付ける(キャメルケース)

変数は userNamesheetData のように、2つ目の単語を大文字にして繋ぎます。

Bad: const x = 100; (何が100かわからない)
Good: const maxRetryCount = 100; (意味がわかる)

コメントは「なぜ」を残すために使う

コメントは、コードを日本語に直すためではなく、 「なぜこの処理が必要なのか」を残すために使うと価値が高くなります。 たとえば「1万円以上の時だけ通知」や「テスト用に自分宛送信」など、 意図を補足するコメントが有効です。

読みやすいコードは、後で自分を助けます

コードは「書いた直後の自分」よりも、「数日後の自分」や「別の人」が読むことの方が多いです。 そのため、読みやすさは見た目の問題ではなく、保守性とミス防止のための重要な工夫です。

文法編1 のまとめ

・変数は、データを意味のある名前で管理するための箱です。

・比較演算子や論理演算子は、条件によって処理を変えるために使います。

・配列とオブジェクトは、大量のデータを整理して扱うために必要です。

・ループは、GASの自動化らしさが最も強く出る文法です。

・読みやすい書き方は、実務でのミスを減らし、改善しやすいコードにつながります。

前のステップへ(重要用語集) 次のステップへ(文法編2)