GAS学習note:Day5 関数化・再利用でコードを整える〜ChatGPTと一緒に“育てるGAS”をつくる〜
はじめに
前回(Day4)では、for文とif文を組み合わせて、在庫チェックや期限管理などの自動化ツールを作りました。
今回は、そのコードをさらに使いやすく整理していくステップです。
テーマは――
✅ 関数化と再利用、そしてChatGPTとの連携。
「1つの処理を別のシートでも使いたい」
「似たようなコードを毎回コピペするのが大変」
そんな悩みを解決するのが「関数化」。
そして、生成AIを使えば、エラー修正や改善も一緒に進められるんです。
💡 Day3 → 条件を理解する練習
💡 Day4 → 条件を実務データに適用するステップ
💡 Day5 → それを“関数”として整理し、再利用可能にする段階
1️⃣ 関数化とは?
関数化とは、処理のまとまりに名前をつけて再利用できるようにすること。
たとえば、Day4で作った在庫チェック処理を関数にすると、こんな風に整理できます👇
// 在庫アラートを汎用関数に
function checkStock(row, qtyCol, orderedCol, noteCol) {
const sh = SpreadsheetApp.getActive().getActiveSheet();
const qty = Number(sh.getRange(row, qtyCol).getValue());
const ordered = sh.getRange(row, orderedCol).getValue();
if (qty <= 10 && ordered === false) {
sh.getRange(row, noteCol).setValue('⚠補充要');
sh.getRange(row, qtyCol, 1, 3).setBackground('#fff2cc');
} else {
sh.getRange(row, noteCol).setValue('');
sh.getRange(row, qtyCol, 1, 3).setBackground(null);
}
}
呼び出し側のメイン処理はシンプルに!
function stockAlert() {
const sh = SpreadsheetApp.getActive().getActiveSheet();
const last = sh.getLastRow();
for (let r = 2; r <= last; r++) {
checkStock(r, 2, 3, 4); // 行番号, 在庫列, 発注列, メモ列
}
}
💡 列構成が変わっても、引数を変えるだけで再利用可能。
似たロジックを何度も書かずに済みます。
2️⃣ 共通処理を小さく分ける
日付処理や型チェックなど、複数のコードで使う部分は共通関数にしておくと便利です。
// 日付の時刻を0時に統一する共通関数
function normalizeDate(date) {
if (!(date instanceof Date)) return null;
const d = new Date(date);
d.setHours(0, 0, 0, 0);
return d;
}
この小さな関数を入れるだけで、Day4で作った期限チェックがスッキリ👇
function dueAlert() {
const sh = SpreadsheetApp.getActive().getActiveSheet();
const last = sh.getLastRow();
const today = normalizeDate(new Date());
for (let r = 2; r <= last; r++) {
const due = normalizeDate(sh.getRange(r, 6).getValue());
const status = sh.getRange(r, 7).getValue();
if (!due) continue;
if (due < today && status === false) {
sh.getRange(r, 8).setValue("期限切れ");
sh.getRange(r, 6, 1, 3).setBackground("#f4cccc");
} else {
sh.getRange(r, 8).setValue("");
sh.getRange(r, 6, 1, 3).setBackground(null);
}
}
}
3️⃣ ChatGPTと一緒にデバッグしてみよう
GASを触っていると、必ず出会うのが 「TypeError」や「Range not found」などのエラー。
そんなときこそ、ChatGPTの出番です💡
💬 実際のやり取り
📘 あなた(質問)
実行したら「TypeError: Cannot read properties of null」と出ました。
どこを直せばいいですか?
🤖 ChatGPT(回答)
このエラーは「指定したシートやセル範囲が見つからない」時に出ます。
getActiveSheet() が空を返している可能性があります。
確実に対象シートを指定してみましょう。
const sh = SpreadsheetApp.getActive().getSheetByName("在庫管理");
📘 あなた
修正したら動きました!
でも、背景色が残ったままになります。
🤖 ChatGPT
条件に合わない場合に色をリセットしていないのが原因です。
else 節で setBackground(null) を入れましょう!
else {
sh.getRange(r, 8).setValue("");
sh.getRange(r, 6, 1, 3).setBackground(null);
}
📘 あなた
なるほど! else で元に戻すんですね。
🔍 コツ
エラーメッセージはそのまま貼る!
コード全体と一緒に送ると原因特定が早い。
修正後は「どこがどう変わったか」も一緒に質問すると理解が深まる。
生成AIを使うと、ただ「直す」だけでなく、“なぜ動かないのか”を一緒に学べるのが最大のメリットです。
4️⃣ AIと一緒にGASを“育てる”という考え方
生成AIは「答えを出すツール」ではなく、一緒にコードを育てるパートナー。
書いたコードをレビューしてもらう
エラーを一緒に直す
コメント付きでリファクタリング(整理)してもらう
そうして少しずつ「読みやすい・動かしやすい」コードに育っていく。
この流れがまさに “AI時代の学び方” です。
まとめ:Day5で身につけたこと
Day5では、これまで学んだGASコードを
整理・再利用・改善できる形 にステップアップしました。
学びの3ポイント
関数化で処理をモジュール化し、別の場所でも使えるようになった。
共通関数を作ることで、コードの重複を減らして管理しやすくなった。
ChatGPTを活用して、エラー修正や改善のスピードが大幅アップ。
💡 GAS × 生成AI = “1人で悩まない開発”
コードを「書く」から「育てる」フェーズへ。
次回予告(Day6)
Day6では、ついに トリガー設定(自動実行) に挑戦します。
「毎朝8時に自動で期限チェックを実行」など、本格的な自動化の世界へ進みましょう。
