実践編①:「明日やろうは馬鹿野郎」を撲滅せよ —— 期限切れタスクを自分にチクリ報告する「Gmailリマインダー」

さあ、いよいよ実践編のスタートだ。

マインドセット編で、あなたは「自動化への執念」と「AIへの指示力」を高めてきた。ここからは実際に手を動かし(といってもコピペだが)、世界を変えていくターンだ。

記念すべき最初のツールは、「期限切れタスクの密告Bot」だ。

LINE連携はハードルが高いので、今回はGoogle純正の「Gmail」を使う。これなら新たな登録も設定も不要。今すぐ始められる。

ここでは初心者向けに「Googleのエコシステム内(スプシ、Gmail、カレンダー、YouTubeなど)で完結する」という制約を設けることにする。

本来は外部ツールとの連携が一番ツールとして楽しいが今回はGoogleの中で完結するツールを作っていく。

1. 【発端】人間の限りなく怠惰な思考(脳内垂れ流し)

スプレッドシートでタスク管理をしているが、見に行くのを忘れる……という「あるある」を解決しつつ、「自分の尻を自分で叩く自動装置」

あなたは日々、スプレッドシートでToDoリストを管理している……つもりになっている。

だが、正直に言おう。あなたはリストを見ない。

「あとで確認しよう」と思ってブラウザを閉じ、気づけば期限が過ぎている。そして上司に怒られる。

あなたの脳内はこう叫んでいるはずだ。

「あー! いちいちスプシを開いて『今日が期限のやつどれだっけ?』って探すの面倒くせぇ!

ていうか、期限がヤバいやつだけ向こうから『おい!』って教えに来てくれよ!

俺は自分から見に行きたくないんだよ、誰か俺の尻を叩いてくれ!」

この「逆ギレ」に近い感情こそが、開発のスタート地点だ。

2. 【翻訳】冷静な箇条書きメモ(ここが勝負)

さあ、その感情をAIに通じる言葉(仕様書)に翻訳しよう。

今回の登場人物は「スプレッドシート(タスク置き場)」と「Gmail(通知役)」だ。

まず、スプレッドシートを準備する。

1行目に見出しを作り、適当にデータを埋める。これがないとAIもイメージできない。

A B C
1 タスク名 期限 ステータス
2 請求書送付 2023/10/01 完了
3 記事執筆 2023/10/05 未着手

よし、これを踏まえて翻訳するぞ。

【AIへの指示メモ(仕様書)】

対象: アクティブなスプレッドシートの「シート1」

データ構造:

  • A列:タスク名
  • B列:期限(日付)
  • C列:ステータス(「完了」とか「未着手」とか)

判定ロジック(ここ重要):

  • B列の「期限」が、今日よりも前(過去)であること
  • かつ、C列が「完了」ではないこと

実行アクション:

  • 条件に当てはまるタスクがあれば、Gmailを送る
  • 宛先:my-email@gmail.com(自分のメアド)
  • 件名:【警告】期限過ぎてます
  • 本文:タスク名を表示して煽る

これで完璧だ。感情は消え、ロジックだけが残った。

3. 【発注】AIへのプロンプト送信

では、このメモをAI(ChatGPTなど)に投げつける。

丁寧に書く必要はない。箇条書きをそのままコピペでいい。

<実際に送信するプロンプト>

GASで以下のツールを作ってください。

# 要件
スプレッドシートのタスク一覧をチェックして、期限切れの未完了タスクがあれば自分にGmailで通知を送る。

# シート構成
・1行目はヘッダー
・A列:タスク名
・B列:期限(日付形式)
・C列:ステータス

# 処理の流れ
1. シートの全データを取得
2. 「期限(B列)が今日より前」かつ「ステータス(C列)が'完了'じゃない」行を探す
3. 該当するタスクがあれば、タスク名をまとめてGmailで送信する

