Google Apps Scriptを活用した自動化と具体的な活用事例
目次
Google Apps Script(GAS)とは何か
GASという言葉がよく聞かれるようになりましたが、この言葉を聞いて、皆さんはどのようなイメージを思い浮かべるでしょうか。
「スクリプト」と言うとプログラミングのイメージがわいて難しそう、Googleという単語がついているけれども、Google検索と何が違うんだろう?と思う方もいらっしゃるでしょう。
これからGASに挑戦しようと思っておられる方は、是非この記事を参考にしてみてください。この記事では、GASの初心者の方向けにわかりやすく説明することを念頭に置いています。
それでは説明していきます。
GASはGoogleが開発・提供しているJavaScript ベースのスクリプト言語です。理解しておくとよいのは、GASとJavaScriptとは違うということです。インストール作業は不要で、スクリプトはGoogleのサーバー上で実行されます。
JavaScriptは、Webサービスを作ろうと思ったときに絶対に避けては通れない、人気のあるプログラミング言語です。そのため、多くのエンジニアにとって学習コストが低いこともメリットです。
JavaScriptの経験があるエンジニアであれば、抵抗なくGASになじむことができることでしょう。
GASで自動化できること
ルーチンワークの自動化
毎日同じ時間に、パソコンを使っての事務作業をしていることはないでしょうか。そのようなルーチンワークをGASを活用することによって、ルーチンワークのリマインダーを作ることができます。
例えば、データを本社に報告したら、Googleスプレッドシートに「報告済」と記入するようなGASのスクリプトを記述します。Googleスプレッドシートの中に、毎週金曜日午前中までに「報告済」と記入されていなければリマインドメールを送付する設定をすることでリマインダーをつくることができます。
ウェブスクレイピング
ウェブスクレイピングとは、インターネット上から特定の情報を検索し、データを収集することを指します。GASによるウェブスクレイピングが実現可能です。
GASのスクリプトエディタ上でトリガー実行によるスケジュール登録もできます。
- 1日1回に実行
- 2時間ごとに実行
- 毎週○曜日に実行
といった形式で端末をオフの状態でもスクレイピングが実行可能です。
GASはスクレイピング環境の構築しやすさと費用がかからないという点で大きなメリットがあります。
GASの活用事例
ここでは、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日当たりに処理できる回数の上限があるため、同じプログラムを一定回数以上実行することができません。
上限回数を超える回数の処理を行う場合は対策が必要となります。
まとめ
GASを有効に活用することで、スプレッドシートなどと連動した自動化を行うことができます。ウェブスクレイピングやメールの自動送信のリマインドも可能です。
是非この記事の内容を活用し、GASに挑戦してみてください!