朝7時42分、誰も何もしていないのに、メールが届いた
いきなりですが、けさいちばん驚いた場面からお話しさせてください。
けさの7時42分、スマホにメールが1通届きました。件名は「【申込まとめ】きのう(7月7日(火)):0件」。——0件。そう、きのうは申込がなかったんです。それなのに、まとめのメールは届いた。本文には、こんな一文が添えられています。
「この期間の申込は0件でした。(このメールが毎朝届くこと自体が、『まとめの見回りが今日もひとりでに動いた』という生存報告です)」
そして白状すると、0件の知らせなのに、読んで少しうれしかったんです。「きのうは申込がなかった」——それを、シートを開いて確かめに行かなくても、朝のスマホの1通で知っている。そんな朝は、これが初めてでした。
しかも届いたこの瞬間、わたしは何もしていません。パソコンは閉じたまま。スプレッドシートも、プログラムの画面も、誰も開いていない。それなのに、まとめのほうから届いた。

ここで、はっとしたことがあります。この受付ページの教材で作ってきた5つの仕組み——受付ページ、確認メール、控えPDF、ドライブ保存、AI仕分け——は、ぜんぶ引き金が“人”でした。誰かがページを開いた瞬間。誰かが送信ボタンを押した瞬間。その瞬間だけ、プログラムが目を覚まして動く。裏を返せば、誰も何もしなければ、何も起きない仕組みしか、まだ持っていなかったんです。
けさの1通は、違います。引き金は、人ではなく時計でした。
結果から言います = GASは、決まった時間に、誰も見ていなくても“ひとりでに”動けた
今回いちばん驚いたことを、先に言ってしまいます。
GASは、「毎朝この時間に動け」と予約しておくと、誰も画面を開いていなくても、ひとりでに動ける。
分解すると3つです。①「毎朝7時台に、きのう1日ぶんの申込まとめを自分へ送る」という予約(トリガーと呼ばれる、動くきっかけの予約)を仕掛けておける。②その予約じたいも、コードでできる——『毎朝まとめを予約する』という関数を1回実行するだけで予約完了。やめたくなったら『毎朝まとめを解約する』を1回。設置と撤去が、対になった関数で1つずつ。③しかも今回の予約の関数は、何度実行しても予約は常に1つという作りになっている。
今日の発見の核は、②と③です。「決まった時間に動く」こと自体は、じつはこのブログで初めてではありません(すぐあとで正直に線引きします)。今日新しく分かったのは、予約という“設定作業”までコードに任せられて、しかも何度やっても壊れない形にできる、ということでした。
受付ページがまた高機能になった、という話ではありません。受付ページは、この新しい道具を試すのにちょうど手元にあった練習台です。持ち帰ってほしいのは「時計を引き金に無人で動く仕組みを、予約から撤去までコードで持てる」という形そのもの。毎朝でも、毎週でも、題材を変えて同じ形が使えます。
そして毎度のことですが、わたしはコードを一行も書いていません。 AIに頼んで、返ってきたものを貼って、動かしただけです。
今日の一点:⑤「定期」の引き出しを、別の開け方でもう一度開ける
このブログでは「GASでできること」を、①集める ②知らせる ③書類 ④AI ⑤定期 ⑥つなぐ ⑦自分の画面——という7つの引き出しにたとえて、一つずつ開けています。この受付ページの教材では、⑦受付ページ、②確認メール、③控えPDF、①ドライブ保存、④AI仕分けと、5本を開けてきました。今日は⑤「定期」——決まった時間に、ひとりでに動く、です。
ここで、正直に線引きをしておきます。じつは⑤の引き出しは、このブログですでに開けたことがあります。それも、一度ではありません。
- 毎朝ダイジェストの回(未読メールを毎朝要約して1通にする回)では、「決まった時間に、向こうから届く」という体験そのものを、一度じっくり書きました。
- 作り方第4回では、「何時に動かすか」を予約する画面の操作を、7つの手順に割って画面つきで公開しました。だから今日は、その手動設定の手順をなぞり直しません。画面でポチポチと設定するやり方を知りたい方は、第4回へどうぞ。
- そして——毎朝集計の回。じつは「予約を、画面ではなくコードでやる」という書き方の初出は、あの回でした。ただ、あのときそれは「初期設定」という関数の中に埋もれていて、記事の主役は集計のほう。予約のしかたそのものには、光を当てないまま通り過ぎていました。
今日は、その通り過ぎたものを主題として掘り出す回です。何が新しいのか。3つあります。
(a) 予約と解約を、“対”で持つ。 目覚まし時計の設置も撤去も、コードの関数1回ずつ。トリガー画面の操作はゼロです。
(b) 何度実行しても、予約は常に1つ。 予約の関数は、中で「同じ仕事の古い予約を全部消してから、新しい予約を1つ置く」という順番で動きます。だから2回押しても10回押しても、予約は1つのまま増えません。
(c) 公開中のWebアプリと、同居させる。 今回はコードを足して保存するだけ。公開し直し(再デプロイ)は不要で、受付ページは1バイトも変わりません。これは、自作のWebアプリを公開しているこの教材だからこそ初めて出会う話です(種明かしは次の章で)。
しくみ:同じプロジェクトに、“2つの顔”がありました
中身は読まなくて大丈夫なのですが、今回わたしが「え、そうなの?」と言った箇所だけ、種明かしをしておきます。
1つ目。「保存するだけでいい」の理由=2つの顔。 同じプロジェクトの中に、じつは2つの顔があります。時間のトリガーが実行するのは、“いま保存されている最新のコード”。いっぽう、受付ページとして配信され続けるのは、“公開(デプロイ)済みの版”。だから今回のように「画面の外で動く仕組み」を足すだけなら、保存すれば終わり。公開中のページには、指一本触れないことになります。トリガー一覧の「導入」という列にHeadとあるのが、「最新の保存版を動かします」という印です。
2つ目。予約も解約も、証拠が“向こうから”届く。 トリガーは画面の外で動くものなので、うまくいったかを画面に張り付いて見届ける、ができません。そこで今回の予約・解約の関数は、実行するとそれぞれ【予約完了】【解約完了】のメールを自分に送ってくる作りになっています。記録を見にいかなくても、届けば成功。この「証拠が向こうから届く」形は、無人で動くものと付き合ううえでの基本だと感じました。
「きのう」の区切りも、決めてあります。 きのうの0時〜きょうの0時。この数え方は、プロジェクトのタイムゾーン設定(東京)に従います(スプレッドシート側の設定も東京になっていることを、念のため確認しました)。
0件の日も、あえて送ります。 無音だと、“申込ゼロ”なのか“故障して止まっている”のか、区別がつかないからです。だから冒頭のあの一文——毎朝届くこと自体が生存報告——になっています。毎朝1通がうるさければ、「0件のときは送らない」に1行で変えられます。
つまずき帳:今回は3つあります
つまずき①:4つ目の許可、「自分がいないときにこのアプリケーションを実行できるようにします」。
初回の動作確認で、新しい許可画面が出ます。文言だけ見るとぎょっとしますが、意味はそのままです——画面を閉じても、時計を引き金に動けるようにする許可。こわい顔をしたこの一文が、じつは今日手に入れる新しい力の、いちばん正確な説明文になっています。これまでの許可を並べると、道すじが見えます。⑦受付ページは許可なし、②確認メールで「メールを送る」、③控えPDFはなし、①ドライブで「Googleドライブのファイルの表示・管理」、④AI仕分けで「外部サービスへの接続」、そして⑤の今回がこれ。なお、わたしの環境では今回「このアプリは確認されていません」の警告は出ませんでした。もし出ても正常です。「詳細」から先へ進めます(道すじは許可画面の回・作り方第3回に)。

