Slackとスプレッドシートを連携!GASで簡単にメッセージを書き込む方法

僕は今、Slackで受け取ったメッセージをスプレッドシートに書き込む方法を探しているんです。だけど、GASって何だか難しそうで…。
猫男
猫男
catman
catman
なるほど、そこはcatmanに任せておけ。GASでSlackとスプレッドシートを簡単に連携させる手順をレクチャーしよう。

Slack APIの設定から始めよう

GASでSlackとスプレッドシートを連携するには、まずSlack APIの設定を行います。

Slack APIトークンを取得

Slack APIを使ってメッセージを取得するためには、APIトークンが必要です。発行するには以下のステップを踏みます。

1. Slackのアプリディレクトリで新規アプリを作成します。

2. OAuth & Permissionsで必要なスコープを追加します(例: channels:read, chat:write)。

3. トークンをコピーして保存しておきます。

Slack APIをGASで呼び出す

次にGASを使ってSlack APIを呼び出す方法を見てみましょう。

function fetchSlackMessage() {
  var token = "あなたのSlackトークン";
  var response = UrlFetchApp.fetch("https://slack.com/api/conversations.history?token=" + token + "&channel=チャンネルID");
  var data = JSON.parse(response.getContentText());
  return data.messages;
}

ここでは、Slack APIのconversations.historyエンドポイントにリクエストを送り、指定したチャンネルのメッセージを取得しています。

 

スプレッドシートにデータを書き込む

GASを使えば、取得したSlackのメッセージをスプレッドシートに書き込めます。

スプレッドシートへの書き込み

スプレッドシートにメッセージを書き込む簡単なスクリプトをご紹介します。

function writeMessagesToSheet(messages) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  messages.forEach(function(message, index) {
    sheet.getRange(index + 1, 1).setValue(message.text);
  });
}

このスクリプトでは、GASのSpreadsheetAppを使い、スプレッドシートの指定した範囲にメッセージを順に書き込んでいます。

 

Slackとスプレッドシートを連携させる

いよいよSlackからメッセージを取得し、スプレッドシートに書き込むフローを完成させます。

全体のフローを組み立てる

Slackからメッセージを取得してスプレッドシートに書き込むフローは次のようになります。

function main() {
  var messages = fetchSlackMessage();
  writeMessagesToSheet(messages);
}

このように、main関数を作成することで、Slackとスプレッドシートをひとつのスクリプト内で連携させることができます。

わあ、意外と簡単なんですね!これでSlackのメッセージをスプレッドシートに書き込めるようになりますね。
猫男
猫男
catman
catman
そのとおりさ。これでGASの力をもっと活用して、仕事が効率化されるだろう。

練習問題:GASでエラーハンドリングを追加しよう

このスクリプトにエラーハンドリングを追加して、APIコールやスプレッドシートへの書き込みが失敗した場合に対応できるようにしましょう。

  

解答・解説

以下のスクリプトは、エラーハンドリングを含んでいます。

function mainWithTryCatch() {
  try {
    var messages = fetchSlackMessage();
    if (messages && messages.length > 0) {
      writeMessagesToSheet(messages);
    } else {
      Logger.log("No messages to write.");
    }
  } catch (error) {
    Logger.log("Error occurred: " + error.message);
  }
}

try ブロック内で正常な処理を行います。何か問題が起きたときには catch ブロックでエラーメッセージをログに記録します。

これにより、APIコールが失敗した場合などにスクリプトが止まらずエラー内容を確認できる利点があります。

すごい、これで何か問題があったときに原因を見つけやすくなりますね!
猫男
猫男
catman
catman
そうさ。エラーハンドリングをしっかりと組み込んで、様々な状況に対応できるスクリプトを目指すのだ。

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。