移動 / F 全画面
登壇者

kimura(きむら)

手を振るkimura
— CREATOR
GASクリエイター
  • 30代/GASクリエイター
  • noteとXでツール配布や開発記録を発信中
  • GASを軸に、AI × 自動化を雑食で触る毎日
  • 「実務で困ってる作業」を自動化するのが趣味

今日は 「GASを初めて動かす60分」を一緒に走っていきましょう。

今日のゴール

60分後、手元に「動くツール」が1本残る

やることは 3つだけ。難しい話はしません。

STEP 01
GASを初めて動かす
エディタを開いて、▶ボタンで実行。最初の hello! を出す。
STEP 02
スプシを自動で書き換える
appendRow で1行追加。手作業のコピペから卒業。
STEP 03
勝手に動く仕組みを作る
トリガーで自動実行。寝てる間も動くツールが完成。
— 用意するもの
  • Googleアカウント(個人で OK)
  • 空のスプレッドシート1つ(sheet.new で5秒)
— 進め方
  • スライドのコードはコピー可、貼って実行
  • 詰まったらチャットに数字(1〜5)で OK
完成形デモ

日時ログ記録ツール

— エディタで ▶ 実行
Apps Scriptエディタで recordLog 関数を実行する画面
— スプシに自動で記録
日時ログがスプシに自動で溜まっている様子

▶ボタンで1行記録 → トリガー設定で1分ごとに自動でログが溜まる。ここまでを今日60分で一緒に作ります。

事前準備

「スプシまだ開いてない」人へ — 5秒で開く裏ワザ

ブラウザのアドレスバーに sheet.new と入れて Enter → 新規スプレッドシートが一発で立ち上がります。

スプレッドシート
sheet.new ↗
ドキュメント
docs.new ↗
スライド
slide.new ↗
フォーム
form.new ↗
カレンダー予定
cal.new ↗
Meet会議
meet.new ↗

Googleにログインした状態で動きます。会社アカウントだと制限される場合あり、その時はドライブから「新規 → スプレッドシート」でOK。

PART 01

そもそも、
GAS って何?

スプレッドシート・JavaScript・Google Apps Script の関係を整理します。

SECTION 01  ·  14 MIN
Part 1 / GASとは

Google Apps Script(GAS)

読み方:グーグル・アップス・スクリプト / 略して GAS(ガス)

Googleが用意してくれた、
スプシ・Gmail・カレンダーを動かすための道具。

短いコードを書くだけで、スプシ・Gmail・カレンダーを直接動かせる。
パソコンには何もインストールしないし、サーバーも要らない。ブラウザだけで全部完結。

インストール
不要
利用料金
無料
連携先
スプシ・Gmail・カレンダー・ドライブ・フォーム ほか
Part 1 / GASとは

JavaScriptって聞いて構えないでください

読み方:JavaScript=ジャバスクリプト(プログラミング言語の名前)

プログラミング言語 = 「コンピュータへの命令の書き方」。 GASは JavaScript を使って、その命令を書きます。

今日やること
  • 用意したコードを貼り付ける
  • ▶ ボタンを押す
  • 動いたら「なるほど」って言う
今日やらないこと
  • ゼロからコードを書く
  • JavaScriptの文法を覚える
  • エラーと格闘する

「動かす体験」だけ持って帰ってもらえれば、今日のゴールはクリア。

Part 1 / GASとは

なぜGASが強いか

普通のやり方GAS
手動でコピペ→ 自動で記録
メール手送り→ 自動で送信
毎日の集計を手作業→ ボタン1つで完了

「Googleをもっと賢く使う」ための裏ワザ。

Part 1 / GASとは

GASには「2つの開き方」がある

A. スプシなどから開くタイプ

(コンテナバインド型)

  • スプシ・ドキュメントなどの「拡張機能」から開く
  • 元のスプシとペアで動く
  • スプシを消すとGASも一緒に消える

スプシ操作の自動化、フォーム送信時の処理など

B. 単独で作るタイプ

(スタンドアロン型)

  • script.google.com から作る
  • どのファイルとも紐づかず、単独で存在
  • 複数のスプシをまたいで動かせる