つまずき②:朝のメールは、“7時台のどこか”に来ます。
分まではぴったり指定できない仕様です(もっと細かく希望を出す方法もあるにはありますが、今回は使いません)。うちの実例は、7時42分でした。7時ちょうどに来ないのは、故障ではありません。
つまずき③:古い予約は、事故のもと。
古い予約が残ったままコードを貼り替えると、予約が動くたびに「関数が見つかりません」というエラーメールが届くようになります。古いトリガーを残したまま貼り替えて、このエラーメールを受け取る——このブログが毎朝集計の回で実際に踏んだ事故です。また——こちらは実際に踏んだわけではなく、仮定の話ですが——画面から手動で同じ予約を2回作ってしまえば、毎朝2通届くことも起こり得ます。だから今回の予約の関数は、「古い予約を消してから、1つだけ置く」作りにしてあります。何度押しても、1つ。事故の反省が、そのまま設計になりました。
作り方の体験:貼って、保存して、予約の関数を1回押しただけ
1. コードを貼り替えて、保存する(公開し直しません)
いつもどおり、AIが返してくれたコードに貼り替えて、保存します。いつもならここで再デプロイですが、今回AIは「保存するだけでいい」と言います。正直、半信半疑でした。
2. スマホから本番申込——受付ページは、従来どおり
なので、確かめました。保存した直後、スマホで受付ページを開き、架空の内容で1件申し込みます。ページはいつもどおり開き、お礼画面が出て、記録・確認メールと控えPDF・ドライブ保存・AI仕分け「あいさつ」——四段ぜんぶ、従来どおり。保存しても、公開中のWebアプリは無傷。“2つの顔”の実地証明です。
3. 『テスト_まとめを今すぐ送る』——4つ目の許可と、テストの1通
明日の朝を待たずに試せる、動作確認用の関数を実行します。初回はここで、つまずき①の承認画面が出るので、[許可]を押します。すると、まとめのテスト版が1通。件名は「【申込まとめ】テスト(きのう0時〜いま):1件」。申込件数1件(参加人数の合計1人)、AI仕分けの内訳は質問0/要望0/あいさつ1/なし0、明細にはさっきのスマホ申込が載っていて、末尾に「止めたいときは『毎朝まとめを解約する』」の案内。本番とまったく同じ道を通って作られるメールなので、これが届けば毎朝版も届きます。

