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

Google Apps Script(GAS)とは何か

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

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

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

それでは説明していきます。
公式リンク
https://developers.google.com/apps-script

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

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

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

\ ログインしなくても検討機能が使える♪ /
新着のエンジニア案件を見てみる

GASで自動化できること

1.ルーチンワークの自動化

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

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

2.ウェブスクレイピング

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

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

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

といった形式で端末をオフの状態でもスクレイピングが実行可能です。

GASはスクレイピング環境の構築しやすさと費用がかからないという点で大きなメリットがあります。

GASの活用事例

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

1.勤怠管理

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

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

GASを使ってスプレッドシートを読み込む関数はいくつか用意されています。
現在開いているアクティブなシートを読み込む・・・getActiveSpreadSheet()
公式リンク
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#getactivespreadsheet

idからスプレッドシートを読み込む・・・openById(id)
公式リンク
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyidid

urlからスプレッドシートを読み込む・・・openByUrl(url)
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyurlurl

GASからスプレッドシートに書き込むためにはいくつかの関数が用意されています。
どのセルに書き込むのか指定・・・getRange()
公式リンク
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow,-column

書き込む処理・・・setValue()
公式リンク
https://developers.google.com/apps-script/reference/spreadsheet/range#setvaluevalue

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

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

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() === '';
 }



2.メールの自動化

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

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

以下を用意します。

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

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

特定の日の月を取得する・・・getMonth()
公式リンク
https://developers.google.com/apps-script/reference/jdbc/jdbc-date?hl=en#getdate

特定の日の日付を取得する・・・getDate()
公式リンク
https://developers.google.com/apps-script/reference/jdbc/jdbc-date?hl=en#getdate

エイリアスとして設定されているメールのリストを取得する・・・GmailApp.getAliases()
公式リンク
https://developers.google.com/apps-script/reference/gmail/gmail-app#getaliases

電子メールを送信する・・・GmailApp.sendEmail()
公式リンク
https://developers.google.com/apps-script/reference/gmail/gmail-app#sendemailrecipient,-subject,-body,-options

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

//メイン関数
 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のメリットをご紹介します。

1.ユーザーが多い

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

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

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

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

上記で取り上げたGoogleスプレッドシート以外にも、Googleドキュメントをはじめ、様々なGoogleサービスとの連携が可能な点が魅力です。

日常的に使っているGoogleサービスと連携させることによって、それらのサービスをより便利にすることができます。

GASのデメリット

GASのデメリットをご紹介します。
5.1.実行時間の制約
GASを実行することのできる1日当たりの時間が制約されているため、長時間の実行が必要なプログラムは実行することができません。

実行時間が制限されることによって、実現したいことができない可能性を考慮するとよいでしょう。

2.処理回数の上限がある

1日当たりに処理できる回数の上限があるため、同じプログラムを一定回数以上実行することができません。

上限回数を超える回数の処理を行う場合は対策が必要となります。

\ ログインしなくても検討機能が使える♪ /
新着のエンジニア案件を見てみる

まとめ

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

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

【お知らせ】 現在、エンジニアルートではフリーエンジニアを中心とした、フリーランスの お仕事紹介、お悩み相談を承っております。

一対一のカウンセリングに基づき、スキルやキャリアプランなどのご要望をお伺いしピッタリの案件をご提案します。ご参画中のご相談・節税対策、適正な給与なのか知りたい、マージンを下げたいなど何でもサポートをいたします。
案件獲得までには早ければ1〜3日、平均的に2週間以内には複数案件から選べる状況になっています。将来的な独立の相談のみでも承っております。お気軽な気持ちでご登録ください。 ↓フリーランスを考えてる方やお仕事をご要望、面接指導などをご希望の方は、下記バナーより新規登録をお待ちしております。非公開求人多数です。

よく読まれている記事

「技術について開発言語-ツール情報」でよく読まれている記事