「GASで自動化はできたけど、実行完了のたびにalertのOKボタンを押すのが面倒…」
「ボタンを押しても本当に処理されたか分からなくて不安…」
そんな悩みを抱えていませんか?
その課題、ユーザーの操作を妨げずに完了通知やエラーメッセージをスマートに表示できるtoastメソッドが解決します。
この記事では、toastの基本的な使い方から、alertとの明確な違い、さらには明日からすぐに使える業務改善の活用テクニックまで、豊富なコード例と共に徹底解説。
「ただ動く」から「使いやすい」ツールへ、あなたのGASをレベルアップさせましょう。
GASのtoastとは?ユーザーの操作を邪魔しないスマートな通知機能
スプレッドシートの右下にふわっと表示されるメッセージのこと
GASにおけるtoastとは、SpreadsheetApp.getUi().toast()というコードで実行できる、スプレッドシートの画面右下に小さなメッセージボックスを一定時間表示する機能です。
スクリプトが正常に完了したことや、処理の状況などをユーザーに知らせるために使われます。
主張しすぎず、それでいて確実に情報を伝えてくれる便利な通知機能です。

ユーザーはOKボタンを押す必要がないのが最大の特徴
toastの最大のメリットは、alertと違い、ユーザーが「OK」ボタンなどをクリックする必要がない点です。
表示されたメッセージは、設定した時間が経過すると自動的に消えていきます。
これにより、ユーザーは通知を確認しつつも、スプレッドシート上の他のセルを選択したり、値を入力したりといった作業を中断することなく続けられます。
【図解ポイント】toastが表示される位置と見た目のイメージ
toastで表示されるメッセージは、常にデスクトップ版Googleスプレッドシートの右下隅に表示されます。
タイトルを設定した場合は2行、メッセージのみの場合は1行で表示されるのが基本です。

【徹底比較】alertとの違いは?「処理を止めるか、止めないか」が重要
GASで通知機能というとalertを思い浮かべる方も多いでしょう。
このtoastとalertの違いを正確に理解することが、より良いツールを作るための第一歩です。
機能比較表:toast vs alert
まずは、両者の機能の違いを表でシンプルに比較してみましょう。
| 機能 | toast | alert |
|---|---|---|
| 表示場所 | シート右下 | シート中央 |
| 処理の停止 | しない | する |
| ボタン | なし | OK (または はい/いいえ) |
| 実装の手軽さ | ◎ 簡単 | ◎ 簡単 |
| 主な用途 | 状況報告、完了通知 | ユーザーの確認、注意喚起 |
補足:alertではYES/NOの選択も可能です
ちなみにalertでは、ui.ButtonSet.YES_NOを指定することで、ユーザーに「はい」「いいえ」の選択をさせることもできます。alertのより詳しい使い方については、以下の記事や公式ドキュメントも参考にしてください。
決定的な違い:後続のスクリプト処理をブロックしない
表の中でも最も重要な違いが「処理の停止」です。
alert:
メッセージを表示すると、ユーザーが「OK」ボタンを押すまで、後続のすべてのスクリプトが停止します。
これは「モーダルダイアログ」と呼ばれる挙動です。toast:
メッセージを表示しても、後続のスクリプトは停止せずに処理を続けます。
こちらは「モードレス」な挙動と言えます。
VBAのMsgBoxに慣れている方はalertの挙動に馴染みがあるかもしれませんが、GASではユーザーの作業を妨げないtoastが好まれる場面が多くあります。
こんな時はtoast、こんな時はalert!業務シーン別使い分けガイド
どちらの機能が優れているというわけではなく、目的に応じて使い分けることが肝心です。
toastが適しているシーン:
- スクリプトの実行完了を知らせたい時 (例: 「データの転記が完了しました。」)
- 実行に時間がかかる処理の状況を伝えたい時 (例: 「集計処理を開始しました…」)
- ユーザーの操作を妨げたくない、ちょっとしたフィードバック
alertが適しているシーン:
- ユーザーに重要な確認を求め、処理を分岐させたい時 (例: 「データを削除します。よろしいですか?」)
- 処理を続ける上で致命的なエラーが発生したことを伝え、確実に確認させたい時
- ユーザーからの入力を受け付けたい時 (
prompt)
【基本編】コピペでOK!toastメソッドの基本的な使い方3パターン
toastの基本的な使い方は非常に簡単です。
まずは、toastメソッドが受け取る3つの引数(ひきすう:メソッドに渡す情報のこと)の仕様を確認しましょう。
| 引数名 | 型 | 必須/任意 | 省略した場合の挙動 |
|---|---|---|---|
message | 文字列 | 必須 | – |
title | 文字列 | 任意 | タイトルなしで表示 |
timeoutSeconds | 数値 | 任意 | デフォルトの時間(通常は数秒程度)表示 |
ここでは、コピー&ペーストしてすぐに試せる3つの基本パターンをご紹介します。
まずは覚えたい!toastメソッドの基本構文
SpreadsheetApp.getActiveSpreadsheet().toast(message, title, timeoutSeconds);
message(必須): 表示したいメッセージ本文(文字列)title(任意): 表示したいタイトル(文字列)timeoutSeconds(任意): メッセージの表示時間(数値、単位は秒)
パターン1:メッセージだけを表示する(toast(message))
function showSimpleToast() {
SpreadsheetApp.getActiveSpreadsheet().toast('請求書の作成が完了しました。');
}

