きんたまにっき

特に意味のないことをつらつらと

Googleフォームを日時指定して自動で受付開始したり受付終了したりしたい

始めに

「こんなんggれば出てくるやん。」って思ったそこのアナタ。まさにその通りです。ごめんなさい。でも久しくレポート以外の文章を書いてないので自己満足に浸りたかったので書きます。よろしくお願いします。

使い道

オフやオンライン大会の申請フォームを自動で何月何日何時に受付開始&何月何日何時に受付終了みたいなことができる*1。フライング申請対策でキッチリフォームを受付時間にしか空けておきたくない人たち向け。

ぶっちゃけ手動でちゃんと受付開始&受付終了ってすればいいだけな話なので「お、ちょっと便利やん」って程度。全然必須ではない。でも僕はこういうお金がかからないちょっとした便利機能が大好きです。

他にはこの記事では取り上げないけど、例えばフォームの質問に「あなたは男ですか? Yes or No」っていう質問があったとして、「Yes」と答えた人が10人を超えた時点でフォームの受付を終了させる、なんてこともできるらしい。必要なときが来たらやってみたい(結局やらない)

やりかた

条件設定

  • フォームはもう作ってある。
  • 2020年9月4日 21:00 にフォーム受付開始したい
  • 2020年10月20日 23:59 にフォーム受付終了したい

手順

1.作ったフォームのメニューから「スクリプトエディタ」を選択。 f:id:pokexcel:20200815140421p:plain

2.するとこんな感じの画面が出てくる。 f:id:pokexcel:20200815140426p:plain

3.以下のテキストをコピペして2行目のURL = ...のところだけ自分のフォームのURLに変更。最後の/editはついていてもいなくてもいいらしいが、なぜか僕は/editがついてるURLでしか成功しなかったのでとりあえず付ける事を推奨。

/*フォームのURLを入力*/
URL = "https://docs.google.com/forms/d/1L1FYp85tmZWE2y0PVsMUcLQAPxjgd-irmqhggu4MySw/edit";

/*ここから下は書き換えないでください*/
/*****************************************************************************************/
var Form = FormApp.openByUrl(URL);

/*フォームを受け付け開始にする関数*/
function open(){
  Form.setAcceptingResponses(true);
}

/*フォームを受け付け終了にする関数*/
function close(){
  Form.setAcceptingResponses(false);
}
/*****************************************************************************************/

コピペしたら「Ctrl+S」でセーブ。プロジェクトの名前を決めろって言われるので適当に決めて「OK」を選択。 f:id:pokexcel:20200815140434p:plain

4.次は関数の動作確認をしてみます。今回は試しに受付していないフォームを受付開始してみましょう。ツールバーの「実行」→「関数を実行」→「open」を選択。 f:id:pokexcel:20200815140439p:plain

5.すると権限うんぬんの承認が出てくる。「許可を確認」を選択。 f:id:pokexcel:20200815140444p:plain

6.フォームを管理するアカウントを選択。 f:id:pokexcel:20200815140449p:plain

7.「許可」を選択。 f:id:pokexcel:20200815140453p:plain

はい。これでopen関数が実行されてフォームが受付開始されたはずです。

できなかったら多分URLのコピペんとこで間違ってると思うので確認してみてください。僕は"(ダブルコーテーション)や;(セミコロン)を間違って消してしまって動きませんでした。あと当たり前っちゃ当たり前ですが自分で権限を承認したフォームじゃないと弾かれるのでちゃんと自分のアカウントで作ったフォームのURLをコピペしてください。

次は「実行」→「関数を実行」→「close」をしてください。今度は権限うんぬんがでることなくするっとclose関数実行が実行されててフォームの受付が終了されていると思います。ここまでで関数の動作確認は終わりです。

もし最初から受付開始の状態だったらキチンと受付終了してからもう1回ツールバーから「実行」→「関数を実行」→「Open」してください。

8.次はこの関数たちを「トリガー」という機能を使って指定の時刻に実行させます。まず、ツールバーの「編集」→「現在のプロジェクトのトリガー」を選択。 f:id:pokexcel:20200815140500p:plain

9.するとこんな画面が出てくるので右下の「トリガーを追加」を選択。 f:id:pokexcel:20200815140507p:plain

10.赤い四角で囲ったとこを画像のように変更。意味としては「Open関数を2020年9月4日21時00分に実行します。」です。 f:id:pokexcel:20200815140513p:plain

11.close関数でも同じことをしてあげます。「トリガーの追加」→今回は関数を「close」にして日時は「2020-10-20 23:59」 と入力します。終わり!

今回はいきなり本番の開始時間を入力設定しましたが、実際にトリガーが動いてくれるかテストのために数分後の時間とかで試してみるといいと思います。

終わりに

今回で味をしめたので今後もたまにこういう自己満足なんちゃって技術記事(笑)なものをあげていくと思います。

あとセサルさん主催で10月に仙台で開催の杜のヨウカンオフでスタッフやることになりました。心よりお待ちしてます。

*1:つまり僕みたいなズボラ野郎がフォーム担当で受付時間を忘れてても勝手に受付してくれる。