毎朝決まった時間に動くツールなど

今日は A(スプシから開くタイプ)。スプシを動かすのが主役なので、スプシから直接開きます。

Part 1 / GASとは

スクリプトエディタを開く

  1. Googleスプレッドシートを開く
  2. 上メニュー 拡張機能 をクリック
  3. Apps Script をクリック
⚠ 出る可能性のある画面

「Apps Script を有効にしますか?」「同意します」のような確認画面が表示されることがあります。同意 / 続行 を選んで進めてOK

→ 新しいタブにエディタが開きます。

拡張機能メニュー → Apps Script
Part 1 / GASとは

エディタの見方

Apps Scriptエディタの画面
  • ① 左サイドメニュー
    エディタ/実行数/トリガー/ライブラリ等を切り替え
  • ② プロジェクト名
    最初は「無題のプロジェクト」。クリックして名前を付け直す
  • ③ 動かす関数を選ぶ + 実行ボタン
    関数が複数あるとき、どれを動かすかをここで選ぶ
  • ④ コードエディタ
    ここにコードを書く(中央のメイン領域)
  • ⑤ 実行ログ
    ▶実行すると画面下に自動で表示/Logger.log() の出力もここ
★ 成功体験 ①

最初のコード

function myFunction() {
  Logger.log("hello!");
}
  • 関数を宣言
  • 「hello!」をログに出す
  • 関数の終わり
  1. Ctrl + S(または 💾 アイコン)で保存
  2. 上の ▶ 実行 ボタンを押す
  3. 画面下に「実行ログ」が開き hello! と表示されれば成功

読み方:function=ファンクション / myFunction=マイファンクション / Logger.log=ロガー・ログ

動いた。 ここがスタート地点。

Part 1 / GASとは

関数(function)って何のため?

関数 = 「やりたいことを、ひとまとまりにして名前をつけたもの」

レシピで言う「カレーを作る」みたいな、手順のかたまり。一度書けば▶ボタンでもトリガーでも呼び出せる。

function 関数名() {
  // ここに処理を書く
}
function / ファンクション
「処理のまとまり」の宣言
関数名
自由につけてOK(英数字)
{ } の中 / ブレース
実際にやること
Part 1 / GASとは

行末の ; って何?

セミコロン ; = 「この1行はここで終わり」 の目印。

文章の句点「。」と同じ感覚。GAS(JavaScript)は 命令の文末ごと にこれを付ける。書き忘れても動くことが多いけど、付けておくのが慣習。

const sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["hello"]);
sheet.appendRow(["world"]);
付ける場所
命令の終わり(行の末尾)。function{ } のあとには付けない
困ったら
迷ったら付ける。エラーになりにくくなる安心パーツ
Part 1 / GASとは

インデント(字下げ)で読みやすく

{ } の中は スペース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。

PART 02

スプシを、
動かす。

SpreadsheetApp で、スプシにデータを書き込みます。

SECTION 02  ·  11 MIN
Part 2 / 前提知識

そもそも「スプレッドシート」とは

Googleが無料で配ってる、ブラウザで動くExcelみたいなもの。

使う場所
ブラウザだけでOK
インストール不要
料金
Googleアカウントがあれば
無料で使える
特徴
複数人で同時編集/
自動でクラウド保存

今日は、このスプレッドシートを「GASで自動で動かす」のがゴール。

Part 2 / スプレッドシートを動かす

スプシにアクセスする(今日の"おまじない")

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。慣れない画面ですが手順通り進めれば大丈夫です。

  1. 権限を確認 をクリック
  2. 自分のGoogleアカウントを選ぶ
  3. 「このアプリは Google で確認されていません」と出たら 詳細(プロジェクト名)に移動(安全ではないページ)
  4. 権限一覧を確認して 許可

この警告は「Googleが事前審査していない、自作スクリプト」だから出るもの。
自分が書いたものを自分のアカウントに許可しているだけなので問題なし。

★ 成功体験 ②

データを書き込む

function writeData() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow(["kimura", "テスト", "完了"]);
}
  • 関数を宣言(名前は writeData)
  • 今のシートを取得
  • シートに1行追加
  • 関数の終わり

