
Googleスプレッドシートの更新をきっかけに、Chatworkへ自動で通知する方法を解説します。
本記事・動画では、Google Apps Script(GAS)を使って
・セル編集時にChatworkへ通知
・特定シート/特定行のみ通知
・業務で使える実践的な構成
をステップごとに紹介します。
「更新の見逃しを防ぎたい」
「手動連絡をやめて業務を自動化したい」
という方におすすめの内容です。
▼ この記事・動画でできること
・スプレッドシート更新をトリガーに通知
・Chatwork APIの基本的な使い方
・GASトリガー設定のポイント
▼ こんな方におすすめ
・業務でスプレッドシートを使っている方
・Chatworkで情報共有しているチーム
・GASで業務自動化を始めたい初心者の方
導入と設定の3ステップ
1. Chatwork APIトークンの取得
Chatwork画面右上のユーザーアイコンから「サービス連携」 > 「API設定」へ進み、APIトークンを発行します。取得したトークンを、スクリプト内のCHATWORK_API_TOKENの値として設定してください。
APIトークン発行ページはこちら

2. ルームIDの確認と設定

通知を送りたいChatworkのルームを開き、ブラウザのURLを確認します。末尾にある#!rid1234567の数字部分がルームIDです。このIDをスクリプト内のCHATWORK_ROOM_IDS配列に設定します。複数ある場合はカンマで区切って追加してください。(例: ['1234567', '8901234'])
3. スプレッドシートにコードを導入(GASに貼り付け)
- 対象のスプレッドシートを開く
- メニュー 「拡張機能」→「Apps Script」
- プロジェクトが開いたら、左の 「コード.gs」(または新規ファイル)にあなたのコードを貼り付け
- 保存(Ctrl+S)

4.ChatworkのAPI・ルームID情報をGAS側にいれる。
下記のコード内のCHATWORK_TOKENとCHATWORK_ROOM_ID部分を書き換えます。
- 書き換え項目
CHATWORK_TOKEN= (APIトークン)CHATWORK_ROOM_ID= (通知したいルームID)
1つのルームに通知すればいい場合は、’YOUR_ROOM_ID_2’を削除してください。
コードはこちら
/**
* 設定項目
* ChatworkのAPIトークンと通知先のルームIDを設定してください。
*/
const CHATWORK_API_TOKEN = 'YOUR_CHATWORK_API_TOKEN'; // ここにAPIトークンを入力
/**
* 通知先のルームIDを配列で指定してください
* 例: ['1234567', '8901234']
*/
const CHATWORK_ROOM_IDS = ['YOUR_ROOM_ID_1', 'YOUR_ROOM_ID_2'];
/**
* 通知対象とするシート名を指定する場合(空配列 [] の場合はすべてのシートが対象)
* 例: ['シート1', '重要データ']
*/
const TARGET_SHEETS = [];
/**
* スプレッドシートが編集されたときに実行される関数
*/
function onSheetEdit(e) {
// 手動実行(引数 e がない場合)は何もしない
if (!e) {
console.log('この関数はスプレッドシートの編集時に自動で実行されます。');
return;
}
const range = e.range;
const sheet = e.source.getActiveSheet();
const sheetName = sheet.getName();
// 特定のシートのみを対象にする場合の判定
if (TARGET_SHEETS.length > 0 && TARGET_SHEETS.indexOf(sheetName) === -1) {
return;
}
const row = range.getRow();
// A列, B列, C列の値を同じ行から取得
const rowData = sheet.getRange(row, 1, 1, 3).getValues()[0];
const valA = rowData[0];
const valB = rowData[1];
const valC = rowData[2];
/**
* 【修正ポイント】
* A列、B列、C列のいずれかが空の場合は通知をスキップする
*/
if (valA === '' || valB === '' || valC === '') {
console.log('A, B, C列のすべてが埋まっていないため、通知をスキップしました。');
return;
}
const ssUrl = e.source.getUrl();
const user = Session.getActiveUser().getEmail();
const newValue = e.value;
// 通知メッセージの作成
let message = '■スプレッドシートが更新されました(全項目入力完了)\n';
message += 'URL: ' + ssUrl + '\n';
message += 'シート名: ' + sheetName + '\n';
message += '編集セル: ' + range.getA1Notation() + '\n';
message += '今回の入力値: ' + (newValue || range.getValue() || '(入力)') + '\n\n';
message += '【行のデータ】\n';
message += 'A列: ' + valA + '\n';
message += 'B列: ' + valB + '\n';
message += 'C列: ' + valC + '\n\n';
message += '更新者: ' + user;
// 全てのルームへ送信
sendToChatwork(message);
}
/**
* Chatwork APIを叩いてメッセージを送信する(複数ルーム対応)
*/
function sendToChatwork(body) {
if (!body) return;
CHATWORK_ROOM_IDS.forEach(roomId => {
const url = 'https://api.chatwork.com/v2/rooms/' + roomId + '/messages';
const options = {
'method': 'post',
'headers': {
'X-ChatworkToken': CHATWORK_API_TOKEN
},
'payload': {
'body': body
},
'muteHttpExceptions': true
};
try {
const response = UrlFetchApp.fetch(url, options);
const responseCode = response.getResponseCode();
if (responseCode !== 200) {
console.error('Room ID: ' + roomId + ' Error: ' + response.getContentText());
} else {
console.log('Room ID: ' + roomId + ' Success');
}
} catch (error) {
console.error('Fetch Error (Room ID: ' + roomId + '): ' + error.toString());
}
});
}
/**
* テスト送信用の関数
*/
function testNotification() {
sendToChatwork('スプレッドシートからのテスト通知です。');
}
5. GASの「トリガー」を設定
このスクリプトを自動で動かすための重要な設定です。
◦ スプレッドシートの拡張機能から、クリックします。
◦ GASエディタの左側にある時計のアイコン(「トリガー」)をクリックします。
◦ 右下の「トリガーを追加」ボタンを押します。
◦ 実行する関数を選択: onSheetEdit を選びます。
◦ イベントの種類を選択: 編集時 を選びます。
◦ 「保存」をクリックします。初回保存時にはGoogleアカウントへのアクセス許可を求められるので、承認してください。
これで設定は完了です。スプレッドシートのセルを編集すると、指定したChatworkルームに自動で通知が届くようになります。




