2/3 Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム

「Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム」、前回の続きの記事で2回目となります。

1/3 Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム  | なかちょんブログ

今回やることは、

  1. Googleフォームを作成する
  2. Google App Scriptを入力する

といったことをやっていきます。

目次

Googleフォームを作成する

まずは、Googleフォームを作成しましょう。

上記のリンクからGoogleフォームのページに移動します。

Google フォーム  アンケートを作成 分析できる無料サービス 2019 12 29 17 03 25

左側の「Googleフォームをつかってみる」のボタンをクリック。

Google フォーム 2019 12 29 17 04 39

左上に「新しいフォームを作成」の下にある「空白」の上の「+(プラス)」をクリックします。

無題のフォーム  Google フォーム 2019 12 29 17 06 19

このように、新しい「無題のフォーム」が作成されました。

無題のフォーム  Google フォーム 2019 12 29 17 08 58

フォーム名を「欠席・早退・遅刻申告フォーム」にします。

無題のフォーム  Google フォーム 2019 12 29 17 10 46

① 下の「無題の質問」を「選手名」に変更。

② 「ラジオボタン」の横にある逆三角系をクリックします。

ちなみに、フォームの名前は、この後に自動化するためのスクリプトで同じである必要がるので、完全に同じにしてください。

例) 「選手名」を「選手」とすると、自動化のスクリプトは動きません。

無題のフォーム  Google フォーム 2019 12 29 17 13 19

フォームの入力形態が選べるので、選手名は事前に登録しておける「プルダウン」にします。

無題のフォーム  Google フォーム 2019 12 29 17 18 20

選手名を入力。先頭に学年をいれると選びやすいです。

右下にある「必須」をクリックすると、この項目を入力(選択)しないと送信できない「必須項目」になりますので、ここは「必須」にしておきます。

次は予定日をフォームを追加します。

無題のフォーム  Google フォーム 2019 12 29 17 21 24

右の方にある「+」をクリックすると、今の「選手名」の下に新しいフォームが追加されました。

無題のフォーム  Google フォーム 2019 12 29 17 22 35

フォームの入力形態は「日付」を選択します。

無題のフォーム  Google フォーム 2019 12 29 17 24 27

フォーム名を「予定日」、「必須」にします。

次は欠席、相対、遅刻といった内容を入力するフォームを追加します。

無題のフォーム  Google フォーム 2019 12 29 17 28 43

内容はこんな感じです。

各自、チームに合わせて内容は修正してください。

最後は伝言フォームを追加します。

無題のフォーム  Google フォーム 2019 12 29 17 29 55

フォームの種類は「段落」にします。こちらは「必須」項目はチェックしないでください。

これでフォームの作成はできました。

無題のフォーム  Google フォーム 2019 12 29 17 34 06

右上にある目のマークをクリックします。

欠席 早退 遅刻申告フォーム 2019 12 29 17 35 05

このように表示されれば、フォームは完成です。

スクリプトを作成する

次ははいよいよ、自動化する為のGoogleAppScriptを作成していきます。

プログラムです。

でも大丈夫!コピーして貼り付ければOKです。

ではいってみましょう!

欠席 早退 遅刻申告フォーム 2019 12 29 17 38 58

先程作成したフォームの右上にある鉛筆のマークをクリックします。

無題のフォーム  Google フォーム 2019 12 29 17 42 46

フォームが編集できる画面になりました。

ここで、右上にある「みっつの点」のマークをクリックします。

無題のフォーム  Google フォーム 2019 12 29 17 44 06

「スクリプトエディタ」をクリックします。

無題のプロジェクト 2019 12 29 17 45 25

こんな画面がでればOKです。

もともと表示される下記のコードは削除してください。

function myFunction() {
  
}

きれいにしたら、下のコードを入力します。(コピペしてください)

var CALENDAR_ID  = "";
var EVENT_TITLE  = "欠席・早退";
var MAIL_ADDRESS = "";
var MAIL_SUBJECT = "<欠席・早退・遅刻申告フォーム>"

これが入力したところです。

① CALENDAR_IDは自分で作成したカレンダーIDをを入力してください。

わからない人は前回の記事の最後の方(まとめの直前)で説明していますので、あなたがつくったカレンダーのIDをこちらに記載してください。

