クフでダローバルな日記

タフでもグローバルもない

Googleフォームで「回答を編集」用URLを回答者にメールで送信する方法

ようやく学科も決まったので、久しぶりに更新します。僕は電磁気のためにこの学科に入ったんじゃないんだ。

Googleフォームって便利ですよね。僕も最近サークルの名簿を作った際に利用したし、学科でアンケートを取る際にも活用されていたのを見ました。
ただ、フォームで回答したものを回答者が再度編集するためには、回答時に出てくるURLを保存しておく必要があって、大抵の人は保存してないわけです。しかし、もっと簡単に保存する方法を調べても出てこない……
そこで、Googleフォームのスクリプトマネージャを用いて編集用URLを回答者に送信するスクリプトを組んでみました。
(とは言っても、ググって出てきた情報を繋ぎあわせただけですが…)

まず、回答者にメールを送信する方法です。
ASCII.jp:Googleフォームで自動返信システムをサクッとつくる (4/4)|Web制作をちょっと便利にするGoogle Apps Script入門
に詳しく書いてあるので、こちらを参考にしました。っていうかもう解説すること残ってないです。

次に編集用URLをスクリプトで取得する方法ですが、こちらにだいたい書いてあります。
Googleフォーム 再編集を許可したフォームで最後に出てくる「回答を編集」のURLを再取得する方法はありますか? - Google プロダクト フォーラム
Googleプラットフォームで言うとここClass FormResponse - Google Apps Script — Google Developers

上記のQ&Aではリストアップする方法なのですが、両者を組み合わせれば個別の回答に対して編集用URLを取得することができます。
それがこちら↓

function submitForm(e){
  var itemResponses = e.response.getItemResponses(); //回答のオブジェクトを取得
  var message = '';
  var username = '';
  var mail = '';
  for (var i = 0; i < itemResponses.length; i++) { //回答内容を取得
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    if (question == '氏名(漢字)'){
      username = answer;
    }
    if (question == 'メールアドレス'){
      mail = answer;
    }
    message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n';
  }
  var editURL = e.response.getEditResponseUrl(); //回答編集用URLを取得
  var title = '名簿情報が送信されました';
  var content = '以下の内容でフォームが送信されました。\n\n '
  + message
  +'\n回答を編集したいときは\n'+ editURL +'\nにアクセスしてください。';
  GmailApp.sendEmail(mail, title, content);
}

肝は
var editURL = e.response.getEditResponseUrl(); //回答編集用URLを取得
ですね。こうすることで、回答タイミングでの編集用URLを取得できるわけです。

このスクリプトでは、一応他の回答内容についても確認のため送信するようにしてあります。
もちろん、回答者のメールアドレスを知る必要があるので質問内容としてメールアドレスを聞く欄を回答必須で作っておく必要があります。
文章の内容を変えたいときはjavascriptの文字列の扱いについて少しだけ調べれば簡単にできると思います。

このスクリプト、地味にかなり便利だと思うのでGoogleフォームを使う人はぜひ使ってみてください。