今日は 「GASを初めて動かす60分」を一緒に走っていきましょう。
やることは 3つだけ。難しい話はしません。
hello! を出す。appendRow で1行追加。手作業のコピペから卒業。sheet.new で5秒)
▶ボタンで1行記録 → トリガー設定で1分ごとに自動でログが溜まる。ここまでを今日60分で一緒に作ります。
ブラウザのアドレスバーに sheet.new と入れて Enter →
新規スプレッドシートが一発で立ち上がります。
Googleにログインした状態で動きます。会社アカウントだと制限される場合あり、その時はドライブから「新規 → スプレッドシート」でOK。
スプレッドシート・JavaScript・Google Apps Script の関係を整理します。
読み方:グーグル・アップス・スクリプト / 略して GAS(ガス)
Googleが用意してくれた、
スプシ・Gmail・カレンダーを動かすための道具。
短いコードを書くだけで、スプシ・Gmail・カレンダーを直接動かせる。
パソコンには何もインストールしないし、サーバーも要らない。ブラウザだけで全部完結。
読み方:JavaScript=ジャバスクリプト(プログラミング言語の名前)
プログラミング言語 = 「コンピュータへの命令の書き方」。 GASは JavaScript を使って、その命令を書きます。
「動かす体験」だけ持って帰ってもらえれば、今日のゴールはクリア。
| 普通のやり方 | GAS |
|---|---|
| 手動でコピペ | → 自動で記録 |
| メール手送り | → 自動で送信 |
| 毎日の集計を手作業 | → ボタン1つで完了 |
「Googleをもっと賢く使う」ための裏ワザ。
スプシ操作の自動化、フォーム送信時の処理など
毎朝決まった時間に動くツールなど
今日は A(スプシから開くタイプ)。スプシを動かすのが主役なので、スプシから直接開きます。
拡張機能 をクリックApps Script をクリック「Apps Script を有効にしますか?」「同意します」のような確認画面が表示されることがあります。同意 / 続行 を選んで進めてOK。
→ 新しいタブにエディタが開きます。
Logger.log() の出力もここ
function myFunction() { Logger.log("hello!"); }
▶ 実行 ボタンを押すhello! と表示されれば成功
読み方:function=ファンクション / myFunction=マイファンクション / Logger.log=ロガー・ログ
動いた。 ここがスタート地点。
関数 = 「やりたいことを、ひとまとまりにして名前をつけたもの」。
レシピで言う「カレーを作る」みたいな、手順のかたまり。一度書けば▶ボタンでもトリガーでも呼び出せる。
function 関数名() { // ここに処理を書く }
; って何?
セミコロン ; = 「この1行はここで終わり」 の目印。
文章の句点「。」と同じ感覚。GAS(JavaScript)は 命令の文末ごと にこれを付ける。書き忘れても動くことが多いけど、付けておくのが慣習。
const sheet = SpreadsheetApp.getActiveSheet(); sheet.appendRow(["hello"]); sheet.appendRow(["world"]);
function や { } のあとには付けない
{ } の中は スペース2個 下げて書く慣習。動作には関係ないけど、人間が読むときに楽になる。
function recordLog() { const sheet = SpreadsheetApp.getActiveSheet(); const now = new Date(); sheet.appendRow([now]); }
function recordLog() { const sheet = SpreadsheetApp.getActiveSheet(); const now = new Date(); sheet.appendRow([now]); }
Apps Script エディタは Tab キーや改行時に自動でインデントしてくれる。自分で揃えなくてもOK。
SpreadsheetApp で、スプシにデータを書き込みます。
Googleが無料で配ってる、ブラウザで動くExcelみたいなもの。
今日は、このスプレッドシートを「GASで自動で動かす」のがゴール。
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); Logger.log(sheet.getName()); }
hello のコードを全部消して、これに置き換えて ▶実行。
実行ログに シート1 みたいな シートの名前 が表示されれば成功。
const sheet = SpreadsheetApp.getActiveSheet() がおまじない。「今開いてるシートを sheet という名前で呼ばせて」の意味。
読み方:const=コンスト / SpreadsheetApp=スプレッドシートアップ / getActiveSheet=ゲットアクティブシート / getName=ゲットネーム
▶実行を押すと、ここで初めて認証画面が出ます。SpreadsheetApp を呼んだ瞬間にGoogleが「スプシを触る権限を渡していい?」と聞いてくるので、次のスライドの手順で進めてください。
SpreadsheetApp を実行した瞬間に、Googleが 「このスクリプトにスプシを触る権限を渡していい?」 と聞いてきます。
自分で書いたコードなのでOKを出せばOK。慣れない画面ですが手順通り進めれば大丈夫です。
権限を確認 をクリック詳細 → (プロジェクト名)に移動(安全ではないページ)許可
この警告は「Googleが事前審査していない、自作スクリプト」だから出るもの。
自分が書いたものを自分のアカウントに許可しているだけなので問題なし。
function writeData() { const sheet = SpreadsheetApp.getActiveSheet(); sheet.appendRow(["kimura", "テスト", "完了"]); }
appendRow(["A", "B", "C"]) はシートの一番下の行に追加する。
実行 → スプシに行が追加される。
読み方:appendRow=アペンドロウ / writeData=ライトデータ
sheet.appendRow(["自分の名前", "好きな食べ物", "今の気分"]);
配列 ["A", "B", "C"] の中身を、自由に書き換えるだけ。
" は消さないで!
書き換えるのは " と " の あいだの文字 だけ。クォートを消すとエラーです。
["佐藤", "ラーメン", "眠い"]
[佐藤, ラーメン, 眠い]
2分タイム / それぞれ自分のデータを入れて実行してみてください。
「触らなくても動く」って、GASではどう実現するのか。
トリガー = 「このタイミングで自動で動かす」設定。
コードを書いたら、あとは放っておける。
注意:設定した瞬間に動くわけじゃないです。Google側の都合で数分かかることもあるので、すぐ反映されなくても焦らないでください。
今日触るのは「スプシに書き込み + トリガー」だけ。
でもGASは、Googleの他のサービスや、外のサービスとも全部つながります。
全部、今日と同じ function 〜 () { ... } の形で書ける。
日時ログ記録ツールを、ここから一気に完成まで。コード→実行→トリガー設定。
実行するたびに 日付・時刻がスプシに自動で記録。トリガー設定で「毎時1行」の自動日誌になります。
たった10行ほどのGASで動く、シンプルだけど実用的なツール。
手書きやメモアプリで続かなかった人ほど、自動化が効きます。
function recordLog() { const sheet = SpreadsheetApp.getActiveSheet(); const now = new Date(); sheet.appendRow([ Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd'), Utilities.formatDate(now, 'Asia/Tokyo', 'HH:mm:ss'), '自動記録' ]); }
このまま貼れば動きます。"なぜ動くか"より"動かす"を優先。
▶ 実行 → スプシに記録されることを確認(初回は認証)
'自動記録' の部分を、
自分のメモに書き換えてみよう。
Zoomチャットのスライドから完成コードをコピーして、もう一度貼り直してみてください。
⏰(トリガー)アイコン+ トリガーを追加recordLog を選ぶ時間主導型分ベースのタイマー → 1分おき(動作確認用)保存 → 認証ダイアログが出たら同じ要領で許可
まず 「1分おき」で動くことを確認。
動いたら最後に 「時間ベースのタイマー → 毎時」 に変更するのが安心。
保存後、トリガー一覧に新しい行が追加される。
1〜数分後にスプシへ自動で行が増えれば成功。
保存ボタンを押せた瞬間に、あなたはGASに「予約」を入れた。
このあと1〜数分以内に、設定した間隔で
スプシに自動でデータが追加されていく(はず)。
自分では何もしていないのに動いている。
注意:Google側の都合で数分遅れることがあります。焦らずQ&Aタイムまで待ってみてください。反映されなかった人は、Zoomチャットのスライドから完成コードをコピーして貼り直すと動くことが多いです。
hello! をログに出す)appendRow)
このツールに「メール通知」も足せます。
→ ライブで1分だけ実演します。一緒に手を動かしてもOK、家で試してもOK。材料は全部ここに置いておきます。
このコードに、記録するたびにGmail通知を追加して function recordLog() { const sheet = SpreadsheetApp.getActiveSheet(); const now = new Date(); sheet.appendRow([ Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd'), Utilities.formatDate(now, 'Asia/Tokyo', 'HH:mm:ss'), '自動記録' ]); }
①をまるごとコピーして、Gemini の入力欄に貼って送るだけ。返ってきたコードをエディタに上書きして実行すれば、メール通知付きに進化します。
※ Chrome タブの右上「Geminiに相談」ボタンが表示されている人は、そこから開いてもOK。今見ているページの内容を渡せます。
今日は理解しなくてOK。"こういうことが今日の延長でできるんだ" だけ持ち帰ってください。Gmail通知は追加承認画面が出るので、ライブで一緒にやって途中で間に合わなくなったら、家で続きをどうぞ。
トリガーは 設定しっぱなしだと回り続けます。 特にメール通知を足したあとは、忘れずに停止を。
GASのメール通知は、個人用Googleアカウントだと1日100宛先まで。「100通」ではなく「100宛先」なので、To / CC / BCC が複数あるとその分だけ消費されます。
毎時トリガーでメール通知を放置すると、気づかないうちに上限到達 → しばらく通知が送れなくなることも。テスト後は不要なトリガーを必ず停止しておくのが安全。
⏰(トリガー)アイコン︙(3点メニュー)トリガーを削除 をクリック関数自体は残ります。「自動で動く設定だけ外す」イメージ。
if で条件分岐)今日の60分、本当にありがとうございました。