appendRow(["A", "B", "C"]) はシートの一番下の行に追加する。
実行 → スプシに行が追加される。

読み方:appendRow=アペンドロウ / writeData=ライトデータ

Part 2 / スプレッドシートを動かす

自由に書き換えてみる

sheet.appendRow(["自分の名前", "好きな食べ物", "今の気分"]);
  • 中身を自由に書き換えて再実行

配列 ["A", "B", "C"] の中身を、自由に書き換えるだけ。

⚠ ダブルクォーテーション " は消さないで!

書き換えるのは ""あいだの文字 だけ。クォートを消すとエラーです。

○ OK
["佐藤", "ラーメン", "眠い"]
✕ NG
[佐藤, ラーメン, 眠い]

2分タイム / それぞれ自分のデータを入れて実行してみてください。

PART 03

勝手に、
動かす。

「触らなくても動く」って、GASではどう実現するのか。

SECTION 03  ·  7 MIN
Part 3 / 自動実行

トリガーとは

トリガー = 「このタイミングで自動で動かす」設定。

時間ベース
毎日 朝9時に実行
スプシ
スプシを開いた時に実行
フォーム
フォーム送信時に実行

コードを書いたら、あとは放っておける。

注意:設定した瞬間に動くわけじゃないです。Google側の都合で数分かかることもあるので、すぐ反映されなくても焦らないでください。

Part 3 / 自動実行

GASでこんなこともできる

今日触るのは「スプシに書き込み + トリガー」だけ。
でもGASは、Googleの他のサービスや、外のサービスとも全部つながります。

— Gmail
条件に合うメールを
自動で振り分け/自動返信
— カレンダー
スプシの予定一覧から
カレンダーにまとめて登録
— フォーム
送信されたら自動で
メッセージで通知
— AI連携
GeminiやChatGPTに
文章を自動で書いてもらう
— Webアプリ
自分専用のツールを作って
URLで誰でも使えるようにする
— LINE / Slack
LINEやSlackとも
メッセージのやり取り

全部、今日と同じ function 〜 () { ... } の形で書ける。

Part 3 / kimuraのGAS実例

おふざけアプリも、実務で使えるやつも — GASで作った事例集

別タブで開く ↗
PART 04

作って、
動かす。

日時ログ記録ツールを、ここから一気に完成まで。コード→実行→トリガー設定。

SECTION 04  ·  15 MIN
Part 4 / ハンズオン

今日作るもの:日時ログ記録ツール

実行するたびに 日付・時刻がスプシに自動で記録。トリガー設定で「毎時1行」の自動日誌になります。

— このツールができること
  • 実行ごとに日付・時刻をスプシに自動記録
  • トリガーで毎時自動実行 → 自動日誌に成長

たった10行ほどのGASで動く、シンプルだけど実用的なツール。

— こんな使い方
  • 作業ログ・勤怠の記録
  • 体調・気分・体重のメモ
  • 「日時付きで残したいもの」何でも

手書きやメモアプリで続かなかった人ほど、自動化が効きます。

Part 4 / ハンズオン

完成コード

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'),
    '自動記録'
  ]);
}
  • 関数を宣言(recordLog)
  • 今のシートを取得
  • 今の日時を取得
  • シートに1行追加
  • 日付を整形
  • 時刻を整形
  • 固定文字「自動記録」
  • 中身の終わり
  • 関数の終わり
Utilities.formatDate() / ユーティリティーズ・フォーマットデート
「日付をきれいにする部品」。今日は中身を理解しなくてOK
'Asia/Tokyo' / エイジア・トーキョー
日本時間で出すための指定

このまま貼れば動きます。"なぜ動くか"より"動かす"を優先。

Part 4 / ハンズオン

一緒に入力 → 実行 → トリガー

  1. コードを入力(またはZoomチャットのスライドURLからコピー)
  2. ▶ 実行 → スプシに記録されることを確認(初回は認証)
  3. トリガー設定(1分おき で動作確認)
  4. 1〜数分待って自動追加されたら完成。本番運用は後で毎時に変更してOK
