Googleフォームを使ってSlackチャンネルにメッセージを投稿する方法

Googleフォームを使って、Slackチャンネルにメッセージを投稿する方法のメモです。匿名投稿もできます。Google、Slack以外の第三者サイトを使わないので安心して使えると思います。

なお、手すきの時に諸々のメモ書きをここに残すことにしました。これまでいろいろなサイトに記事を書いては消しを繰り返してたのですが、最終的にどこに何があるかわからなくなるので、こちらに記事をためていくことにします(これもいつまで続くかですが)。手始めに少し前にQiitaに投稿した「Googleフォームを使ってSlackチャンネルに投稿する方法の記録」という記事をこちらに移動しています。

1. はじめに

実名に近い形で運用されているSlackでチャンネルを作ってもなかなか盛り上がらないのですが、匿名のSlidoだとそこそこ盛り上がる上、特に治安が悪いこともないので、Slackチャンネルに匿名投稿できる仕組みがあればもう少しSlackも盛り上がるのかなと思いました(N回目)。Slack上でやり取りしてもらえると後から見返しやすいという利点もあると思います(例えば一年後に同様のイベントをやるときに、当時の記録を見返しやすいのではと思います)。

この記事では備忘録を兼ねてGoogleフォームを使ってSlackに(匿名で)投稿する方法を記録として残しておきます。イメージとしてはSlack上で下記のような投稿をする方法になります。APIを使うだけなのでおそらく車輪の再発明的なものですが、まとめておくと役立つこともあろうかと思い書いておきます。

2. Slack側の設定

2.1. Slack Appの作成

まず、Slack Appを作成するために https://api.slack.com/apps にアクセスします。「Create New App」をクリックし、「From scratch」を選択すると「Name app & choose workspace」という名称のウインドウが出てきます。ここで、App Nameに適当な名前(例えばanonymous-test)を入れて、アプリを入れたいワークスペースを選択後、 「Create App」をクリックします。

続いて、下図のように、左側の一覧から 「OAuth & Permissions」を探して選択します。さらに出てきた画面をスクロールし、Scopesセクションを探します。

ScopesセクションにあるBot Token Scopesの下にある、 「Add an OAuth Scope」をクリックすると、アプリに与える権限を追加することができるので 「chat:write と「chat:write.customize」を選択します。下図は権限が追加された後の状態です。

さらに、同じページの上の方にある「Install to ワークスペース名」をクリックし、「許可する」をクリックします。成功すると、Bot User OAuth Tokenの欄に xoxb- からはじまるトークンが表示されます。後ほどこのトークンを使うのでコピーしておきます

2.2 Slackチャンネルの作成

既存のチャンネルを連携させることもできますが、ここでは下図のように投稿先のSlackチャンネルを新たに作ります。ここでは投稿テストという名前のチャンネルを作成してます。

作成したチャンネルに先ほど作成したアプリをインストールします。例えば、下図のようにSlackチャンネル上で /invite @anonymous-test と入力するとアプリをインストールできます。

最後に、Slackチャンネル名をクリックして表示されるチャンネル情報の一番下に書かれているチャンネルIDをコピーしておきます

3. Googleフォーム側の設定

3.1 Googleフォームの作成

続いてGoogleフォーム側の設定を行います。まず、Googleドライブから「+新規」をクリックし、Googleフォームを作ります。ここでは例として下記のようなフォームを作成します。

  • お名前:短文回答
  • アイコン:プルダウン(Slackの絵文字を列挙)
  • 投稿内容:長文回答(必須)

この例では、投稿時の名前とアイコンを選べるようにしていますが、選択肢を出さず、一律同じ名前、アイコンにする手もあると思います。また、アイコンの選択肢については、Slackに登録されている絵文字なら使えるのではないかと思います。なお、フォーム上のアイコンの選択肢の表示には改善の余地があります。

3.2 Google Apps Script (GAS) の記述

