【コピペ可】納期を忘れて評価を落とす前に。GAS20行で作る「今日が納期」の自動メール通知

【コピペ可】納期を忘れて評価を落とす前に。GAS20行で作る「今日が納期」の自動メール通知

記事
ビジネス・マーケティング
出品を続けていると、案件が2件3件と重なる日がきます。そうなると怖いのは、技術的な難しさより**単純な納期忘れ**です。

評価は一度落ちると戻りません。にもかかわらず、納期の管理はたいてい「スプレッドシートに書いて、ときどき見る」で運用されています。見るのを忘れたら終わりです。

そこで、**スプレッドシートを毎朝かわりに見てくれる仕組み**を作ります。Google Apps Script(GAS)で20行ほど。プログラミングの経験は要りません。コピペで動きます。

### 作るもの

毎朝8時に、スプレッドシートの「納期」列を見て、**今日が納期なのに納品済みでない案件があればメールで知らせる**。それだけです。

該当が無い日はメールが来ません。「何も来ない=今日は大丈夫」と分かるので、シートを開く習慣そのものが不要になります。

### 1. シートを用意する

Googleスプレッドシートを新規作成し、シート名を `案件` にします。1行目に見出しを入れて、A・B・C列を次のようにします。

| | A | B | C |
|---|---|---|---|
| 1 | 案件名 | 納期 | ステータス |
| 2 | ロゴ修正(〇〇様) | 2026/09/03 | 進行中 |
| 3 | バナー3点(△△様) | 2026/09/05 | 納品済 |

**B列の「納期」は、必ず日付として入力してください。**ここが後で一番つまずきます(理由は最後に書きます)。

C列に `納品済` と入れた行は通知の対象外になります。

### 2. コードを貼る

スプレッドシートのメニューから **拡張機能 → Apps Script** を開きます。最初から書かれているコードは全部消して、次をそのまま貼り付けてください。

```javascript
function notifyDueToday() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('案件');
  const rows = sheet.getDataRange().getValues();
  const todayStr = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');

  const due = [];
  for (let i = 1; i < rows.length; i++) {
    const name = rows[i][0];
    const deadline = rows[i][1];
    const status = rows[i][2];

    if (!name || !deadline) continue;
    if (status === '納品済') continue;
    if (!(deadline instanceof Date)) continue;

    const d = Utilities.formatDate(deadline, 'Asia/Tokyo', 'yyyy/MM/dd');
    if (d === todayStr) due.push(name);
  }

  if (due.length === 0) return;

  MailApp.sendEmail(
    Session.getActiveUser().getEmail(),
    '【本日納期】' + due.length + '件',
    due.map(function (n) { return '・' + n; }).join('\n')
  );
}
```

貼ったら保存し、上部の実行ボタンで一度動かします。初回だけGoogleから権限の確認画面が出るので許可してください。「このアプリは確認されていません」と出ますが、自分で書いたスクリプトなので問題ありません。詳細を開いて進めます。

B列に今日の日付が入った行があれば、自分宛にメールが届きます。届かない場合は、その日に該当行が無いだけかもしれません。B列を今日の日付にして再実行してみてください。

### 3. 毎朝動くようにする

Apps Scriptの画面の左側にある**時計のアイコン(トリガー)**を開き、右下の「トリガーを追加」を押します。

- 実行する関数: `notifyDueToday`
- イベントのソース: 時間主導型
- 時間ベースのトリガーのタイプ: 日付ベースのタイマー
- 時刻: 午前8時〜9時

保存すれば完成です。あとは毎朝、勝手に見てくれます。

### つまずくのはだいたいここ

**納期が文字列になっている。**セルに `9/3` と打ったつもりが、書式によっては文字列として保存されていることがあります。そうなると日付として比較できず、通知が飛びません。上のコードは `deadline instanceof Date` で日付以外を読み飛ばすので、**エラーは出ないのに静かに動かない**という形になります。

見分け方は簡単で、セルを選んだとき**右寄せで表示されていれば日付、左寄せなら文字列**です。左寄せだったら、B列を選択して「表示形式 → 日付」にしてから入力し直してください。

**シート名が違う。**コードの `getSheetByName('案件')` はシート名と完全に一致している必要があります。デフォルトの `シート1` のままなら、コード側を書き換えるか、シート名を変えてください。

### ここまでは自分でできます

この先は、どこから難しくなるか

ここで作ったのは「1つのシートを、1つの条件で、1日1回見る」仕組みです。この範囲なら、この記事のコピペで足ります。

難しくなるのは、条件が増えたときです。

「3日前にも知らせたい」なら、日付の差分を計算することになります。単純な引き算ではなく、土日を挟むか、月をまたぐかで期待する挙動が変わります。ChatworkやLINEに飛ばすなら UrlFetchApp と各サービスのトークン管理が加わり、トークンをコードに直接書かない置き場所も考える必要が出ます。複数シートをまたぐ集計は、たいていシートごとに列の並びが違うので、集計そのものより「構造を揃える作業」のほうが時間を食います。

つまり、増えるのはコードの行数ではなく確認すべき前提の数です。ここを軽く見ると「簡単なつもりが半日溶けた」になります。逆に言えば、前提が1つに定まっている作業なら、たいてい今日の記事の延長で片づきます。

なお、こうした小さな自動化は出品サービスとしてもお受けしています。



---

*この記事の作成にはAIを活用しています。掲載したコードは公開前に内容を確認していますが、ご自身の環境で試す際は、まずテスト用のスプレッドシートでお試しください。*

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す