今回は、Goolgle Appsで利用できるフォーム機能でのスクリプト使用例を取り上げる。フォームは、ユーザーからの問い合わせ受け付けや、質問、アンケートなどさまざまな場面で利用できる便利なツールだ。フォームから送信された内容は、Googleドライブ内のスプレッドシートに保存できるようになっている。

登録フォームの作成

サンプルは、社内の研修申し込みフォーム。フォームの入力項目は「名前」「メールアドレス」のテキスト入力欄と、複数の研修時間から希望の時間を選択するラジオボタンというシンプルな構成になっている。

フォームの作成機能については簡単に触れるだけとするが、取り立てて難しい点はないだろう。まずは、Googleドライブの「作成」→「フォーム」でフォームを作成する。フォームの作成画面が表示されたら、フォームの名前や、各項目の入力タイプ、必須質問にするかどうかなどを設定する。

フォーム名や各項目の質問、回答形式などを設定する

研修時間の質問はラジオボタン形式とした

また、質問項目の作成欄の下に、フォームを送信した後に表示されるメッセージを編集できる部分がある。必要に応じて内容を変更してもよいだろう。

フォーム送信後に表示される確認メッセージを変更できる

最後に、フォームで送信された回答の保存先を設定しておく。画面上部の「回答先を選択する」をクリックすると、「回答先を選択」画面が表示されるので、ここで「新規スプレッドシート」を選んで名前を付けておく。

回答先にはスプレッドシートのほかに、フォームに保存することも可能

フォームが作成できたら、まずは、ライブフォームでテストしてみよう。画面上部の「ライブフォームを表示」を押すと、フォームの登録画面が表示されるので、項目を入力して送信する。

ライブフォームで、作成したフォームを実際に使ってみる

登録フォームで送信したら、Googleドライブの一覧リストから、先ほど回答先として名前を付けたスプレッドシートを表示すると、入力した内容が保存されているのが確認できるだろう。

送信された内容はスプレッドシートに保存される

最初の行にはフォームのフィールド名が表示され、2行目以降に、フォームへの入力1件分が1行として表示される。回答が増えると、順に下の行へと追加されていく形だ。

フォームに登録されたら、確認メールを自動送信

ざっとフォームの基本的な機能を紹介したが、簡単に作成できる反面、ちょっと物足りないと感じる部分もあるだろう。たとえば、よくある問い合わせフォームでは、入力した内容を確認するメールが自動送信されてくるようになっている。

そこで、上記のフォームに、誰かが登録したら自動確認メールを送信する機能を付け加えてみよう。Apps Scriptを利用すれば、このようなことも簡単に行える。

「フォームに登録したら、メールを送信する」のように、何かのきっかけをもとにスクリプトを動作させるには「トリガー」を設定すればよい。トリガーは、スプレッドシートを開いたら…といった動作以外にも、毎時・毎日のように時間によるものも設定できる。

スクリプトを実行するトリガーを設定

それでは、回答先のスプレッドシートからスクリプトエディタを表示して、以下のスクリプト(関数)を入力する。スクリプトの説明は後述するとして、まずはこのスクリプトの実行タイミングを設定する。なお、スクリプトの入力や保存に関しては、1回目の内容を参照。

function sendEmail(e) {

  var myName = e.namedValues["名前"];
  var mailto = e.namedValues["メールアドレス"];
  var myList = e.namedValues["参加希望時間"];

  var mailcc = "kobayashi@exsample.com";

  var honbun = myName + "様\n\n";
  var honbun = honbun + "説明会の登録を受け付けました。\n";
  var honbun = honbun + "説明会の時間は下記の通りです。\n";
  var honbun = honbun + myList;

  MailApp.sendEmail(mailto, "説明会の登録を受け付けました", honbun, {cc:mailcc});
}

スクリプト入力したら、メニューの「リソース」→「現在のプロジェクトのトリガー」を選択する。すると、トリガーを設定する画面が表示される。初めての場合には、「トリガーが設定されていません」というメッセージが表示されるので、「今すぐ追加するには」をクリックする。

トリガの設定画面

ここで「トリガを設定するスクリプト名(関数名)」、「イベントの対象」、「実行するタイミング」を順に選ぶ。今回のフォームの自動返信では、それぞれ「sendEmail」「スプレッドシートから」「フォーム送信時」となる。

トリガの設定例、ここではフォーム登録に自動返信する

これで設定は完了だ。スクリプト内容を保存して、再度、先ほどのフォームから送信してみる前に、スクリプト内容も確認しておこう。なお、保存時に「承諾が必要です」という注意画面が表示された場合には、内容を確認して「承諾」を選択しておけばよい。

スクリプトの動作

さて、今回のスクリプトは、フォームに入力された内容を利用してメールを自動送信する、というのがおおまかな流れだ。メールの送信については3回目の内容も参考にしてほしい。

まず、スクリプト名に続く「(e)」が、ポイントだ。この仮引数「e」に、フォームから送信された内容が渡される。ここから、各項目の名前を「e.namedValues["項目名"]」のようにして、入力された内容を変数に格納するというわけだ。

  var myName = e.namedValues["名前"];

続く「var mailcc = "kobayashi@exsample.com";」は、自動返信メールを送る際に、CCに追加するアドレスを設定している。必須項目ではないので削除しても問題ないが、削除した場合には、最後の行を以下のように変更する必要がある。

  MailApp.sendEmail(mailto, "説明会の登録を受け付けました", honbun);

さらにメールの本文を「honbun」に代入している。説明上で見やすいように4行に分けているが、改行コード「\n」で区切って、一文ずつ処理しているというだけだ。なお、フォームの入力項目の名前と説明会の時間を、ここで本文に挿入している。

最後に、メールの送信を処理している。ここは、フォームに入力された宛先に、件名を「説明会の登録を受け付けました」として、送信している。

フォームの入力先に自動返信

それでは、上記スクリプト内「mailcc」のダミーアドレスを、実際に利用できるものに変更して、先ほどのフォームを送信してみよう。

フォームに登録すると、入力したメールアドレス宛に、下記のようなメールが自動送信される。

登録フォームに入力したメールアドレスに自動的にメールが送信される

このような自動送信は、なにも登録者本人に送るだけが利用方法ではない。もっと単純に、フォームに登録されたことを管理者に通知する用途で使うことも可能だし、トリガーのイベントで「時間主導型」を使って日毎の情報をまとめて送るような使い方もある。

次回は、このトリガーの時間主導型での使用例を紹介する。