# メール内容
・宛先:(ここに自分のメールアドレスを入れる)
・件名:【警告】期限切れタスクがあります
・本文:以下のタスクが死んでいます。至急やってください。
(該当タスク名をリスト表示)

初心者なので、そのままコピペで動くコードを書いて。

4. 【実装】コピペ&実行

AIからコードが返ってきたら、いよいよGASの世界へダイブする。

  1. スプレッドシートのメニュー「拡張機能」→「Apps Script」をクリック。
  2. 元々書いてある function myFunction()... を全部消す。
  3. AIがくれたコードを無心で貼り付ける
  4. コード内の「メールアドレス」部分だけ、自分のものに書き換える。

準備ができたら「▷ 実行」ボタンを押すのだ。

初回だけ「権限を確認」という承認画面が出るが、これは「私がGmailを操作していいですか?」というGoogleからの確認だ。

迷わず「許可(Advanced → Go to…)」して進め。

結果はどうだ?

あなたのGmailに、自分自身からの「警告メール」が届けば成功だ。

届いたか? おめでとう。これであなたは、自分専属の「口うるさい秘書」を手に入れたことになる。

5. 【仕上げ】「トリガー」という魔法のスイッチ

だが、このままでは「実行ボタンを押した時」しかメールが来ない。

それでは「ボタンを押すのを忘れる」という本末転倒な事態になる。

ここでGAS最強の機能「トリガー」を使う。

画面左側の「時計アイコン(トリガー)」をクリックし、以下の設定をするだけだ。

  • イベントのソース: 時間主導型
  • タイプ: 日付ベースのタイマー
  • 時刻: 午前 8時 〜 9時

これで保存。

これだけで、明日からは毎朝8時〜9時の間に、勝手にシートがチェックされ、サボっているタスクがあれば「おい!期限過ぎてるぞ!」とメールが飛んでくる。

PCを開いていなくても、寝ていても、Googleのサーバーが勝手にやってくれるのだ。


【実践編① 付属資料】

1. AIが生成する標準コード(基本編)

記事内の「箇条書きプロンプト」から生成される、シンプルで分かりやすいコードです。

JavaScript

function sendOverdueTaskNotification() {
  // 1. スプレッドシートと現在のシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 2. シートの全データを取得(2次元配列)
  var data = sheet.getDataRange().getValues();
  
  // 3. 今日の日付を取得(比較用に時間を00:00:00にセット)
  var today = new Date();
  today.setHours(0, 0, 0, 0);
  
  // 期限切れタスクを格納する配列
  var overdueTasks = [];
  
  // 4. データの行数分だけループ(1行目はヘッダーなのでスキップして1から開始)
  for (var i = 1; i < data.length; i++) {
    var taskName = data[i][0]; // A列: タスク名
    var dueDate = new Date(data[i][1]); // B列: 期限
    var status = data[i][2]; // C列: ステータス
    
    // 日付が無効な場合はスキップ(空欄対策)
    if (isNaN(dueDate.getTime())) continue;

    // 期限の時間を00:00:00にセットして比較
    dueDate.setHours(0, 0, 0, 0);

    // 条件: 期限が今日より前 かつ ステータスが「完了」ではない
    if (dueDate < today && status !== '完了') {
      // リストに追加(日付も見やすい形式にしておく)
      var dateString = Utilities.formatDate(dueDate, Session.getScriptTimeZone(), 'yyyy/MM/dd');
      overdueTasks.push('・' + taskName + ' (期限: ' + dateString + ')');
    }
  }
  
  // 5. 期限切れタスクがあった場合のみメールを送信
  if (overdueTasks.length > 0) {
    var recipient = 'your-email@example.com'; // ★ここに自分のメアドを入れる
    var subject = '【警告】期限切れタスクがあります';
    var body = '以下のタスクが死んでいます。至急やってください。\n\n' + overdueTasks.join('\n');
    
    GmailApp.sendEmail(recipient, subject, body);
  }
}


