3分でわかる!GASでGoogleフォームの質問データを取得する方法

GASでユーザーフォームの質問データを取得したいんだけど、どうやってやるんだろう?難しそう…
猫男
猫男
catman
catman
心配無用さ、catmanがGASでユーザーフォームから質問データを取得する方法をやさしく教えてやろう。

 

GASでGoogleフォームから質問データを取得する基本

Google Apps Script(GAS)を使えば、Googleフォーム本体に含まれるすべての質問データ(質問文や選択肢など)を取得することができる。

フォームの質問を取得する手順

  1. Googleフォームを開いて、URLからフォームIDを確認する
  2. GASエディタで新しいプロジェクトを作成し、以下のスクリプトを入力する

function getFormQuestions() {
  const form = FormApp.openById("フォームIDをここに");
  const items = form.getItems();

items.forEach(item => {
const title = item.getTitle();
Logger.log("質問: " + title);
});
} 

このスクリプトを実行することで、すべての質問文(タイトル)をログで確認できる。

選択肢のある質問を取得する

質問の種類によっては、選択肢を含むものもある。それらの選択肢も取得したい場合は、次のようにスクリプトを拡張しよう。


function getFormQuestionsAndChoices() {
  const form = FormApp.openById("フォームIDをここに");
  const items = form.getItems();

  items.forEach(item => {
    const title = item.getTitle();
    Logger.log("質問: " + title);

    if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) {
      const choices = item.asMultipleChoiceItem().getChoices();
      choices.forEach(choice => {
        Logger.log(" - 選択肢: " + choice.getValue());
      });
    }
  });
}

このスクリプトでは、選択肢のある質問について、それぞれの選択肢もログ出力している。

なるほど!フォームそのものから質問も選択肢も全部取得できるんだね!
猫男
猫男

フォーム送信時のイベントトリガー

フォームに回答が送信されたタイミングで自動的にスクリプトを実行するには、トリガーを設定する必要がある。

フォーム送信時に自動で処理を実行する手順

  1. GASエディタの時計アイコンをクリックして「トリガー」を開く
  2. “トリガーを追加” を選択し、関数名を選び「フォーム送信時」を指定する
  3. 保存して認証を許可する
catman
catman
これで新しい回答が来たときに、自動で質問情報を記録したり分析したりできるってわけだ。

まとめ:GASでGoogleフォームの質問を扱う

  • GASのFormAppを使えば、フォーム本体から質問文を取得できる
  • 選択肢のある質問にはgetChoices()を使うことで選択肢も取得可能
  • フォーム送信時のトリガーを使えば、リアルタイムで自動処理が可能
catmanのおかげで、フォームの質問内容をちゃんと活用できる気がしてきたよ!ありがとう!
猫男
猫男

 

練習問題

Googleフォームに含まれるすべての質問をログに出力し、選択肢を持つ質問タイプ(複数選択・チェックボックス・リストなど)にはその選択肢も一緒に表示するスクリプトを書いてみよう。

 

 

解答・解説


function displayAllQuestionsAndChoices() {
  const form = FormApp.openById("フォームIDをここに");
  const items = form.getItems();

  items.forEach(item => {
    Logger.log("質問: " + item.getTitle());

    // 選択肢付きの質問タイプを判定して処理
    if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) {
      const choices = item.asMultipleChoiceItem().getChoices();
      choices.forEach(choice => {
        Logger.log(" - ラジオボタン: " + choice.getValue());
      });
    }

    if (item.getType() === FormApp.ItemType.CHECKBOX) {
      const choices = item.asCheckboxItem().getChoices();
      choices.forEach(choice => {
        Logger.log(" - チェックボックス: " + choice.getValue());
      });
    }

    if (item.getType() === FormApp.ItemType.LIST) {
      const choices = item.asListItem().getChoices();
      choices.forEach(choice => {
        Logger.log(" - ドロップダウン: " + choice.getValue());
      });
    }
  });
}

このスクリプトはフォーム内の全質問を調べ、質問タイプごとに正しくキャストして選択肢を取得している。

設計のレビューや質問構造のデバッグに非常に便利だな。