— カスタマイズ

'自動記録' の部分を、
自分のメモに書き換えてみよう。

— 動かなかった時は

Zoomチャットのスライドから完成コードをコピーして、もう一度貼り直してみてください。

Part 4 / ハンズオン

トリガーの設定手順

  1. 左メニューの (トリガー)アイコン
  2. 右下の + トリガーを追加
  3. 実行する関数:recordLog を選ぶ
  4. イベントのソース:時間主導型
  5. タイプ:分ベースのタイマー1分おき(動作確認用)
  6. 保存 → 認証ダイアログが出たら同じ要領で許可
— 設定のコツ

まず 「1分おき」で動くことを確認。
動いたら最後に 「時間ベースのタイマー → 毎時」 に変更するのが安心。

— 確認ポイント

保存後、トリガー一覧に新しい行が追加される。
1〜数分後にスプシへ自動で行が増えれば成功。

★ 成功体験 ③

予約できた

保存ボタンを押せた瞬間に、あなたはGASに「予約」を入れた。

このあと1〜数分以内に、設定した間隔で
スプシに自動でデータが追加されていく(はず)。
自分では何もしていないのに動いている。

注意:Google側の都合で数分遅れることがあります。焦らずQ&Aタイムまで待ってみてください。反映されなかった人は、Zoomチャットのスライドから完成コードをコピーして貼り直すと動くことが多いです。

— ここまでで成功体験 3つ 完走
  • ① 最初のコード(hello! をログに出す)
  • ② スプシに自動で書き込む(appendRow
  • ③ 予約できた(トリガーで自動実行)
— このあと起きること
NOW
保存ボタンを押した
トリガーがGAS側に登録される
+1〜5 MIN
スプシに1行、自動で追加
手を触れていないのに動く
LOOP
設定間隔で繰り返し
寝てる間も、外出中も
未来チラ見せ

AIで拡張するとこうなる

このツールに「メール通知」も足せます。
→ ライブで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 に貼り付け
Gemini を開く →

①をまるごとコピーして、Gemini の入力欄に貼って送るだけ。返ってきたコードをエディタに上書きして実行すれば、メール通知付きに進化します。

※ Chrome タブの右上「Geminiに相談」ボタンが表示されている人は、そこから開いてもOK。今見ているページの内容を渡せます。

今日は理解しなくてOK。"こういうことが今日の延長でできるんだ" だけ持ち帰ってください。Gmail通知は追加承認画面が出るので、ライブで一緒にやって途中で間に合わなくなったら、家で続きをどうぞ。

Part 4 / 後片付け

不要になったら止める

トリガーは 設定しっぱなしだと回り続けます。 特にメール通知を足したあとは、忘れずに停止を。

⚠ なぜ止める?

GASのメール通知は、個人用Googleアカウントだと1日100宛先まで。「100通」ではなく「100宛先」なので、To / CC / BCC が複数あるとその分だけ消費されます。

毎時トリガーでメール通知を放置すると、気づかないうちに上限到達 → しばらく通知が送れなくなることも。テスト後は不要なトリガーを必ず停止しておくのが安全。

— トリガー削除の手順
STEP 01
左メニューの (トリガー)アイコン
STEP 02
該当トリガー右側の (3点メニュー)
STEP 03
トリガーを削除 をクリック

関数自体は残ります。「自動で動く設定だけ外す」イメージ。

まとめ

今日できたこと、次の一手

— ✓ 今日できたこと
  • GASを初めて動かした
  • スプシにデータを自動書き込みした
  • トリガーで「勝手に動く」仕組みを作った
— → これからの一手
  • GASに慣れる(コードの文字や列、シート名を変えて遊ぶ)
  • 毎日自動で1行追加(トリガーを「毎朝の時間」に設定)
  • 「もし〜だったら」を書く(if で条件分岐)
  • フォーム連携(Googleフォームと組み合わせる入口)

今日の60分、本当にありがとうございました。

深くお辞儀するkimura
持ち帰り用

リンク集

— G-LABO(無料コミュニティ・運営:kimura × 株式会社善)
— kimura の発信