GoogleフォームとGoogleカレンダーを連携した業務効率化
この記事は以下の方を対象にしています。
- 非IT企業で働いていて、業務の効率化を図りたい方、
- 社内業務の効率化を図りたいエンジニア、および非エンジニアの方
業務効率化の課題
人数の規模がそれほど多くない小規模な企業や、個人事業主として働いている方の中には、アナログな業務をデジタル化して効率化したいけど、金銭的な余裕がなくてシステムを導入することが難しい、という方もいらっしゃるのではないでしょうか。
または、IT企業であっても社内の業務効率化に対してコストをかけることに抵抗がある場合も少なくないのではないでしょうか。
そのような場合、Googleが提供しているサービスを組み合わせてうまく連携することで、低コストで業務効率化できる可能性があります。今回はその一例として、GoogleフォームとGoogleカレンダーを連携する方法を紹介します。
ここで、小規模な卸売業界を対象として、以下のようなケースを考えます。
- 複数の媒体から注文を受けている(メール、LINE、電話など)
- 注文時に希望納品日を指定してもらい、納品日に商品を納品している
このようなケースの場合、まず複数の媒体から受けている受注の情報を一か所に集約すること自体が大変です。そして、集約した情報からそれぞれの受注の希望納品日を整理して納品日ごとに商品をまとめることが必要になります。何のシステムも使わず、紙やExcelでこのような情報を管理していると、注文の数が増えた時に効率よく作業することが難しくなります。
販売管理システムや受注管理システムを導入することでこのような問題を解決できる可能性は高いですが、そのようなシステムは導入コストがかかります。ここではGoogleが提供しているサービスを組み合わせて、コストをかけずに問題を解消する方法を考えてみます。
課題の解決方法
まず、注文の受け口を1つに集約することで、データの管理がしやすくなります。そこで、Googleフォームを使って注文用のフォームを作成することにします。
そして、希望する納品日をGoogleカレンダーに連携するようにします。カレンダーに自動と連携することで、自分でデータを集約せずとも、「いつ」「誰に」「何の商品を」納品するかが一目で分かるようになります。
また、注文を受注したことを顧客に連絡する作業も自動化できると便利です。注文が入ったときに、顧客に対して注文完了のメールを送信し、さらに社内の受注担当者にもメールで連絡を入れてあげれば親切です。
今回はそのような仕組みをGoogleの提供するサービスで実現してみることにしましょう。
全体像
まず、先の仕組みを実現するために使用するサービスは以下の4つです。
- Googleフォーム
- スプレッドシート
- Googleカレンダー
- Google Apps Script
これらのツールを使用するには、Googleアカウントが必要になります。アカウントさえあれば全て無料で使用可能です。
具体的には以下の流れで仕組みを作っていきます。
- 発注用のGoogleフォームを作成する(顧客が入力)
- Googleフォームと連携するスプレッドシートを作成
- スプレッドシートにGAS(Google Apps Script)を組み込み、希望納期の日付でGoogleカレンダーに連携する
- 発注者と受注担当者に対してメールを送信する
全体像を図にすると以下のイメージです。

手順
1. Googleアカウントを作成
Googleのサービスを利用するためにはGoogleのアカウントが必要になります。アカウント作成の手順はここでは省略します。
2. 発注用のGoogleフォームを作成
Googleフォームの作成方法についても詳細は割愛します。
フォームの項目は必要に応じてカスタマイズしてもらうとして、今回は必要最低限の情報として以下の内容を入力してもらうことを想定します。
- 連絡用メールアドレス
- ご担当者氏名
- 希望納期
- 商品情報
ユーザー(発注者)側から見たフォーム画面の以下のイメージです。

3.フォームと紐づくスプレッドシートの作成
フォームを作成したら、スプレッドシートと紐づけます。
フォームを作成している画面で「回答」タブを開くと、「スプレッドシートにリンク」というリンクがあるので、ここから新しいスプレッドシートを作成します。

以下のようなスプレッドシートが作成され、Formに回答があった場合は自動的にこのスプレッドシートに入力内容が追記される形になります。

