【Gooleカレンダーとフォーム】全自動・三者面談の日程調整をつくる

教師の便利グッズ

こんにちは。福田泰裕です。

クラス担任をしていて、大変な作業の1つといえば…
三者面談の日程調整です!

希望調査を配布して第3希望まで書いてもらい、うまく調整して表にして生徒にプリントで配布する。
結構な手間のかかる作業です。

もしこれが、全自動になったらどれだけ楽だろう…
そんなことを考えたことがあるはずです。

なんと、それを実現しました!

今回は、全自動・三者面談の日程調整の作り方をご紹介します!

最後まで読んでいただけると嬉しいです。

目次

広告

Gooleフォームで全自動・三者面談希望調査の完成形

完成したらどのようなものになるのか、先にお示しします。

画面にはカレンダーが表示され、予約の状況が分かります。

このカレンダーを見て、空いている時間から希望する時間帯を決め、下のようなGoogleフォームに入力します。

送信ボタンを押すと…👇

このように、自動で追加されるというものです!

Gooleフォームで全自動・三者面談希望調査のつくり方

それでは、作り方を解説していきます。

カレンダーを準備する

まず、専用のカレンダーを用意しましょう。

Googleのトップページの右上から、「カレンダー」をクリック👇

カレンダーが開くので、左下の他のカレンダーを追加「+」をクリック👇

「新しいカレンダーを作成」をクリック👇

カレンダーの名前と説明を決めて、「カレンダーを作成」をクリック👇

これで、専用のカレンダーが作成できました。

入力フォームを準備する

次に、入力フォームを作ります。
まず、フォルダを作成しておきましょう。
Googleドライブの左上の「新規」から👇

「フォルダ」をクリックして👇

名前を適当に決めます👇

そのフォルダに入り、「新規」→「その他」→「Googleフォーム」と進みます👇

すると、フォームの作成画面が開きます。
(※ Googleフォームの操作方法はこちらの記事に書いているのでご覧ください👇 )

このGoogleフォームで、入力フォームを作成します。
まずタイトルと説明を入力し、左上の歯車の設定ボタンをクリックします👇

その画面から、「メールアドレスを収集する」→「回答のコピーを送信」→「常に表示」にチェックを入れ、「保存」をクリックします👇
これで、送信時に確認のメールが送られるようになります。

1問目の出席番号は、「プルダウン」から選択するようにしましょう。
「必須」のチェックも忘れずに!👇

2問目は名前です。
「記述式」にして、「必須」にもチェックを入れましょう👇

3問目は予約日です。
「日付」にして、右下の「…」をクリックします👇

メニューから、「年を含める」のチェックを外します👇

そうすると、入力が「月、日」だけになります👇

4問目は開始時間です。
「時刻」にして、「必須」にもチェックを入れましょう👇

これで、フォームの作成は終了です。

スプレッドシートを準備する

次は、回答を整理するスプレッドシートを用意します。

画面上の「回答」→「スプレッドシートを作成」をクリック👇

「作成」をクリック👇

これで、スプレッドシートが作成されます。

スクリプトをコピペする

つぎは、スプレッドシートにスクリプトを仕込んでいきます。
スプレッドシートの画面上から「ツール」→「スクリプトエディタ」をクリック👇

すると、スクリプトの入力画面が表示されるので、下のスクリプトを丸ごとコピペしてください👇

function sendToCalendar(e) {
  try{
  //年を入力***
  var year = 2020;
 //有効なGooglesプレッドシートを開く
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 //新規予約された行番号を取得
  var num_row = sheet.getLastRow();
 //メールアドレスの取得
  var nmail = sheet.getRange(num_row, 2).getValue();
 //新規予約された行から出席番号を取得
  var nnum = sheet.getRange(num_row, 3).getValue();
 //新規予約された行から名前を取得
  var nname = sheet.getRange(num_row, 4).getValue();
 //予約を記載するカレンダーを取得
  var cals = CalendarApp.getCalendarById("***カレンダーIDを入力***");
 //予約日を取得
  var ndate = new Date(sheet.getRange(num_row, 5).getValue());
// 予約の開始時間を取得
  //開始時間を文字列として取得
  var stimeInput = sheet.getRange(num_row, 6).getDisplayValue();
  //スプリット関数で「:」ごとに分割。stimeArray[0]に時間、stimeArray[1]に分、stimeArray[2]に秒(今回は使いません)が入っています。
  var stimeArray = stimeInput.split(':');
  //stimeに新しくDate型を設定。
  var stime = new Date();
  //用意しておいた時間と分を代入。これでstimeに正しい時間が入ります。
  stime.setHours(stimeArray[0], stimeArray[1], 0);
  // 予約の終了時間を取得(***開始時間から「20分」で指定!)
  //stimeをもとにetimeを新しく設定
  var etime = new Date(stime);                              
  etime.setMinutes(stime.getMinutes() + 20);// 面談時間20分なので、「+20」
 var ndates= new Date(year,ndate.getMonth(),ndate.getDate(),stime.getHours(),stime.getMinutes(),0);
  var ndatee= new Date(year,ndate.getMonth(),ndate.getDate(),etime.getHours(),etime.getMinutes(),0);
 // 先約があるかどうか調べる
  if(cals.getEvents(ndates, ndatee)==0){
 var thing = nnum+"."+nname+"さんが予約しています。\n 別の時間帯を入力してください。";
 //予約情報をカレンダーに追加
  var r = cals.createEvent(thing, ndates, ndatee);
  var thing =nnum+"番 "+nname+"さん \n\n 予約を受け付けました。\n 後日、確定のお知らせをいたします。\n\n ありがとうございました。"
 MailApp.sendEmail(nmail,"三者面談 予約完了",thing);
  }
  else{
  var thing =nname+"さん \n\n 予約の時間に先約がありましたので、\n 申し訳ございませんが、予約できませんでした。\n\n 時間帯を変更して再度お申込みください。"
 MailApp.sendEmail(nmail,"予約できませんでした",thing);
  }
 } catch(exp){
  //実行に失敗した時に通知
  MailApp.sendEmail(nmail, exp.message, exp.message);
  }
 }

