Chatworkのメンバー一覧は、参照権限のあるルームからAPIで取得できます。
改訂版では、現行のApps Scriptで動かないfor each構文を置き換え、取得に成功してから新しいシートへ出力します。
架空の2名で出力形式を確かめる
通知連携の練習コードとローカルテストをダウンロード(ZIP)。
各article-番号.jsを別々のApps Scriptプロジェクトへ保存します。
スプレッドシートの「拡張機能」からApps Scriptを開き、article-4956.jsを保存します。
まずdemoMembersを実行すると、練習 太郎と練習 花子の名前・IDを配列として表示し、API呼び出しやシートの変更は行いません。
function memberRows_(members) {
if (!Array.isArray(members)) throw new Error('メンバー配列ではありません');
return members.map(m => {
if (!Number.isSafeInteger(m.account_id) || m.account_id <= 0 || typeof m.name !== 'string') throw new Error('メンバー形式が違います');
// シートの数式として解釈されないよう文字列にする。
const name = /^\s*[=+@-]/.test(m.name) ? "'" + m.name : m.name;
return [name, String(m.account_id)];
});
}
function demoMembers() {
const rows = memberRows_([{account_id:101,name:'練習 太郎'},{account_id:102,name:'練習 花子'}]);
Logger.log(JSON.stringify(rows));
return rows;
}
function getRooms() {
const properties = PropertiesService.getScriptProperties();
const room = properties.getProperty('CHATWORK_ROOM_ID');
const token = properties.getProperty('CHATWORK_API_TOKEN');
if (!room || !/^\d+$/.test(room) || !token) throw new Error('ルームIDとトークンを設定してください');
const book = SpreadsheetApp.getActiveSpreadsheet();
if (!book) throw new Error('スプレッドシートに紐づけたプロジェクトで実行してください');
const response = UrlFetchApp.fetch('https://api.chatwork.com/v2/rooms/' + room + '/members', {
method:'get',headers:{'X-ChatworkToken':token},muteHttpExceptions:true
});
if (response.getResponseCode() !== 200) throw new Error('Chatwork HTTP ' + response.getResponseCode());
const rows = memberRows_(JSON.parse(response.getContentText()));
// 既存のシートは上書きしない。取得が成功してから毎回新規作成。
const sheet = book.insertSheet();
sheet.getRange(1,1,1,2).setValues([['名前','アカウントID']]);
if (rows.length) {
sheet.getRange(2,2,rows.length,1).setNumberFormat('@');
sheet.getRange(2,1,rows.length,2).setValues(rows);
}
return rows.length;
}
取得成功と失敗の確認結果
| ローカル模擬テストの条件 | 確認した結果 |
|---|---|
| 正常なメンバー配列 | GETを1回行い、ヘッダーと2列の一覧を新規シートへ書く |
| メンバーが0件 | ヘッダーだけを作り、0行の範囲指定をしない |
| 401・403・429、JSONでない応答 | 既存シートを変更せずエラーで止まる |
| 数式に見える名前 | 文字列として書くための先頭記号を付ける |
自分のルームから取得する設定
プロジェクトの設定でスクリプトプロパティにCHATWORK_API_TOKENと数字のCHATWORK_ROOM_IDを設定し、getRoomsを手動実行します。
自分が参照できるルームだけを対象にし、トークンを本文や公開コードへ書き込みません。
成功すると、同じスプレッドシートに新しいシートを作ります。
繰り返し実行しても、旧シートへ行を追加したり上書きしたりしないため、取得日とルームをシート名に付けて区別します。
401は認証、403は権限、429は利用制限を確認し、連続再試行しません。
HTTPの成功後も、取得件数と実際のルームの一覧を照合します。
現在のエンドポイントと応答条件はChatworkのメンバー取得仕様で確認しました。
メンバーの追加・新規チャット作成・通知送信はこのコードでは行いません。
戻す必要があれば、保存した旧コードを使い、以前のシートを参照します。
実メンバー取得、Googleの認可、実シートへの書き込みは今回未検証で、実際の氏名やIDを記事へ掲載していません。
練習コードの検証範囲
2026年10月2日に、Node.jsでGoogle Apps Script・HTTP応答・シート・ロック・保存状態を模した55ケースを確認しました。
ZIPを新しいフォルダーへ展開し、node test_integration.cjsでも同じ結果を確認できます。
実際のGoogle認可、APIへの投稿、シート書き込み、時間主導トリガー、受信側の通知音は未検証です。
ローカルでの成功を、実サービスでの配信成功と扱わないでください。
関連記事