4. Googleカレンダーでカレンダーを追加
続いてはGoogleカレンダーを追加します。デフォルトで設定されているカレンダーを使用しても良いですが、Googleカレンダーでは設定からマイカレンダーの項目にカテゴリを追加できるので、受注用の新しいカレンダーを作成しておきます。
設定から以下のようにカレンダーを作成します。

新しいカレンダーが作成できると、そのカレンダーの設定画面が開き、カレンダーIDが発行されます。このカレンダーIDは後でスクリプトを作成する際に使用するので、値を控えておいてください。
以下の赤枠の部分のIDを控えておく。

5. スクリプトの作成
続いて、Google Apps Scriptを使って、スクリプト(プログラム)を作成します。Googleフォームによる送信があったときに、Googleカレンダーに連携されるようなプログラムを作成します。
このプログラムはGoogleフォームに作成すると思いきや、実はスプレッドシートに作成する方が簡単なので、スプレッドシートに作成します。
先ほど作成したGoogleフォームと連携しているスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。

そうすると、AppsScriptのタブが開ます。その中でエディタと呼ばれる、プログラムのコードを書く部分が表示されます。
エディタの中に、以下のコードを書き、保存します。
これが、カレンダーに予定を追加するコードになります。
カレンダーのID部分は、先の手順で作成したカレンダーIDの値に置き換えてください。
// カレンダー連携
function createEvent(e) {
// 送られてきたFormの情報から各項目を抽出
let[timestamp, email, userName, date, productsInfo] = e.values;
// ★ 控えていたGoogleカレンダーのID
let id = 'xxxxxxxxxx@group.calendar.google.com';
// カレンダーのオブジェクトを取得
let calendar = CalendarApp.getCalendarById(id);
// カレンダーにセットするタイトル
let calendarTitle = `${userName}様`
// カレンダーにセットする詳細の内容
let description =
`
顧客名:${userName}
メール:${email}
タイムスタンプ:${timestamp}
希望納期:${date}
商品${productsInfo}
`
let options = {
description: description,
};
// カレンダーに予定を追加
calendar.createAllDayEvent(calendarTitle, new Date(date), options);
}
6. トリガーを作成
プログラムを作成しただけでは、まだ連携はされていません。
続いてはこのプログラムが実行されるタイミングを設定します。
設定はトリガーから行います。
画面左のサイドメニューから、トリガーを選択します。

画面右下の「トリガーを追加」をクリックします。
トリガーの設定に関するモーダルが表示されるので、以下のように設定します。

イベントの種類は「フォーム送信時」にします。
エラー通知設定は任意ですが、エラーだったことがすぐに検知できるように、すぐに受け取る設定にしておきます。
保存を押した際に、権限付与を求められることがあります。複数のサービスを連携させるためには権限が必要になるので、権限を付与します。権限を付与する際に警告が表示されますが、権限を許可したいので「advanced」を選択します。

権限を許可するウィンドウが出ます。警告が出ますが、対象のアプリは自分で作成しているため、「Allow」を押して連携を許可します。

以下の画面のように、追加したトリガーが反映されていれば、設定は完了です。

7. フォームに回答して結果を確認する
実際にフォームに入力して、カレンダーに登録されるかを確認します。以下のように、フォームに注文内容を入力します。

スプレッドシートに注文内容が追加されました。

続いて、Googleカレンダーを確認します。
10月20日に、入力した顧客名でカレンダーが登録されています。

