更新日

Google Apps Scriptを活用した自動化と具体的な活用事例

Google Apps Script(GAS)とは何か

GASという言葉がよく聞かれるようになりましたが、この言葉を聞いて、皆さんはどのようなイメージを思い浮かべるでしょうか。

「スクリプト」と言うとプログラミングのイメージがわいて難しそう、Googleという単語がついているけれども、Google検索と何が違うんだろう?と思う方もいらっしゃるでしょう。

これからGASに挑戦しようと思っておられる方は、是非この記事を参考にしてみてください。この記事では、GASの初心者の方向けにわかりやすく説明することを念頭に置いています。

それでは説明していきます。

GASはGoogleが開発・提供しているJavaScript ベースのスクリプト言語です。理解しておくとよいのは、GASとJavaScriptとは違うということです。インストール作業は不要で、スクリプトはGoogleのサーバー上で実行されます。

JavaScriptは、Webサービスを作ろうと思ったときに絶対に避けては通れない、人気のあるプログラミング言語です。そのため、多くのエンジニアにとって学習コストが低いこともメリットです。

JavaScriptの経験があるエンジニアであれば、抵抗なくGASになじむことができることでしょう。

\ ログインしなくても検討機能が使える♪ /
JavaScriptの案件を見てみる

GASで自動化できること

ルーチンワークの自動化

毎日同じ時間に、パソコンを使っての事務作業をしていることはないでしょうか。そのようなルーチンワークをGASを活用することによって、ルーチンワークのリマインダーを作ることができます。

例えば、データを本社に報告したら、Googleスプレッドシートに「報告済」と記入するようなGASのスクリプトを記述します。Googleスプレッドシートの中に、毎週金曜日午前中までに「報告済」と記入されていなければリマインドメールを送付する設定をすることでリマインダーをつくることができます。

ウェブスクレイピング

ウェブスクレイピングとは、インターネット上から特定の情報を検索し、データを収集することを指します。GASによるウェブスクレイピングが実現可能です。

GASのスクリプトエディタ上でトリガー実行によるスケジュール登録もできます。

  • 1日1回に実行
  • 2時間ごとに実行
  • 毎週○曜日に実行

といった形式で端末をオフの状態でもスクレイピングが実行可能です。
GASはスクレイピング環境の構築しやすさと費用がかからないという点で大きなメリットがあります。

GASの活用事例

ここでは、GASを実際に活用する事例をご紹介します。

営業日報の自動作成・送信

事例

ある企業では、営業担当者が毎日、訪問したクライアント情報をExcelで管理し、上司へメールで報告していました。しかし、入力作業に時間がかかり、情報の集計も手作業だったため、業務が煩雑になっていました。

GASによる解決方法

  1. Googleフォームを作成し、営業担当者が訪問内容(クライアント名、商談内容、次回アクション)を入力
  2. GASを使い、フォームの回答がスプレッドシートに自動で蓄積
  3. 毎日17時にGASがスプレッドシートのデータを整理し、Googleドキュメントに日報を自動作成
  4. 作成された日報をGmail経由で上司に自動送信

結果

営業担当者の作業時間が大幅に削減され、上司もリアルタイムで報告を確認できるようになり、情報共有の効率が向上。

経費精算のワークフロー自動化

事例

従業員が経費精算の申請を行う際、紙の申請書を提出し、上司が確認後、経理部に送付するという流れだったが、処理が遅れがちで、承認フローが不透明になっていた。

GASによる解決方法

  1. Googleフォームを作成し、従業員が経費精算の申請をオンラインで入力(領収書の写真添付も可能)
  2. GASが申請内容をスプレッドシートに記録し、指定された上司に承認リクエストをメールで自動送信
  3. 上司が承認ボタンをクリックすると、GASが経理部に自動で通知を送る
  4. 承認履歴もスプレッドシートに記録し、処理の透明性を確保

結果

営業担当者の作業時間が大幅に削減され、上司もリアルタイムで報告を確認できるようになり、情報共有の効率が向上。

顧客問い合わせ対応の自動振り分け

事例

サポート窓口に届く問い合わせメールを、担当者が手動で振り分けていたが、対応の遅れや割り当てミスが発生していた。

GASによる解決方法

  1. GASを利用して、Gmailの受信トレイを監視
  2. メールの件名や本文からキーワードを抽出し、対応部署を自動判別
  3. 問い合わせ内容をスプレッドシートに記録し、担当者ごとに振り分け
  4. GASが担当者にメール通知し、対応状況を記録
  5. 一定期間返答がない場合、GASがリマインドメールを自動送信

結果

問い合わせの割り当てミスが減り、対応スピードが向上。業務の負担が軽減し、顧客満足度も向上。

勤怠管理

企業における勤怠管理には面倒さも付きまといます。そのような面倒な作業をGASによって管理することができます。

GoogleスプレッドシートとGASを使った勤怠管理を考えていきましょう。

GASを使ってスプレッドシートを読み込む関数はいくつか用意されています。

現在開いているアクティブなシートを読み込む・・・getActiveSpreadSheet()

idからスプレッドシートを読み込む・・・openById(id)

urlからスプレッドシートを読み込む・・・openByUrl(url)

GASからスプレッドシートに書き込むためにはいくつかの関数が用意されています。

どのセルに書き込むのか指定・・・getRange()