4. 『毎朝まとめを予約する』——もう一度押しても、「1個」のまま
予約の関数を1回実行すると、すぐに【予約完了】のメールが届きます。時計アイコン(トリガー)の一覧を開くと、予約が1行——時間ベース、毎朝まとめを送る、導入はHead。ここで、ためしにもう一度予約の関数を実行してみました。一覧は「1個のトリガーを表示しています」のまま。増えない。「何度押しても1つ」が、目の前で確かめられました。

5. あとは、何もしない
そして7時42分、冒頭の1通が届きました。発見が2つあります。ひとつ、けさ6時46分に入れたスマホの申込は、まとめに入っていません——きのうの0時からきょうの0時までで区切っているので、けさの申込は“きょう”扱い。きのうは正しく0件でした。日付の境目まで、きちんと数えている。もうひとつは、正直な白状です。予約完了のメールは「次の朝から届きます」と言っていたのに、当日の朝に来ました。予約したのが7時前(6時50分)だったので、その日の7時台からもう動いたんです。約束より早く働き始めた、初日でした。
正直に、これはできません
無人で動く回こそ、できないことを盛らずに置いておきます。
- 分までは指定できません。 「7時台のどこか」です(うちは7時42分)。朝礼の5分前ぴったりに届けたい、のような使い方には向きません。
- 0件の日もメールは来ます。 生存報告として、わざとそうしました。不要なら、1行で「送らない」に変えられます。
- 届くのは自分(持ち主)だけです。 申込者や同僚への配信はしていません。
- “きのう”の集計だけです。 週ごと・月ごとのレポートは、また別の話。
- まれに、遅れたり抜けたりする可能性はあります。 Googleの都合で時刻が前後することがあります。ただ、まとめが1通落ちても、申込のデータそのものはシートに全部残っています。
ひと言でまとめると——時計は完璧ではありません。でも、「誰も見ていなくても、毎朝の見回りが勝手に済んでいる」。それだけで、朝の仕事がひとつ消えました。
次の引き出しへ
今日は⑤「定期」の引き出しを、コードのほうから開け直しました。分かったのは、GASは、予約から撤去までコードに任せて、無人で定期的に動けるということ。題材は申込まとめでしたが、大事なのはそこではありません。「時計を引き金に、誰もいなくても動く。しかもその予約は、何度やっても壊れない」——この形が、貼っただけで手に入ると分かったことです。
7つの引き出しのうち、⑦②③①④⑤の6本を開けました。残るは⑥「つなぐ」、あと1本だけです。次回も同じ受付ページを練習台に、最後の引き出しを開けてみます。
*※この記事の操作はすべて無料枠の範囲で行っています。画面の名前・アカウント名・メールアドレス・各種ID/URL・申込内容の個人情報は、マスクまたは架空のサンプルに差し替えています。許可画面の表示や、トリガーの仕様・動く時刻は時期や環境により変わることがあるため、最新の内容はご自身の環境でご確認ください。*
#定時で帰る開発部 #自動化レシピ #基礎編 #GAS #トリガー #つまずき帳
タイトル案(3つ)
- 誰も画面を開いていないのに、毎朝届く|GASは決まった時間に“ひとりでに”動ける【基礎編】
- 朝7時42分、無人のまとめメールが届いた|予約も解約も、コードの関数1回ずつ【基礎編】
- 保存するだけで、公開中のページは無傷|“時計”の引き出しを、コードから開け直す【基礎編】



コメント