Google Apps Scriptでフォームの分岐をカスタマイズする方法とは?

Googleフォームで特定の応答に基づいて次の質問を変えたいんですけど、GASでできるんでしょうか?
猫男
猫男
catman
catman
GASを使えば、Googleフォームの分岐をカスタマイズ可能だ。catmanが手伝ってやろう。

 

GASを用いたフォームの分岐設定方法

Googleフォームのカスタマイズには、GAS(Google Apps Script)を活用するのが効果的だ。まず、適切なフォームオブジェクトを作成する必要がある。

フォームの基本設定をする方法は以下の通りだ。


var form = FormApp.create('フォーム');
var page2 = form.addPageBreakItem().setTitle('ページ2');
var page3 = form.addPageBreakItem().setTitle('ページ3');

var item = form.addMultipleChoiceItem();
item.setTitle('質問: 好きな色は?')
    .setChoices([
      item.createChoice('赤', page2),
      item.createChoice('青', page3)
    ]);

ここでは、FormApp.create()で新しいフォームを作成し、addMultipleChoiceItem()で選択肢を追加している。

選択肢ごとにcreateChoice()を用い、ユーザーの応答に応じて次のページが変わるように設定可能だ。

createChoice()に加えて便利なのが、setGoToPage()メソッドだ。

Googleフォームは「次へ」ボタンを押すと自動で次のページへ進む。

がしかし、setGoToPage() を使うと「次へ」で進むページを 任意の場所に変えられるのさ。


var form = FormApp.create("条件付きページ移動フォーム");

var page1 = form.addPageBreakItem().setTitle("ページ1");
var page2 = form.addPageBreakItem().setTitle("ページ2");
var page3 = form.addPageBreakItem().setTitle("ページ3");

// 「ページ1が終わったらページ3へジャンプ」
page1.setGoToPage(page3);

このコードでは、ページ1の最後に表示される「次へ」ボタンを押すとページ3へ飛ぶように設定している。

 

練習問題

以下の問題を考えてみてほしい。

  1. GASを使って、フォームに条件付き質問を追加するにはどうすればよいか。
  2. 複数の選択肢がある質問で、各選択肢に異なるページを設定するコードを書いてみよう。

 

 

解答・解説

練習問題1の解答

条件付き質問を追加するためには、選択肢ごとにページ遷移を設定する必要がある。以下のコードを参考にしてほしい。


var form = FormApp.create('条件付きフォーム'); 
var item = form.addMultipleChoiceItem();
item.setTitle('色を選んでください')
    .setChoices([
      item.createChoice('赤', FormApp.PageNavigationType.GO_TO_PAGE_TWO),
      item.createChoice('青', FormApp.PageNavigationType.GO_TO_PAGE_THREE)
    ]);
var pageTwo = form.addPageBreakItem().setTitle('赤のページ');
var pageThree = form.addPageBreakItem().setTitle('青のページ');

このコードでは、createChoice()メソッドとPageNavigationTypeを使い、選択された回答に応じて移動するページを設定している。

練習問題2の解答

複数の選択肢があり、それぞれに異なるページを設定する例だ。


var form = FormApp.create('分岐フォーム'); 
var item = form.addMultipleChoiceItem();
item.setTitle('アクティビティを選択してください')
    .setChoices([
      item.createChoice('ハイキング', FormApp.PageNavigationType.GO_TO_PAGE_TWO),
      item.createChoice('スイミング', FormApp.PageNavigationType.GO_TO_PAGE_THREE),
      item.createChoice('読書', FormApp.PageNavigationType.GO_TO_PAGE_FOUR)
    ]);
var pageTwo = form.addPageBreakItem().setTitle('ハイキング選択');
var pageThree = form.addPageBreakItem().setTitle('スイミング選択');
var pageFour = form.addPageBreakItem().setTitle('読書選択');

ページ二つ追加して、そのページタイトルをそれぞれ設定している。

setTitle()メソッドで質問のタイトル、PageNavigationTypeで選択後のページ移動を設定できる。