さあ、いよいよ実践編のスタートだ。
マインドセット編で、あなたは「自動化への執念」と「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の世界へダイブする。
- スプレッドシートのメニュー「拡張機能」→「Apps Script」をクリック。
- 元々書いてある
function myFunction()...を全部消す。 - AIがくれたコードを無心で貼り付ける。
- コード内の「メールアドレス」部分だけ、自分のものに書き換える。
準備ができたら「▷ 実行」ボタンを押すのだ。
初回だけ「権限を確認」という承認画面が出るが、これは「私が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);
}
}
コメント