かずきち。の日記

サーバサイドエンジニアのつぶやき

【デモあり】まだ人でカウントしてない?GoogleAppsScriptを使って、Googleフォームを自動で先着順で締め切る方法

コロナ禍になり、先着順が増えました


引用: https://www.nikkansports.com/general/nikkan/news/201802010000377.html

日本人は並ぶのが好きです。
チケットを取るのに並び、
地域商品券を買うのに並び、
福袋で並び…
とにかく並ぶのが好きです。

ですが、並ぶ必要ってあるのでしょうか?
電話が通じれば購入の権利が発生したりするのはいくらでも可能です。
それもひとえにITの力によってアクセス順を0コンマ単位でコントロールできるようになったからです。

今回は完全に無料でこの「先着順」を作ってみます。

使うのはGoogleフォーム

もうアンケートだったりウェブ上で情報を収集するのが当たり前のツールです。

今回こんなフォームをGoogleで作ってみました。
先着200名で申し込みを受け付ける仕様でつくります。

イベント申し込みフォーム

しかしGoogleの回答締め切りは人手

回答受付のバーを人間がオフにすれば、受付終了です。
しかし人が操作するってことは先着200名が201名になったり、205名になることはありうるわけですね。
ここの人数制限をプログラミングで制御しましょう。

プログラム16行で先着順を実装する
function endFormCheck() {
  var LIMIT_COUNT = 200; //ここに人数の上限値を設定

  var form = FormApp.getActiveForm();
  if (form.getResponses().length >= LIMIT_COUNT) {
    form.setAcceptingResponses(false);
  }
  else{
    var seat = LIMIT_COUNT -form.getResponses().length; //残席数を計算
    // 回答済み人数を表示したい場合はこちら↓のスクリプトを使います。
    // var seat = form.getResponses().length;
    var description = 'イベント申し込みフォームです。参加の可否は抽選となります。抽選結果は後日主催者よりご連絡いたします。\n'
     +'残り'+ seat + '席です。\n';
   form.setDescription(description); 
  }
}

ここでLIMIT COUNTを200とし、200以上回答が集まったらクローズするようにします。

模擬的に回答が200以上集まったとします

フォームの回答数を200以上にしてみます。
これは200人以上が回答したことを意味し、この際にフォームが回答受付を自動で終了していればいいわけです。
リロードしてもう一度回答してみようとします。

するともう回答は締め切っています。
人間が打ち切ったわけではなくプログラムが自動でアンケートフォームをクローズにしていて…

16行のプログラムコードなので健全性は100%です。
今日は簡単に自動回答締切のコードを書いてみました。

ここにプログラムを組み込んだフォームを置いておきます。
適当に遊んでみてください。

回答をすると人数が減るはずです。
残り5名でおいておきます。
多くの人が回答すると回答できなくなると思うので、その際はコメントでフォームを開いてって教えて下さい。