基本的にはほとんど時間差はなく反映されるかと思います。
時間が経ってもカレンダーに反映されない場合、Google Apps Scriptのプログラムがエラーになっている可能性があります。エラーの内容はメールに通知されるか、トリガーの画面から確認することができるので、エラー内容を確認して対応します。
ここまでで、GoogleフォームとGoogleカレンダーを連携することができました。
8. メール送信処理を追加する
続いてはメール送信処理を追加します。
以下は、カレンダー登録に加えて、メール送信処理を追加したスクリプトのコードです。先ほどのコードを以下のコードに置き換えます。adminEmailAddressという変数に設定しているメールアドレス`manager@example.com`は、自社の受注担当者のメールアドレスを想定しています。必要に応じて適宜変更します。
function createEvent(e) {
//////////////////////////////////////////////////////
// カレンダー登録
//////////////////////////////////////////////////////
let[timestamp, email, userName, date, productsInfo] = e.values;
//GoogleカレンダーのID
let id = 'xxxxxxxxxx@group.calendar.google.com';
let calendar = CalendarApp.getCalendarById(id);
let calendarTitle = `${userName}様`
let description =
`
顧客名:${userName}
メール:${email}
タイムスタンプ:${timestamp}
希望納期:${date}
商品${productsInfo}
`
let options = {
description: description,
};
calendar.createAllDayEvent(calendarTitle, new Date(date), options);
//////////////////////////////////////////////////////
// メール送信(担当者向け)
//////////////////////////////////////////////////////
// 担当者のメールアドレス
const adminEmailAddress = 'manager@example.com';
const adminEmailSubject = `【注文】${userName}`;
const adminEmailBody =
`
新しい注文が入りました。
顧客名:${userName}
メール:${email}
希望納期:${date}
商品${productsInfo}
確認をお願いします。
`;
// メール送信処理
GmailApp.sendEmail(adminEmailAddress, adminEmailSubject, adminEmailBody);
//////////////////////////////////////////////////////
// メール送信(顧客向け)
//////////////////////////////////////////////////////
const customerEmailAddress = email;
const customerEmailSubject = `ご注文確認`;
const customerEmailBody =
`
${userName}様
この度はご注文ありがとうございます。
ご注文内容は以下の通りです。
希望納期:${date}
商品${productsInfo}
※このメールは、ご注文いただきますと自動的に送信されます。このメールへの返信はできません。
`;
// メール送信(顧客向け)
GmailApp.sendEmail(customerEmailAddress, customerEmailSubject, customerEmailBody);
}
コードを追加したら保存して、再度Googleフォームから注文情報を送信してみます。すると、カレンダーには登録されましたが、メールは届きません。うまくできていないようです。
9. メール送信の権限を追加する
トリガーを確認すると、以下のようなエラーが表示されていました。

どうやら、メールを送信するための権限が足りていないようです。エラーの中に権限付与を行うリンク「権限を付与するにはここをクリックしてください」があるので、クリックして権限を付与します。
権限付与の方法は、カレンダー連携の時と同じです。警告のポップアップが出ますが、「Advance」に進んで権限を許可してあげます。
10. 確認
再度、Googleフォームから注文情報を送信してみます。
こちらは、顧客向けに送信されたメールです。

こちらは、受注担当者向けのメール。

どちらも正常にメールが送信されていました。これで、Googleフォームの入力からGoogleカレンダーに連携されて、メールの送信まで行えるようになりました。
次なるステップへ
ここから先、どのような効率化や改善ができるでしょうか。
例えば、納品書や請求書を毎回Excelなどを使って手動で作成しているとしたら、事務作業にかなりの時間がかかってしまいますね。
Googleフォームと連携しているスプレッドシートの中で、対象の注文を選択して「納品書作成」というボタンをクリックしたらテンプレートに沿って自動で納品書や請求書が作成されれば非常に楽です。Google Apps Scriptを使えばそのようなことも可能になります。
ただし、金額の計算が複雑になる場合は、それなりの工夫をしなければいけません。また、細かい要件が多く発生すると、Googleフォームやスプレッドシートだけで管理するには限界があります。そうなったら、パッケージソフトを使用したり、独自のシステムを開発する必要が出てくるでしょう。何にどこまでお金をかけ、どこまで効率化するかはそれぞれの組織が判断することですが、業務の内容によっては、大きくコストをかけずとも、既存のツールの組み合わせで効率化できるものも多いです。
上で見てきたように、Google Apps Scriptを使うには、多少のプログラム(JavaScript)の知識が必要になります。しかし、それほど高度なプログラム知識がなくても、基本的な知識だけでサービス間の連携やメール送信なども実現することが可能です。興味があれば是非自分で触ってみたり、周りのエンジニア、IT企業に相談してみてはいかがでしょうか。