パターン2:タイトルを付けて情報を整理する(toast(message, title))
function showToastWithTitle() {
SpreadsheetApp.getActiveSpreadsheet().toast('請求書No.2025-08-01 を作成しました。', '【処理完了】');
}

パターン3:表示時間を秒単位で調整する(toast(message, title, timeoutSeconds))
function showToastWithTimeout() {
// メッセージを10秒間表示する
SpreadsheetApp.getActiveSpreadsheet().toast('月末の集計処理には時間がかかります。', '処理開始のお知らせ', 10);
}
【応用・差別化編】実務で差がつく!toast活用シナリオ4選
基本をマスターしたら、次は実務で役立つ応用テクニックです。toastを使いこなすことで、あなたのツールは格段に使いやすくなります。
ケース1《UX改善》:処理状況を伝える親切なフィードバック
function processData() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
ss.toast('データの処理を開始しました...', '処理中', 5);
Utilities.sleep(3000); // 3秒待つ(処理のダミー)
ss.toast('データの処理が完了しました!', '完了');
}
ケース2《デバッグ》:エラー発生時に内容を通知して早期解決
try...catch構文と組み合わせれば、スクリプト実行中にエラーが発生した場合に、その内容をtoastで表示できます。
開発中のデバッグはもちろん、運用中の利用者へのエラー通知にも役立ちます。
function reliableProcess() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
try {
// === エラーが起こる可能性のある処理の例 ===
// 例1: 存在しないシートを取得しようとする
const sheet = ss.getSheetByName('存在しないシート');
if (!sheet) {
// 意図的にエラーを発生させる
throw new Error('指定されたシートが見つかりません。');
}
// 例2: 特定のセルに値がない場合にエラーとする
const value = sheet.getRange('A1').getValue();
if (value === '') {
throw new Error('A1セルに値が入力されていません。');
}
// ====================================
ss.toast('処理は正常に完了しました。', '成功');
} catch (e) {
// エラーが発生した場合、catchブロックの中が実行される
console.error(e); // 念のためログにもエラー内容を出力
// ユーザーにエラー内容をtoastで通知
ss.toast('エラーが発生しました。詳細は管理者にご確認ください。エラー内容:' + e.message, '【エラー発生】', -1);
}
}
ポイント:
上記のコード例では、if文を使って特定の条件(シートが見つからない、など)を判定しています。
getSheetByNameのようなメソッドは、シートが見つからなくてもエラーで処理を中断せず、null(何もない)という値を返すだけです。
そのため、if文でその状態を検知し、throw new Error()を使って意図的にエラーを発生させることで、catchブロックに処理を移行させています。
ケース3《長時間処理》:ユーザーを不安にさせない進捗通知
function longProcessWithProgress() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const totalRows = 100;
for (let i = 1; i <= totalRows; i++) {
Utilities.sleep(100); // 0.1秒の処理をシミュレート
if (i % 20 === 0) {
const progress = Math.round((i / totalRows) * 100);
ss.toast(`処理を実行中... (${progress}%)`, `処理中: ${i}/${totalRows}件`, 3);
}
}
ss.toast('すべての処理が完了しました。', '完了');
}
ケース4《実行確認》:ボタンクリック時の「無反応」を防ぐ即時応答
function onButtonClick() {
SpreadsheetApp.getActiveSpreadsheet().toast('コマンドを実行します。', '受付完了', 2);
// この後にメインの処理を記述
}
【要注意】意外な落とし穴!toastが表示されない原因と対処法
便利で手軽なtoastですが、特定の条件下では表示されないことがあります。
初心者がハマりがちな原因と対処法を知っておきましょう。
原因①:onOpenなどの単純トリガーから直接実行している
スプレッドシートを開いた時に自動実行されるonOpen(e)のような「単純トリガー」の内部でtoastを実行しても、メッセージは表示されません。
これは、単純トリガーが実行される際の権限に制限があるためです。
【解決策】関数の役割を分ける
この問題を解決するポイントは、処理の役割を2つの関数にハッキリと分けることです。
- onOpen関数の役割:
ここではtoastを実行しません。
スプレッドシートが開かれたときに「カスタムメニューを追加する」という処理だけを担当します。 - メニューから呼ばれる関数の役割:
ユーザーがメニューをクリックした時に、toastを表示する処理を実行します。
こちらは問題なく動作します。
コード例:
// スプレッドシートが開かれたときに実行される関数
function onOpen(e) {
// ここではメニューを作るだけ
SpreadsheetApp.getUi()
.createMenu('カスタム通知')
.addItem('ようこそ', 'showWelcomeToast') // クリックで 'showWelcomeToast' を呼ぶ
.addToUi();
}
// カスタムメニューから呼び出される関数
function showWelcomeToast() {
// こちらの関数でtoastを実行する
SpreadsheetApp.getActiveSpreadsheet().toast('このスプレッドシートへようこそ!');
}
このように、onOpenでは直接toastを呼ばずに、ワンクッション置くことでエラーを回避できます。
カスタムメニューのより詳しい作成方法については、以下の記事で解説しています。
原因②:カスタムメニュー実行時の権限を許可していない
初めてカスタムメニューからスクリプトを実行する際には、アカウントによる「承認」が求められます。
この承認を行わないと、スクリプトは実行されず、toastも表示されません。
必ず承認プロセスを完了させてください。
この承認プロセスの詳しい手順や、表示される画面については、以下の記事で詳しく解説しています。
原因③:時間駆動(時限式)トリガーから実行している
毎日午前9時に自動実行する、といった「時間駆動トリガー」からスクリプトを実行した場合も、単純トリガーと同様にユーザーインターフェース(UI)を操作する権限がないため、toastは表示されません。
toastは、スクリプトがスプレッドシートの画面(UI)と紐付いた状態で実行された場合にのみ表示できる機能、と覚えておきましょう。
【コラム】なぜトリガー実行では動かない?GASのUIと実行コンテキスト
少し専門的な話になりますが、GASではスクリプトが「いつ、どこから」実行されたかによって、できること・できないことが決まっています。
これを実行コンテキストと呼びます。
スプレッドシートを開いただけのonOpenや、時間で自動実行されるコンテキストでは、ユーザーインターフェース(UI)に干渉するtoastやalertの実行権限が与えられていない、とイメージすると分かりやすいでしょう。
FAQ(よくある質問)
- Q表示時間は最大で何秒まで設定できますか?
- A
公式ドキュメントに上限の明確な記載はありませんが、一般的には30秒程度が実用上の上限と考えられます。
第3引数timeoutSecondsに負の数(例: -1)を指定すると、ユーザーが閉じるまで永続的に表示させることも可能です。
- Qメッセージ内で改行はできますか?
- A
はい、できます。改行したい場所に改行コード\nを挿入してください。
SpreadsheetApp.getActiveSpreadsheet().toast('1行目です。\n2行目です。', '改行テスト');
- Qスマートフォン版のスプレッドシートアプリでも表示されますか?
- A
いいえ、表示されません。
toastメソッドは、デスクトップ版のブラウザでのみ機能します。
- Qメッセージの文字色や背景色を変えることはできますか?
- A
いいえ、できません。toastは非常にシンプルな通知機能であり、CSSやHTMLによるデザインのカスタマイズはサポートされていません。
よりリッチなUIを実装したい場合は、「HTMLサービス」の利用を検討する必要があります。
まとめ|toastを使いこなし、ワンランク上の業務改善ツールを目指そう
今回は、GASのtoastメソッドについて、基本的な使い方からalertとの違い、そして実務で役立つ応用テクニックまで詳しく解説しました。
- toastはユーザーの操作を妨げないスマートな通知機能
- alertとの最大の違いは「処理を止めない」こと
- 基本の3引数 (message, title, timeoutSeconds) を覚えよう
- 応用編のテクニックでツールのUX(使いやすさ)は劇的に向上する
- トリガーからの直接呼び出しはできない点に注意が必要
alertの「OK」ボタンを押す日々にさよならし、toastを効果的に使って、あなた自身やチームのメンバーにとって本当に「使いやすい」業務改善ツールを作成してみてください。
この記事が、その一助となれば幸いです。







