「Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム」、前回の続きの記事で2回目となります。
1/3 Googleカレンダーと同期する少年野球チーム向け欠席申告フォーム | なかちょんブログ
今回やることは、
- Googleフォームを作成する
- Google App Scriptを入力する
といったことをやっていきます。
目次
Googleフォームを作成する
まずは、Googleフォームを作成しましょう。
上記のリンクからGoogleフォームのページに移動します。

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

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

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

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

① 下の「無題の質問」を「選手名」に変更。
② 「ラジオボタン」の横にある逆三角系をクリックします。
ちなみに、フォームの名前は、この後に自動化するためのスクリプトで同じである必要がるので、完全に同じにしてください。
例) 「選手名」を「選手」とすると、自動化のスクリプトは動きません。

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

選手名を入力。先頭に学年をいれると選びやすいです。
右下にある「必須」をクリックすると、この項目を入力(選択)しないと送信できない「必須項目」になりますので、ここは「必須」にしておきます。
次は予定日をフォームを追加します。

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

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

フォーム名を「予定日」、「必須」にします。
次は欠席、相対、遅刻といった内容を入力するフォームを追加します。

内容はこんな感じです。
各自、チームに合わせて内容は修正してください。
最後は伝言フォームを追加します。

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

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

このように表示されれば、フォームは完成です。
スクリプトを作成する
次ははいよいよ、自動化する為のGoogleAppScriptを作成していきます。
プログラムです。
でも大丈夫!コピーして貼り付ければOKです。
ではいってみましょう!

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

フォームが編集できる画面になりました。
ここで、右上にある「みっつの点」のマークをクリックします。

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

こんな画面がでれば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超入門」という本を共著で書かせていただきました。
自分たちの子供が大人になったときに、当たり前のように使われているであろう「人工知能」を試すことができる小型のコンピューターボードの使い方についての書籍です。
今回ご説明している「欠席・早退・遅刻申告フォーム」も、人間がもっと楽になる「自動化」のひとつですが、今まで人の手をかけなければならなかったいろんなことが、これからは人工知能で自動化されるような世界になってきます。
ぜひ、本屋さんで見かけましたなら、パラパラと見ていただけると幸いです。(買ってね!)