続いて、下図のように、作成したGoogleフォームの右上のメニューから「Apps Script」を選択し、GASエディタを開きます

エディタ上で以下のコードを記述します。これまでの手順でコピーしたBotトークン、投稿先のチャンネルIDの記述が必要になります。なお、コード作成にあたり、一部生成AIのコードを参考にしました(そのままでは動かなかったので修正してます)

function onFormSubmit(e) {
  // 2.1でコピーしたBotトークンをここに設定
  const SLACK_BOT_TOKEN = 'xoxb-xxxx';

  // 2.2でコピーした投稿先のチャンネルIDをここに設定 
  const SLACK_CHANNEL = 'xxxx'; 

  const formValues = e.response.getItemResponses();

  // Googleフォームの上から1つ目、2つ目、3つ目の入力内容を読み込む
  let name = formValues[0].getResponse(); 
  let icon = formValues[1].getResponse();
  let message = formValues[2].getResponse();

  // 設定されていない場合の値
  if (name.length == 0) { 
    name = 'だれか';
  }
  if (icon.length == 0) {
    icon = ':ghost:';
  }
  
  const payload = {
    channel: SLACK_CHANNEL,
    text: message,
    username: name,
    icon_emoji: icon,
  };

  // APIへのリクエストオプション
  const options = {
    'method': 'post',
    'headers': {
      'Authorization': 'Bearer ' + SLACK_BOT_TOKEN,
      'Content-Type': 'application/json; charset=utf-8'
    },
    'payload': JSON.stringify(payload)
  };
  
  // chat.postMessage APIエンドポイント
  const SLACK_API_URL = 'https://slack.com/api/chat.postMessage';
  
  try {
    UrlFetchApp.fetch(SLACK_API_URL, options);
  } catch (err) {
    Logger.log('Slack APIへの投稿に失敗しました: ' + err.toString());
  }
}

コードを入力後、左側のメニューからトリガーを選択した後、右下にある「トリガーを追加」をクリックします(下図)。

イベントの種類を選択を「フォーム送信時」に変更し「保存」をクリックします。他の設定はデフォルト値のままと思いますが、下図の通りです。

その後、Googleアカウントに対して許可を求められるので「Allow」をクリックします。また、必要であればプロジェクト名を変更します(プロジェクト名をクリックすると変更できます)。

3.3 Googleフォームの公開

作成したGoogleフォームの公開設定を行います。匿名で運用する場合は、Googleフォームの設定タブを開き、 メールアドレスを収集するの設定項目を「収集しない」にします(どのアカウントから投稿されたか記録を残しておきたい場合は「収集する」にします。この場合、Slackチャンネル上では誰が投稿したかわかりませんが、Googleフォームに記録が残ることになります)。

設定が終わったら、右上の「公開」ボタンをクリックし、回答者の欄から「管理」をクリックします。匿名で運用する場合は、回答者ビューを「リンクを知っている全員」として「完了」をクリックします(下図)。

最後に、「公開」をクリックします。

4. 動作確認

最後に動作確認をします。作成したGoogleフォームの公開ボタンを押し、回答者リンクを取得します。取得したリンクにアクセスしてテストの文字列を入力した後、「送信」をクリックします(下図)。Googleフォームをメールアドレスを収集しない設定とし、リンクを知っている全員が回答できるようにしている場合、シークレットウインドウでも回答できます。

下図のように、設定したSlackチャンネルにメッセージが投稿されていることを確認します。

最後に、Slackチャンネル上などでGoogleフォームの回答者リンクを伝えれば、Googleフォームの(匿名)投稿をSlackチャンネルに転送できる環境の完成となります。

5. おわりに

以上、(2025年12月時点での)Googleフォームの投稿をSlackチャンネルに転送する方法の記録でした。匿名投稿の用途以外にも、Slackチャンネル上でGoogleフォームの回答を関係者で共有したい時にも使えると思います。