LoginSignup
1
2

More than 1 year has passed since last update.

スクラッチ開発するシステムとGoogleFormsがどこまで連携できるのか調べてみた

Last updated at Posted at 2022-08-13

背景

スクラッチ開発するシステム(以下、独自システム)において、独自のアンケートを管理し、ユーザに回答させたい場合がある。
アンケート管理機能を自前で実装すると手間がかかるため、GoogleForms(以下、GForm)及びGoogleAppScript(以下、GAS)で、どこまで独自システムと連携できるのかを調査した。

GFormの基本的な説明は省略する。詳しくは以下のリンクを参照すること。
https://www.google.com/intl/ja/forms/about/

前提条件

  • Googleは個人アカウントではなく、GoogleWorkspaceを利用する前提とする。
  • 独自システムのユーザ管理は、Googleアカウントを使用しないものとする。
  • Googleアカウントを持っていない、あるいはログインしていないユーザでも、GFormに回答可能とする。ただし、独自システムにはログインしている前提とする。
  • GForm1件に対する回答数は数十〜数百件とする。

調査内容

①多言語対応

原則不可。

GFormを複数種類作成することで代用可能。
ただし、フォームが分かれるので、複数言語をまたいだ集計(主に選択式の質問)が面倒になる。
その場合、各言語での選択肢の頭に記号などを共通で付け、
集計時に各言語分の結果のスプレッドシートを、1つのシートにまとめることで、
記号で引っ掛ければ、各言語をまたいだ集計が可能となる。

※GForm上で、「必須」「送信」などのボタン名が固定表記になっているが、GFormのURLの末尾に、hl=enなどのクエリストリングを付けることで、変更可能。

※MicrosoftFormsの一定のプランであれば、1種類のフォームから、多言語の質問文を生成することができる。ただし、いくつかの言語(ミャンマー語など)が非対応だった。
https://support.microsoft.com/ja-jp/office/%E8%A4%87%E6%95%B0%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B-e948a2ea-31c8-432f-91bf-67790e226706

②GFormオープン時の動的な初期値の指定

可能。

クエリストリングを利用して、GFormの回答画面を開いたタイミングで、テキストボックスに文字列を埋め込んだり、選択式の質問を、選択させることができる。

これを利用すれば、独自システム側のユーザIDなどを、GForm側に渡すことで、独自システム側のユーザ情報と、GForm側の回答情報を、後から突合することができる。

独自システム内で、GFormの回答画面へのリンクを表示する画面を用意して、その画面の描画処理の中で、リンクのクエリストリングを動的に生成すると良い。

※MicrosoftFormsだと、単体ではできないらしい。
https://answers.microsoft.com/ja-jp/msoffice/forum/all/forms%E3%81%A7%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB/391e9519-14f6-474c-9ce6-d4b3e0e4e49b

参考
https://support.google.com/a/users/answer/9308781
https://web-breeze.net/googleform-pre-input/

ただし、GFormを開いた後は、埋め込まれた初期値を、ユーザが編集できてしまうことに注意。
よって、ユーザIDは、ただの連番ではなく、適当に入力しても、当たらないもの(会員番号
など)にするべき。

入力欄をhidden扱いにすることは、技術的には可能のようだが、かなり手間がかかる印象を受ける。
少なくとも、GFormの管理コンソール画面や、GASでは標準で対応していない。

参考
https://www.monotalk.xyz/blog/Customize-Google-Form-and-set-hidden-field/
https://formfacade.com/website/is-it-possible-to-hide-fields-in-google-forms-on-1FAIpQLScsQxfv3qbfi-qzk7Xty7IIq8ifoGih3d-LAN5EBIPJXgUaDA.html

③ユーザがアンケートを回答したことを、独自システム側が検知する

GASでアンケート送信時をトリガーとして、スクリプトを起動し、独自システム側であらかじめ用意したWebAPIを呼び出すと良い。
その際に、パラメータとして、GFormのIDと、②で受け渡したユーザIDを指定すると良い。

フォームの回答結果は、FormResponseオブジェクトが保持している。

参考
https://developers.google.com/apps-script/guides/triggers/events#form-submit_1
https://developers.google.com/apps-script/reference/forms/form-response

④GForm回答後に、ユーザが自分の回答内容を後から確認する

可能。

GForm標準の機能で、回答時に、回答者が指定したメールアドレスに回答内容をメールで送ることができるので、それを使うと良い。
ただし、以下の制約が発生する。
・回答者が送信先メールアドレスを必ず手入力しなければならない。(②で自動入力はできない)
・回答者に、ロボットでないことの確認作業(複数の絵の中から、〇〇が映っているものを選択してください)が発生する場合がある。

代案として、③の仕組みで、独自システム側で回答内容を受け取り、独自システム内の画面で、ユーザに回答内容を表示する方法がある。その場合、他人のユーザIDが特定されて勝手に使われないように注意すること。

⑤独自システムのユーザが、同一のGFormに対して、1回のみ回答できるように制限する

不可。

これを行う場合は、独自システム側に、GFormへのリンクを表示する画面を実装し、過去に回答済みかどうかを判断して、リンクの表示・非表示を切り替えるなどの処理を入れると良い。

仮に、GFormでの回答が重複したところで、GFormの回答結果のデータに、同じユーザIDが複数件含まれるだけなので、回答日が最新のレコード以外は削除する、などの処置を集計時に挟めば良いだけ。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2