Help us understand the problem. What is going on with this article?

Googleフォームの回答を、Webデータベース(Exment)に送信する

はじめに

Googleフォームは、非常に手軽に、一般ユーザーのデータ入力を可能にします。
なにかの申込。アンケート。問い合わせ。質疑応答。用途はさまざまです。

入力データはGoogleスプレッドシートに登録されます。Googleフォームで記入した内容が、表にどんどん追加されていきます。
手軽に確認できるので便利です。

一方で、本格的に集計したり、入力内容を副次的に利用したい場合(例:顧客管理に使用)には、集計先がGoogleスプレッドシートだと、ちょっとイマイチな場面もあります。
Excelもなのですが、スプレッドシートはふとしたきっかけで壊れてしまったり、記入中に間違ったデータを入れてしまったりしがちです。
本格的に利用するとなると、「Webデータベースに集計したい」、そう考えたことがある方もきっと多いはずです。

この記事では、Googleフォームのデータ送信時に、GAS(Google Apps Script)から、REST APIを使用して、Webデータベースに内容を送信するための手順を記載します。

今回は私が開発しております、Laravel製のWebデータベース『Exment』を使用します。ですが、REST APIに対応していれば、多くのWebサービスで実現可能なはずです。

作成したいGoogleフォーム画面

今回はアンケートを想定し、こんな画面のアンケートを作成していきます。

sample1.png

  • ハンドルネーム(1行テキスト)
  • 好きな食べ物は?(選択肢。りんご、みかん、いちご、キウイ、さくらんぼ)
  • 世界の秘密を知っていますか?(はい/いいえ)

実装

Exment(Webデータベース)側

アンケートの受け口となるWebデータベースで、管理テーブルと列を追加していきます。
今回はExmentで、以下のようなテーブルを作成します。

  • テーブル : アンケート/questionnaire
  • 列 :
    • ハンドルネーム/hundle : 1行テキスト
    • 好きな食べ物/like_fruits :選択肢(りんご、みかん、いちご、キウイ、さくらんぼ)
    • 世界の秘密/little_busters :YES/NO

gas11.png

テーブル設定が完了したら、REST APIアプリ設定し、Client IDなどを取得します。
今回は「3. API Key(APIキー形式)」で登録します。登録したキーは、Googleフォーム設定時に使用します。

gas12.png

Googleフォーム作成

Googleフォームでアンケートを作成します。
今回は以下のようになりました。

  • ハンドルネーム : 記述式
  • 好きな食べ物 :ラジオボタン(りんご、みかん、いちご、キウイ、さくらんぼ)
  • 世界の秘密を知っていますか? :ラジオボタン(YES、NO)

GAS(Google Apps Script)設定

ここから、このGoogleフォームに対し、GAS設定を追加していきます。

  • ヘッダ右側にある「その他」をドロップダウンして、「スクリプトエディタ」を選択してください。これで、GASの画面が表示されます。

gas13.png

アンケートの設問のIDを取得

ExmentでAPIを実行するためには、Exment列の列名(英数字)と、設問の回答を紐付ける必要があります。
しかし、Googleフォームではidやcodeを設定することができないので、何らかの方法でExmentの列名と、フォームの設問を紐付ける必要があります。
質問文は今後メンテナンスされる可能性があるので、質問文そのものを紐付けに使用するのは避けましょう。また設問順も変わる可能性があります。
ここでは、Googleフォーム内部で持っている設問のIDを、事前にGASを使用して取得します。
※こちらを参考にしました。 https://www.pre-practice.net/2017/11/google-form.html

gas1.png

  • 記入したら、「Ctrl + S」や 「ファイル + 保存」をクリックすることで、プロジェクト保存画面が表示されるので、任意の名前を入力して保存します。

gas2.png

  • ヘッダー部分の「実行」ボタンを一度、クリックします。

gas3.png

  • しばらく経つと、「Authorization required」が表示されるので、「許可を確認」をクリックし、アクセスを許可します。(今後、都度アクセス許可を求められる場合があります。その際には、都度許可を行ってください。)

gas4.png

  • 許可後、先ほど記入したコードが実行されるので、実行後にメニューの「表示」→「ログ」を確認します。

  • ログファイルに実行結果が出てくるので、「getTitle()」の下の「getId()」を、それぞれ取得します。
    今回のフォームの場合、「ハンドルネーム」のIDが55039524、「好きな果物は?」のIDが1864715631、「世界の秘密を知っていますか?」のIDが265341857になっているので、控えておきます。

gas6.png

APIのClient IDなどをプロパティ値に保持

APIのURL、Client ID、Client Secret、API Keyや、対象のテーブル、列一覧などを、プロジェクトのプロパティ値に保持しておきます。
可変値を外出ししておくことで、ソースコードはなるべく変更しないで対応できるようにします。

  • - メニューの「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」→「+行を追加」を選択し、以下のプロパティと値を設定します。
    • API_URI : ExmentのAPIのURIです。「http(s)://~~~~/admin」までを記入してください。また最後にスラッシュは入れないでください。
    • CLIENT_ID : APIのクライアントIDです。
    • CLIENT_SECRET : APIのクライアントシークレットです。
    • API_KEY : APIのAPIキーです。
    • TABLE_NAME : データを登録するExmentのテーブル名です。
    • COLUMN_IDS : データを登録するExmentの列一覧です。json型文字列で、キーをExmentの列名、値を上記で取得した、Googleフォームの設問のidを設定してください。 例:{"hundle": "55039524", "like_fruits": "1864715631", "little_busters": "265341857"}

gas14.png

ExmentのREST API実行用コードを設定

  • メニューの「ファイル」→「New」→「スクリプト ファイル」をクリックし、新規の.gsファイルを作成します。名前は任意です(ExmentApi.gsなど)
  • 作成したファイルに、下記のリンク先のコードをコピペします。

https://github.com/exment-git/google-form/blob/master/exmentApi.gs

gas15.png

Googleフォームのトリガー設定

  • メニューの「編集」→「現在のプロジェクトのトリガー」をクリックします。

  • 「現在のプロジェクトのトリガー一覧」が開くので、画面右下の「+ トリガーを追加」をクリックします。

gas7.png

  • トリガー編集ダイアログが開くので、必要な情報を入力して保存します。
    • 実行する関数を選択:↑で作成した関数(callAPI)を選択
    • デプロイ時に実行:Head
    • イベントのソースを選択:フォームから
    • イベントの種類を選択:フォーム送信時
    • エラー通知設定:(任意)

gas8.png

これで、GASを側の設定は完了です。

試す

これで設定は完了です。あとは実際に回答を行い、Exmentにデータが追加されているかどうかを確認してください。

gas9.png
gas10.png

まとめ

以上です。回答内容をWebデータベースに貯めておけば、記入してもらった内容を別の用途で使用しやすいですね。
今回はExmentを使用しましたが、REST APIに対応しているサービスであれば、コードを少し書き換えるだけで対応できると思います。
Googleフォームは非常に便利なので、さらに便利に使用していきましょう。

ブランチ

https://github.com/exment-git/google-form

hirossyi73
株式会社カジトリ 代表取締役社長。 OSSなLaravelのWebデータベース「Exment」、C#・Python・PHP開発、WordPressによる個人サイト作成をはじめとして、幅広い開発を手がけています。 最近電子書籍を発行しました。Amazon Kindleストアで「ぽんこつエンジニア」で検索。
https://kajitori.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした