Google Forms APIを触ってみた、と書きたかった人の話

こんにちは、Wevoxチームの土屋([@tsucchi_13](https://twitter.com/tsucchi_13))です。

この記事は、2021年の[アトラエアドベントカレンダー](https://qiita.com/advent-calendar/2021/atrae)19日目の記事です。
昨日の記事は [@takayone](https://qiita.com/takayone) さんの [Gorm/Gormigrateを利用したMigration](https://zenn.dev/takay/articles/a473d677fb12f9) についてでした。

-----

先日、Google Forms API がオープンベータになったと発表がありましたね。
[Google Forms APIがオープンベータに。プログラミングでGoogleフォームを作成、回答を取得可能](https://www.publickey1.jp/blog/21/google_forms_apigoogle.html)

そこで、私はこんなことを思いました。

- 馴染みのあるGoogle FormのAPIかあ、面白そうだし触ってみたいなあ
- 僕が普段開発している [Wevox](https://get.wevox.io/) もサーベイツールで似ている所があるし、APIのInterfaceなんかも今後開発する上で参考になりそうだ
- せっかくだし、このAPIを使ってFormの作成・定期配信・通知なんかをつくってみて、簡単なサーベイアプリを作ってみよう！
- そして、それをアドカレのネタにしてみよう！

結果、
今回の"APIがオープンベータになる"ということをちゃんと理解していなかった自分は、
"Google Forms APIを触ってみた"的な記事をいま公開しない方が良さそう(たぶん)ということに気づき、
急遽路線変更してGASで本当にざっくり定期配信ができるサーベイをつくりました。

・
・
・

紆余曲折あって、割とネタ系の記事に着地してますw
Google Forms APIの使い方などの有益なことは全く書いてませんが、良ければお付き合いくださいw


## まずはEarly Adopter Programに申請
APIの利用を始めるには、Google Forms API Early Adopter Programというフォームでの申請が必要らしいので、
必要事項を記入して提出しました。

https://developers.google.com/forms/api/eap

申請フォームのうち、下記の3箇所だけ少し迷ったので書いておくと、
![スクリーンショット 2021-12-19 18.40.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208082/39e03fed-7ed5-18d6-5f9b-b9fc1fb8dfea.png)


Google Group(s) to enable for access to API *
-> 趣味用なので、一旦自分のメールアドレスを記入

Google Cloud Console Project ID: *
Google Cloud Console Project Number:
-> GCPのホーム画面のプロジェクトIDとプロジェクト番号を記入
`https://console.cloud.google.com/home/dashboard?project={project_idが入る}`
![スクリーンショット 2021-12-19 18.42.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208082/56e3abe5-cff8-c601-2a97-d2d0563b1d79.png)

## Googleからメールが届く
申請後、少ししたらGoogleから、
デベロッパー向けガイドやクライアントライブラリなどの資料のリンクが記載されたメールが届きました。

そこに、今回の記事の根幹を揺るがす1文が。。

```
Note: The materials below are exclusively shared to Forms Early Adopter testers only.
```
DeepLによる翻訳

```
注：以下の資料はForms Early Adopterテスターにのみ共有されます。
```

・
・
あ、開発のための資料とかってtesterにしか共有されないのか。。（たぶん当たり前体操）
ということは、ここにある資料を元にAPIを触ってみて、触ってみた系の記事を公開したらまずいよな。。（これもたぶん当たり前体操）
オープンベータのなるってそういうことなのか...？どうりで、ググってもGoogle Forms APIを触ってみた系の記事が見当たらないわけだ...

恥ずかしながら、その辺りのお作法？常識？を知らないエンジニアの端くれである僕にとっては、
この時点で良い学びになりました。(ポジティブ)

## 一筋の光明
んーー、けど、「サーベイアプリをつくってみた」って言ってみたいし、
Googleの用意するAPIのInterfaceを参考にしたいのは本当なんだけどなあ、と思う僕に一筋の光明が現れます。

こちらの記事のRecommended for you欄を見てたら、
https://developers.google.com/forms/api/eap

こんなドキュメントが。
https://developers.google.com/apps-script/reference/forms
![スクリーンショット 2021-12-19 19.11.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208082/80776dbb-5ecf-0333-dc97-2f52bc49d18b.png)


どうやら、GASでも普通にGoogleFormが作成できそう...？
今回のGoogle Forms APIだと、これよりもう少し高度なことができるってことなのかな（わかる方教えてください...）

まあ、これでも当初のモチベーションは達成できそうなので、
ここまでの諸々はなんだったんだという想いはグッと堪えつつ、こちらのGASのドキュメントで超簡易版サーベイをつくってみました。

## 定期配信のサーベイを3分クッキング！
流石に、3分は盛りました。

こんなコードで、

```
function myFunction() {
  var form = FormApp.create('Engagement Survey');
  form.addMultipleChoiceItem()
      .setTitle('エンゲージメントを測る質問①')
      .setChoiceValues(['1','2','3','4','5','6','7'])
  form.addMultipleChoiceItem()
      .setTitle('エンゲージメントを測る質問②')
      .setChoiceValues(['1','2','3','4','5','6','7'])
  Logger.log('Published URL: ' + form.getPublishedUrl());
  Logger.log('Editor URL: ' + form.getEditUrl());
}
```
こんなサーベイができました。（仮で2問設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208082/0b42e460-e8d9-d776-48ac-7ddf2c70761b.png)


あとはGASでポチポチして、月に一度、定期でサーベイを作成し配信する形に。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208082/bf598f4e-2bbe-9c49-c268-c9eca49f137b.png)


Wevoxっぽいアプリと言うにはあまりにも苦しいですし、
これでWevoxを名乗られるのは、なんなら僕自身Wevoxのエンジニアとして腹立たしいですが、
段階選択の質問を設定・サーベイを作成・定期配信は抑えているので、数%はWevoxっぽさが出ていると祈っています。

（下記に記載されている機能紹介をベースにつくりました。）

https://get.wevox.io/

以上です！！！w

明日は、Greenのエンジニアの [@hosakak](https://qiita.com/hosakak) さんです。お楽しみに！