変更点は、4か所あります。

スクリプトを変更する。4行目「year」

これは、カレンダーに登録するために必要な西暦の情報です。
その年に合わせて変更してください。

スクリプトを変更する。22行目「カレンダーID」

これは、記録するカレンダーのIDです。
まず、最初のカレンダーの画面を開き、画面左の「1年1組三者面談」の右にある「…」をクリックします👇

メニューから「設定と共有」をクリック👇

ずーっと下へ進むと、「カレンダーの統合」の項目に「カレンダーID」というものがあります。
これをコピーします👇

これを、スクリプトの「カレンダーID」の場所に貼り付けます👇

これでカレンダーIDの登録は完了です。

スクリプトを変更する。31行目「+20」

このスクリプトは、開始時間から20分後を終了時間としてカレンダーに登録するようにしています。
もし面談時間が30分ならば、👇

このように「+30」に変更してください。

さて、これでスクリプトの変更が完成しました。

トリガーを設定する

このままではスクリプトを実行しないとカレンダーに登録されません。
フォームから送信されたら自動でスクリプトが実行されるように設定していきましょう。

スクリプトの編集画面の上から「編集」→「現在のプロジェクトのトリガー」をクリック👇

画面右下の「トリガーを追加」をクリック👇

イベントの種類を「フォーム送信時」に設定して、「保存」をクリック👇

Googleから確認されるかもしれません。
この「詳細」をクリックして…👇

「安全ではないページ」に進みます👇

「許可」を押すと、トリガーが登録されます。👇

これで、フォームから送信されたときに自動的にスクリプトが実行されます。

Gooleフォームで全自動・三者面談希望調査を試してみる

さあ、うまく動作するのか試してみましょう!

Googleフォームの画面上から目のマーク「プレビュー」をクリック👇

すべての項目を入力して、「送信」ボタンをクリック👇

カレンダーを開いてみると(一番緊張する時間です。)…👇

ちゃんと登録されています!!感動!!
送信者にもちゃんとメールが送られます。

ちなみに、先約がある時間に予約を取ろうとすると、エラーになります。
予約できなかったことをメールでお知らせしてくれます。

※このメッセージは、スクリプトを書き換えることで変更可能です。

まとめ:Googleフォームで全自動・三者面談の日程調整を自動化できる!

いかがでしたでしょうか。

今回はGoogleカレンダー、フォーム、スプレッドシートを用いて、三者面談の日程調整が自動化できる方法をご紹介しました。
この方法を導入できれば、クラス担任の手間は大幅に削減できます。

今回の記事はこのシステムを作成するまででした。
次の記事では、カレンダーと並べて公開し、実施できる形になるまでをご紹介する予定です。

最後まで読んでいただき、ありがとうございました!

質問やご意見、ご感想などがあればコメント欄にお願いします👇

コメント

  1. NSD より:

    参考にさせて貰っています。
    1つお伺いしたいのですが、
    先約確認のあとの以下の箇所はどこで参照されているのでしょうか?
    「var thing = nnum+”.”+nname+”さんが予約しています。\n 別の時間帯を入力してください。”;」
    ご回答頂けましたら幸いです。

  2. 武田晃 より:

    こんにちは
    初めて利用しようと思い、手順通り行ってみました。

    以下の点で疑問が出ます。
    ・時刻を入力すると、メールではその時刻に開始と届くのですが、カレンダーの方の表示は30分早い時刻が表記されてしまいます。どこを直せは良いのでしょうか?

    ・また希望の日にちですが、とある日を打ち込むと、終了より前の日を入力くださいと出ます。
    開始日を入力するとその表記が出ます。

    よろしくお願いします。

  3. 秋山 より:

    小学校のボランティア日程調整に使いたいのですが、分からないところがあり質問させてください。

    ■25日AM 25PM 各5名ずつとしたい場合、何かしらの設定をするとできますか?

    ■平日毎日ボランティアが必要で、週3回参加したい場合、複数入力回答できるように設定はできますか?

  4. AAA より:

    こんにちは

    スプレッドシートのスクリプトを編集するのは
    初めてなので、基本的なことでしたら申し訳ないのですが
    質問させていただきます。

    function SendToCalender(e) ;

    の変数eはなぜ必要なのでしょうか。

タイトルとURLをコピーしました