1/3 Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム

② 連絡先のメールアドレスを入力します。うちのチームでは、監督・コーチ陣のメーリングリストを作っているので、そのメールアドレスにしてます。

そうすると、誰かが欠席や早退などの申告をすると、関係者に連絡が行きます。

次に、下記のコードをコピペします。

var MAIL_BODY = "\
監督・コーチ・スタッフの皆さま\n\
以下の選手が欠席・早退・遅刻いたします。\n\
\n\
\n\
__PLAYER__\n\
__DATE__\n\
__CONTENT__\n\
__MEMO__\n\
\n\
\n\
ご確認のほど宜しくお願いします。\n\
googleカレンダーには自動反映済み。\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n\
 \n\
";

var ITEM_KEY_DATE    = "予定日";
var ITEM_KEY_PLAYER  = "選手名";
var ITEM_KEY_CONTENT = "内容";
var ITEM_KEY_MEMO    = "伝言";

/*
// メール送信の認証を行う為、一度このメソッドを実行する必要がある。
function test(){
  MailApp.sendEmail(MAIL_ADDRESS, MAIL_SUBJECT, "テスト");
}
*/

/**
 * カレンダーにイベントを追加する
 * @param e
 */
function addCalendar(e) {
  // 入力項目の取得
  var responses = e.response.getItemResponses();
  var messages = [];
  var items = {};
  var date = null;
  for (var i=0; i<responses.length; i++) {
    var response = responses[i];
    var key = response.getItem().getTitle();
    var value = response.getResponse();
    
    if (key==ITEM_KEY_DATE) {
      date = value.replace(/-/g, "/");
      items[key] = getDate(new Date(date));
    } else {
      messages.push(value);
      items[key] = value;
    }
  }  
  
  // 既に予定があるかを確認する
  var scheduled_date = new Date(date);
  var calendar = CalendarApp.getCalendarById(CALENDAR_ID);
  var events = calendar.getEventsForDay(scheduled_date);
  var description = "";
  for (var i=0; i<events.length; i++) {
    var event = events[i];
    var title = event.getTitle();
    if (title == EVENT_TITLE) {
      description = event.getDescription() + "\n" + messages.join(" ");
      event.setDescription(description);
      break;
    }
  }
  
  //予定が無い場合は新規作成
  if (!description) {
    calendar.createAllDayEvent(EVENT_TITLE, scheduled_date, {description:messages.join(" ")}).setGuestsCanSeeGuests(false);
  }
  
  // メール送信
  var body = MAIL_BODY.replace(/__PLAYER__/g, items[ITEM_KEY_PLAYER])
    .replace(/__DATE__/g, items[ITEM_KEY_DATE])
    .replace(/__CONTENT__/g, items[ITEM_KEY_CONTENT])
    .replace(/__MEMO__/g, items[ITEM_KEY_MEMO]);
  MailApp.sendEmail(MAIL_ADDRESS, MAIL_SUBJECT, body);
}

function getDate(date) {
  var d = [];
  d.push(date.getFullYear());
  d.push(date.getMonth()+1);
  d.push(date.getDate());
  return d.join('/');
}

最後に左上にある「保存(フロッピーディスク)」のマークをクリックします。

これで、Google App Scriptは完了です。

まとめ

「Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム」の第2回は、Googleフォームで「欠席・早退・遅刻申告フォーム」っを作り、自動化の為の「Google App Script」を入力しました。

あとは、これらが連携する設定を次回行います。

続きの記事はこちら

3/3 Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム

前の記事はこちら

1/3 Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム

私が書いた書籍の紹介

12月21日にソーテック社から発売された「Jetson Nano超入門」という本を共著で書かせていただきました。

自分たちの子供が大人になったときに、当たり前のように使われているであろう「人工知能」を試すことができる小型のコンピューターボードの使い方についての書籍です。

今回ご説明している「欠席・早退・遅刻申告フォーム」も、人間がもっと楽になる「自動化」のひとつですが、今まで人の手をかけなければならなかったいろんなことが、これからは人工知能で自動化されるような世界になってきます。

ぜひ、本屋さんで見かけましたなら、パラパラと見ていただけると幸いです。(買ってね!)