2. 拡張アイデアコード(応用編)

追加機能:スプレッドシートの行を「赤く」染める & メールに「リンク」を付ける

メールで通知が来るだけでは、スプレッドシートを開くのが面倒です。

そこで、「該当する行の背景色を真っ赤にして視覚的に警告する」機能と、「メール内にスプレッドシートへの直リンクを貼る(ワンクリックで移動)」機能を追加しました。

JavaScript

function sendOverdueTaskNotificationAdvanced() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  
  var today = new Date();
  today.setHours(0, 0, 0, 0);
  
  var overdueTasks = [];
  
  for (var i = 1; i < data.length; i++) {
    var taskName = data[i][0];
    var dueDate = new Date(data[i][1]);
    var status = data[i][2];
    
    if (isNaN(dueDate.getTime())) continue;
    dueDate.setHours(0, 0, 0, 0);

    // 条件判定
    if (dueDate < today && status !== '完了') {
      var dateString = Utilities.formatDate(dueDate, Session.getScriptTimeZone(), 'yyyy/MM/dd');
      overdueTasks.push('・' + taskName + ' (期限: ' + dateString + ')');
      
      // 【拡張機能1】該当する行の背景色を「薄い赤」に変更して目立たせる
      // getRange(行番号, 列番号, 行数, 列数) ※行番号は1始まりなので i+1
      sheet.getRange(i + 1, 1, 1, 3).setBackground('#f4c7c3'); 
    } else {
      // 期限切れでなければ背景色を元(白)に戻す(完了した時に色が消えるように)
      sheet.getRange(i + 1, 1, 1, 3).setBackground(null);
    }
  }
  
  if (overdueTasks.length > 0) {
    var recipient = 'your-email@example.com'; // ★ここに自分のメアド
    var subject = '【激怒】期限切れタスク発生中';
    
    // 【拡張機能2】スプレッドシートのURLを取得してメール本文に追加
    var sheetUrl = ss.getUrl();
    
    var body = '以下のタスクが期限切れです。行を赤く染めておきました。\n\n' 
             + overdueTasks.join('\n') 
             + '\n\n▼今すぐ確認して完了にする\n' + sheetUrl;
    
    GmailApp.sendEmail(recipient, subject, body);
  }
}


part 4 of 11 【講座名】 AI-GAS[スプレッドシート自動化]

AI-GAS[スプレッドシート自動化]

【GAS初心者】作りたいものが思いつかない?「我慢」をやめれば自動化のネタは無限に湧いてくる

【AI×GAS】AIは「察してちゃん」が大嫌い!欲望を箇条書きにする「思考の翻訳」トレーニング

【GAS初心者】環境構築という「最初のボス」はもういない ——GASとスプレッドシートの蜜月関係

実践編①:「明日やろうは馬鹿野郎」を撲滅せよ —— 期限切れタスクを自分にチクリ報告する「Gmailリマインダー」

実践編②:Googleカレンダーも合体!寝起きの自分に「今日の絶望」を届ける最強モーニングレポート

実践編③:YouTubeを監視せよ!寝ている間に「推し」や「トレンド」を勝手にリストアップする諜報員Bot

実践編④:クリック地獄からの解放!スプレッドシートの「質問リスト」からGoogleフォームを全自動生成する

実践編⑤:24時間365日「即レス」する無敵の受付嬢!フォーム回答への自動返信&自分への通知システム

実践編⑥:画面が真っ赤になっても心停止しない!エラーメッセージはAIへの「ネタ振り」だと思え

実践編⑦:読むな、感じろ……いや、AIに読ませろ!Gemini APIで「長文アンケート」を3秒で要約&感情分析する

第8回(最終回):結論、プログラマーになる必要はない。「プロの指示出しおじさん/おばさん」になれ

コメント

この記事へのコメントはありません。

PAGE TOP