書き込む処理・・・setValue()

次は書き込むスプレッドシートを作成します。出勤時間と退勤時間に値が書き込まれると、休憩時間を引いた労働時間が表示されるような計算式をつくります。

以下、サンプルコードです。

const main = () => {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  const dates = sheet.getRange('A:A').getValues();
  // 書き込む行を検索
  const row = findTargetRow(dates, new Date(new Date().setHours(0, 0, 0, 0)));
  // 出勤時間のセル取得
  const attendanceTimeCell = sheet.getRange(`B${row}`);
  // 退勤時間のセル取得
  const leaveTimeCell = sheet.getRange(`C${row}`);

  const today = new Date();
  const time = today.getHours() + ':' +  today.getMinutes();
  
  switch (true) {
    case isEmpty(attendanceTimeCell):
      attendanceTimeCell.setValue(time);
      break;
    case isEmpty(leaveTimeCell):
      leaveTimeCell.setValue(time);
      break;
    default:
  }
}

const findTargetRow = (vals, today) => {
  const index = vals.findIndex((date) => {
    return date[date.length - 1].toLocaleString() === today.toLocaleString();
  })
  return index + 1;
}

const isEmpty = (cell) => {
  return cell.getValue() === '';
}

メールの自動化

チャットワークなどのクラウドサービスが普及してきていますが、まだまだメールをビジネスで使われている方も多いでしょう。

GASを使って自動メール送信を行うことができます。
この例では、始業メールを’hoge@example.co.jp’に送ります。
画面上部メニューから実行する関数を選択し、実行ボタンを押すと実際に動作します。
以下を用意します。

  • 送信先のメールアドレス (to)
  • メールのタイトル (title)
  • メールの本文 (body)

サンプルコードで使用している関数をいくつかご紹介します。

特定の日の月を取得する・・・getMonth()

特定の日の日付を取得する・・・getDate()

エイリアスとして設定されているメールのリストを取得する・・・GmailApp.getAliases()

電子メールを送信する・・・GmailApp.sendEmail()

以下、サンプルコードです。

//メイン関数
function mail() {
  var today = new Date();
  var array = ['日','月','火','水','木', '金', '土'];
  var to = 'hoge@example.co.jp'; //送信先のメールアドレスに適宜変更して下さい。
  var title = (today.getMonth()+1) + "月" + today.getDate() + "日" + "("+ array[today.getDay()] + "曜日)" + " 9:00から始業します。";
  var body = (today.getMonth()+1) + "月" + today.getDate() + "日" + "("+ array[today.getDay()] + "曜日)" + " 9:00から始業します。\n";
  var aliases = GmailApp.getAliases();
  GmailApp.sendEmail(to, title, body, {'from': aliases[0], 'name': 'Taro Yamada'});//「name」は送信者の名前に適宜変更して下さい。
}

//就業日かどうかの判定関数
function isBusinessDay(date){
  if (date.getDay() == 0 || date.getDay() == 6) {
    return false;
  }
  const calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
  if(calJa.getEventsForDay(date).length > 0){
    return false;
  }
  return true;
}

//トリガーセット関数
function setTrigger(){
  delTrigger();
  var setTime = new Date();
  setTime.setHours(9);
  setTime.setMinutes(0);
  if (isBusinessDay(setTime)){
    ScriptApp.newTrigger('mail').timeBased().at(setTime).create();
  }
}

//トリガー削除関数
function delTrigger() {
    var triggers = ScriptApp.getProjectTriggers();
    for(var i=0; i < triggers.length; i++) {
        if (triggers[i].getHandlerFunction() == "mail") {
            ScriptApp.deleteTrigger(triggers[i]);
        }
    }
}

GASのメリット

GASのメリットをご紹介します。

ユーザーが多い

利用にあたってのハードルが低く、利用ユーザーが多い点もメリットです。

ユーザーが多い言語は提供元のサポートが長く続く為、バージョンアップの打ち切りや、セキュリティメンテナンスの停止などが発生しづらく、利用者側のリスクが低くなります。

また、ユーザーが多い事で基礎的な操作から高度な構成まで様々なサンプルがネット上に出回っています。
その為、エンジニアはもちろん初学者にとっても手を付けやすい環境になっていると言えます。

様々なGoogleサービスとの連携

上記で取り上げたGoogleスプレッドシート以外にも、Googleドキュメントをはじめ、様々なGoogleサービスとの連携が可能な点が魅力です。
日常的に使っているGoogleサービスと連携させることによって、それらのサービスをより便利にすることができます。

GASのデメリット

GASのデメリットをご紹介します。

実行時間の制約

GASを実行することのできる1日当たりの時間が制約されているため、長時間の実行が必要なプログラムは実行することができません。
実行時間が制限されることによって、実現したいことができない可能性を考慮するとよいでしょう。

処理回数の上限がある

1日当たりに処理できる回数の上限があるため、同じプログラムを一定回数以上実行することができません。
上限回数を超える回数の処理を行う場合は対策が必要となります。

\ ログインしなくても検討機能が使える♪ /
JavaScriptの案件を見てみる

まとめ

GASを有効に活用することで、スプレッドシートなどと連動した自動化を行うことができます。ウェブスクレイピングやメールの自動送信のリマインドも可能です。

是非この記事の内容を活用し、GASに挑戦してみてください!