フォームをトリガーに

プログラムからフォームを利用する場合、Forms Serviceを使います。

ただ、自動でフォームを作るという機会はあまり無いため、フォームを起点にいくつかのサービスを利用する事の方が多いです。

フォーム本来の機能

Google Forms本来の機能としては以下のようなものがあります。当初なかった便利機能も多く入ってきています。

      1. テキスト(単一行、複数行)やチェックボックス、ラジオボタンに加え、グリッドのチェックボックスやラジオボタン、ファイルのアップロードなども出来る。
      2. メールアドレスを収集し、そのメールアドレスに登録内容の確認メールを送信できる(画像認証のreCAPTCHAが必要)。
      3. 再編集を許可し、自分の登録データを更新出来る。
      4. 各問に点数をつけてテストにすることが出来る。
      5. 登録内容の一覧データをSpreadsheetに書き出しせる。
      6. Spreadsheetに書き出した場合、登録時に通知設定が出来る。
      7. 回答内容を検証できる(文字列の正規表現、チェックボックスのチェック数○以上など)。
      8. 回答内容によって設問を分岐出来る(セクション分け必要)。

この標準機能だけでもかなりの事が出来ます。ただ、もう少し〇〇したい、という場合にGASが使えます。

フォームのパーツ

フォーム登録内容の取得

フォームの送信(登録)をトリガーにして、その登録内容からゴニョゴニョする場合は、以下のようにしてデータを取得します。

登録された内容は関数の引数を e として e.response で取得出来ます。ただ、これだけ書いた場合はスクリプトエディタの入力補完が機能しないので、実際は無くてもいいですが、ダミーとして FormApp.getActiveForm()からはじめるように書いてあります。

上記スクリプトで今登録された問いと答えが取得出来るので、そこから次のアクションにつなげることが出来ます。

なお、答えのデータ型はObjectになっており、記述式のものや単一のものはテキストで取得されますが、チェックボックスでは配列 [ "りんご", "ぶどう", "キウイ" ] のように取得されるので注意してください。

トリガーの登録についてはトリガーの設定をご覧ください。

例:フォーム登録内容を反映した会員証を発行してメールで送信する

フォームの送信(登録)をトリガーにして、その登録内容から会員証を作成し、メールで送信するスクリプトです。

      1. 会員証の雛形(Google Slides)を読み込み、コピーする
      2. フォームから登録された内容を抽出し、コピーしたスライドの特定部分を置換する
      3. ファイルを確定し、PDFとして書き出す
      4. 登録されたメールアドレス宛へPDFを添付してメールする
      5. 作業用のコピーのスライドを削除する

以上の流れで以下のスクリプトを書いてみました。

配列データは for より配列用のメソッドのforEach等も使えるのですが、その場合入力補完機能がうまく動かないのでつい forを使ってしまいます。

今回は会員証なのでスライドを雛形にしていますが、申し込み書の控えや確認書等の場合はドキュメントを雛形として使えます。スプレッドシートはシートに分かれているために印刷(PDF化)が簡単ではなく、getAs()を使ったPDF書き出しが出来ないです。こちらのようにダウンロードリンクから書き出したり、Drive APIのFile を使って変換するなどの工夫が必要です。