6. 仕様について
1.行を削除したりしても通知が行ってしまう問題の解決
「値が入力された時のみ」通知が飛ぶように、条件分岐を追加しました。
具体的には、編集されたセルの値が空(削除やクリア操作)である場合は、処理を中断するように設定しています。
修正内容の解説
- 空入力の判定:
if (!newValue && !range.getValue())という条件を追加しました。e.valueは単一のセルを編集した際の新しい値を保持しますが、削除した場合は空になります。- 貼り付け(ペースト)などで複数セルが更新された場合、
e.valueは undefined になるため、補完的にrange.getValue()をチェックして「本当に空かどうか」を判定しています。
- 通知のスキップ: データが消された(=セルが空になった)時は
returnして、それ以降の Chatwork 送信処理を実行しないようにしました。
これで、行を削除したり、セルの内容を消したりした際には通知が飛ばず、新しい情報が書き込まれた時だけ通知されるようになります。
2.「値が入力された通知の不要な項目の削除
通知時に[info][title]スプレッドシートが更新されました[/title] と、[info][title] [/title]が表示されてしまっていた。
コードから、Chatwork独自の枠組み表示([info] や [title] タグ)を削除し、シンプルなテキスト通知になるよう修正しました。
枠組みタグ(BBコード)を取り除き、先頭に「■」を付けるなどして見やすさを維持したプレーンテキスト形式に変更しました。これにより、Chatwork上での余計な装飾が表示されなくなります。
3.複数のチャットルームに同時通知したい
複数のチャットルーム(ルームID)へ同時に通知を送れるようにスクリプトを更新しました。
設定項目の CHATWORK_ROOM_IDS を配列形式(['ID1', 'ID2'])に変更し、ループ処理でそれぞれのルームへメッセージを飛ばすようにしています。
変更のポイント
CHATWORK_ROOM_IDS: 変数名を複数形にし、['ID1', 'ID2']のようにカンマ区切りで複数のIDを入力できるようにしました。sendToChatwork内のループ:forEachを使って、指定されたすべてのルームIDに対して順番にメッセージを送信します。
設定が完了したら、前回同様に testNotification を実行して、それぞれのチャットルームにメッセージが届くか確認してみてください。
4.スプレッドシートのURLも通知項目に入れたい
通知する内容は、 スプレッドシートのA列、B列、C列の内容だけでなく、シートURLも通知
通知内容にスプレッドシートのURLが含まれるよう、Canvasのコードを更新しました。
通知メッセージの冒頭に URL: [スプレッドシートのURL] が表示されるように変更しました。これにより、通知からすぐに該当のファイルへアクセスできるようになります。
5.A列を書いている途中で、通知され、B列を書いたらまた通知されてしまう問題の解決
A列、B列、C列のすべてに値が入力されたタイミングでのみ通知が飛ぶように、条件判定を追加しました。
この修正により、例えばA列だけを入力した段階では通知されず、最後にC列(あるいは足りなかった列)を入力して3つの項目が揃った瞬間に一度だけ通知が飛ぶようになります。
3つの列がすべて埋まった状態で行内のどこかを編集(あるいは最後に足りなかった列を入力)したときに通知が送られます。
if (valA === '' || valB === '' || valC === '') という条件を追加しました。
これにより、A列・B列・C列のうち1つでも未入力(空文字)がある場合は、Chatworkへの送信処理を行わずに終了します。
本シートは、ABC列のみの情報で事足りるためにこのようにしておりますので、DEF以降も項目が入っている場合は、 || valD === ''移行を追加してください。
