Google Apps Scriptを始めよう。出来ること代表例【GAS】
春、何かを始めるのには良い区切りである季節。新入社員としての武器を作るも由、リスキリングとして修行するも由。会社の為ではなく己の宝とするべく身につける技術は継続力が重要です。
もし何を身につければ良いのか?迷っているのであるならば、低コストで今すぐ初められるGoogle Apps Script(以下、GAS)が最も最適です。今回は自分の経験からGoogle Apps Scriptで出来ることをまとめてみました。
今回利用するサービス
Google Apps Scriptは無償のGoogleアカウントがあれば直ぐにでも始めることが可能です。利用自体も無償ですが、無償のGoogleアカウントと有償サービスのGoogle Workspaceでは差があります。しかし、通常の範囲であればそれを意識することはないでしょう。もし踏み込んでさらに高みを目指すならば、Business Starterを契約して、より多くの機能や管理機能まで手を伸ばしてマスターを目指すと良いでしょう。
GASとは何者なのか?
概要
Google Apps Scriptとは、JavaScriptをベースにGoogle Docsなどの各種アプリを操作できる機能を追加したプログラミング言語です。すでにもう10年以上の歴史があります。自分の場合、2013年のGoogle Apps for Work時代から使い始めています。
JavaScriptベースですので様々なJSの知見をほぼそのまま流用できるという大きなポイントがあり、Microsoft OfficeのVBAのポジションでありながら、VBAでは到底出来ない「ウェブアプリを作成する」事が出来たり、自動実行できたりと非常に高機能なサービスです。JavaScriptであるということは更に鍛えれば、Node.jsといったサーバサイドJavaScriptに挑戦したりChromeの拡張機能を作ってみたりと、その先に挑戦することも可能です。
プログラミング言語と聞くと「ハードル高くて難しそう」という先入観がつきまといます。ですが、VBAも本来はエンジニアではなくデスクワーカーが自分の業務を効率化する為に生まれたもので、他のプログラミング言語はハードルが高いかもしれませんが、VBAやGASはエンジニアでなければ使えないものでは無いのです。
以下の動画は事務職たらこさんの解説動画ですが、事務の現場職の人でもガッツリ初めて書籍まで出すに至っています。これこそが本当のDXであり市民開発者。それを実現できる1つがGoogle Apps Scriptなのです。
Microsoft365との違い
Google WorkspaceのライバルとしてMicrosoft365があります。ローカルのOfficeはこれまでも長い歴史のあるVBAを使って、GASのように様々な業務改善に多大な貢献をしてきました。
しかし、昨今はセキュリティ問題でVBAの利用をデフォルトで禁止にする企業も出始めており(というかMS自体がデフォルトで実行不可にしました)、ポリシーで完全に禁止にするテンプレートなどもあったりします(本来は証明書で制御すれば良いだけなので、これはやり過ぎだと思いますが)。
一方でWeb版のExcel OnlineなどではVBAに変わる「Office Script」なるものが出てきています。VBA後継というポジションですが、現時点ではマクロ的な機能にとどまっており、VBAのように派手になんでも出来るわけではありませんし、そもそも言語体系がTypeScriptに変更されています。
GAS同様にGraph APIを用いればMicrosoft365の各種ウェブサービスを操作できますが、これはWebAPIなので実行する為の環境は自身で用意する必要があります(GASは環境自体用意されています)。
故に現時点では、Microsoft365のDXたる業務改善は「自動化にフォーカス」されたPower Automate DesktopなどのRPAであり、Googleとはだいぶ方向性が異なります。Power Automateは「ノーコードツール」と呼ばれ、基本プログラミングをしないで作業の自動化をするものであり、GASは「ローコードツール」と呼ばれ、自動化を含めてアプリを作成する環境になります。
ローコードツールである
前述の通り、Google Apps Scriptは「ローコードツール」です。立派なプログラミング言語であるため、ノーコードツールとは大きくことなり、それ故に確かに難易度は上です。
但し、ガチモンのプログラミング言語(例えば、C#やObjective-Cなどなど)とは異なり、少ないコードで目的を実現できるよう組まれた言語であり、習得難易度は低めです。素早く、低コストで、手軽に達成を目的としてるので、小規模〜中規模までをカバーする存在です。
Microsoft365のPower Automate Desktopのようなノーコードツールとは異なり「自動化だけにフォーカスした」ものではないため、自動化以外のジャンルにまで手を伸ばすことが可能です。故にアプリケーションを作成することが出来る為、プログラミング的なセンスを鍛えることが可能です。
ノーコードツール導入したけれど、結局うまくいかなかったという事例は山程あります。それはkintoneも例外ではありません(自分の経験だと、ただのフォームアプリに成り果ててました)。一番の大きな阻害要因は「結局はプログラミング的センスが必要」ということになるかと思います。RPA導入してコケてる要因は他にもたくさんあります。
であるならば、最初からプログラミング的センスを鍛えられる「Google Apps Script」のほうが「持ち運びでき応用のできるスキル」としてリスキリングとしては大きくプラスになります(JSですし・・・)。
※ちなみにGoogleにもノーコードツールとしてAppSheetがあります。ただUIがローカライズされていないのが玉に瑕。
GASで出来ること
作業の自動化
マクロで自動化
Excelなどにも備わってるマクロの記録機能。Google Spreadsheetにも備わっており、人間が操作した内容をGoogle Apps Scriptで出力し、再生するとその通り実現してくれるスグレモノ。2018年から搭載された機能ですが、自分が行った作業がどういうコードとして生成されるのか?を学ぶ最初の一歩としては良い教材です(もちろん業務自動化にも貢献します)。
但しこの機能は自動化に特化してる点と、本当に素直に人間の動作の一挙手一投足をコードにしてるだけなので、毎日同じ作業の繰り返しをするケースでは有用なのですが、複雑な動作や条件判定、GASに用意されていない動作(印刷など)は記録することが出来ません。また、VBAのマクロでもそうですが、長い処理を記録した際に思ったような結果にならず止まったということもありえます(キーボードのショートカット機能を併用する必要があるシーンも)。
※マクロの記録で出力されるコードは前述の通り素直に記録されてしまうので、プログラミング的にはしっかりしたコードとは言えないので挙動が遅いことがままあります。
複雑な作業の自動化
ローコードとは言え、JavaScriptは立派なプログラミング言語です。GASはそこにGoogleサービスを操作するメソッドを追加したもの。前述のマクロは操作を再現する自動化だけしか出来ませんが、自身でプログラミングすればカッチリとしたプログラムを作成する事が可能です。
マクロで出来ない「条件判定で別の処理をするであったり、ループで繰り返し処理、後述の他のアプリの操作、そしてそれら一連の流れを結晶化させて、GASが扱えない人、業務が不慣れな人でも高速に正確に処理が出来るようになる。そのための機能です。
企業側からしたらそれそのものが重要な資産になり継続的にコスト削減に貢献するだけじゃなく、せっかく導入したGoogle Workspaceのポテンシャルを120%引き出すことが出来るので、「本物のDX」を実現することが出来ます。そのためにはGASを書ける人材の育成とそれを評価し維持していく体制が必要です。
大規模になってきたら、その時点でより堅実なシステムに移植すればよいので、いきなり大金を掛けてシステム導入してしくじるといったことを防ぐ前段階を実現する概念検証(PoC)という面でもGASがは非常に良い環境です。
Googleサービスを横断して操作
Google Apps Scriptは単純にスプレッドシート上で処理をするというだけじゃなく、ドキュメントやスライド、グループ、メール、ドライブと別のアプリケーションを操作して一連の業務の作業の流れを横断して行うことが可能です。
各種アプリケーションだけじゃなく管理者権限があればGoogle Workspaceの設定そのものを変更するといったことも可能になり、誰かが入社したら自動でアカウント作成⇒メールで通知⇒別のサービスのアカウントを自動で作成であったり、組織変更に伴ってスプシのデータを元にグループのメンバーを一括で入れ替え⇒ドライブのアクセス権限総入れ替え連動みたいな芸当が可能です。人間がやったら二度手間やミス多発な上に膨大な作業量になります。
つまり、事務職の現場の人だけじゃなく管理する情シス側にとっても非常に利のあるツールなのです。
トリガーを使って自動発動
Google Apps Scriptにはトリガーと呼ばれる機能があり、VBAには無い特徴です。パソコンを開いておく必要性すらありません。
- スプレッドシート上でのユーザの操作により自動発動するシンプルトリガー
- Googleフォームに於ける、ユーザがフォームを送信した時に発動する送信時トリガー
- 特定の時刻や日付間隔で自動実行する時間駆動型トリガー
この中でもっともよく利用するのが最後の時間駆動型トリガー。1時間おきに実行であったり、毎晩0時に自動実行であったり、日付や時刻を基準に人間が操作しなくても自動的に作動してくれます。夜間のうちにデータの集計を済ませておくとか、指定の間隔でスプレッドシートの値を元にリマインダーを送ってあげるなどなど。
機能の拡張
Googleフォームに自動応答機能をつける
現在のGoogleフォームはユーザが送信時に自動的に「ありがとうメール」のような送信した内容を自動応答で返す機能が備わっています。しかし既定のメッセージを返すだけの機能であるため、もうちょと綺羅びやかにユーザごとにきちんとしたメッセージを送りたいであったり、申請した内容に基づくPDFを生成して返してあげるなどが出来ません。
この部分を可能にするのがGoogle Apps Scriptです。
その他にもGoogleフォームの質問内容自体をランダムに書き換えるといったフォームそのものを操作する事も可能で、使い所が結構多いのではないかと思います。
スプレッドシートの関数を作れる
Excelでも実は自分オリジナルの関数である「ユーザ定義関数」を作れることはあまり知られていません。GASでも同様にスプレッドシート用の関数を自分で作成することが可能です。
主に作り理由は、関数の入れ子をやり過ぎてIF関数が何重にも入っていてもはや何をしているのかわからん」といったようなケースの解決であったり、標準関数では備わっていないものを自作することによく利用されています。後述のアドオン化することでそのスプレッドシート以外でも自作関数が使えるようになるので、自分の関数を他人に簡単に使ってもらえる特徴もあります。
プログラミング量が非常に小さいので、GASの学習をする最初の一歩として非常に良いもので、それでいて日常の業務で即役に立つため、手応えを実感できます。
各種アプリのアドオンを作れる
GASにはそこで作り上げた機能を丸ごと塊にして他人に配布することの出来る「アドオン」という機能が備わっています。Marketplaceにて様々なアプリ化されたアドオンが配布されています。
しかしマケプレでは日本人向けのアドオンはあまり見当たりません。そこでGASで自身で作って「組織内限定で配布する」といったことが可能になっています。自分の作り上げた業務改善の手順や機能を他の部署やグループ会社で使ってもらえるわけです。
アドオンとして考えられるユースケースは以下のようなものが挙げられます。
- Googleスプレッドシート向け(ユーザ定義関数を詰め込んだものや、一定の処理を装備した自動化を実現など)
- Gmail向け(メールからBacklogへタスク登録したり、過去メールを一括アーカイブしたり、添付ファイルをドライブに自動保存など)
- Googleドキュメント向け(AIサービスに投げて文章校正や翻訳、差し込みPDF生成など)
- Googleスライド向け(AIサービスに投げて画像自動生成や、テンプレを元にプレゼン資料自動作成など)
- Googleフォーム向け(フォーム送信時の様々な自動処理など)
などなど。アイデア次第で様々なものが作れるだけじゃなく、個別にコードを書く必要がなくなるので、汎用で通用するような機能はどんどんアドオン化しておくと車輪の再発明をする必要がなくなります。
ライブラリを使う
プログラムを作成するといっても自分には高度な技術力がない・・・毎回日付の処理をしてるけれど毎回扱いが面倒で失敗する・・・そんな人は多いです。自分も決してすぐれた技術があるわけじゃありません。
そんなプログラミングを助けてくれるものがライブラリ。世界中の多くの凄腕プログラマな人が作って無償公開してくれてるもので、前述のアドオンに似ているようですが、こちらはコードが提供で提供されてるもので、これ単体ではどうにもなりません。このライブラリを使って自分でアプリを簡単に構築することが可能になります。
日付時刻の扱いが楽になったり、ウェブサービスを簡単に扱えるようになったり、自分に足りない能力をお助けしてくれます。
アプリケーション作成
ウェブアプリを作ることが出来ます
GASは各種サービス上で動かしたり自動化するだけのものではありません。ウェブアプリケーションを作って公開することが可能です。VBAなどでは到底できない機能の1つで、Microsoft365にも無い機能(Microsoft365の場合はAzure上で、AppService等のサービスを別途契約した上で、自分自身でGraph APIなどやプログラミング言語で構築する必要があります)。
自分が作成して好評だったものを例にあげると
- フリーアドレス対応の座席表アプリ
- Googleフォームでは出来ない高度なフォームを実現する申請フォームアプリ
- 標準では用意されていない社内掲示板アプリ
- Googleサイト用のちょっとした機能を実現するガジェットアプリ
- ガッツリ業務専用で作り込むデータベースアプリ
アイデア次第で、オリジナルの社内用のウェブアプリを構築することができるので、社内の課題がある度に外部サービスを契約するソリューション地獄(コストの固定化と増大、管理手間の増大、辞めることができなくなるベンダーロックインなど)に陥る前にまず自分たちでやってみることが可能です。その課題、GASでチャレンジしてみませんか?
外部サービスは便利ですがキャッシュが外に漏れ出て、一方で社内にはノウハウが溜まらない原因です(かといって、経理や人事のシステムを作るのは愚行ですが)。
チャットボットを作ることが出来ます
Google Chatはコミュニケーションのツールとしてだけではなく、作業結果の通知先として利用したりと結構利用頻度が高いです(Teamsに比べると全然低機能だけれど)。
しかし、そこに自分自身で機能を追加して「色々と解答してくれるチャットボット」を作れるとしたら?それがGASで実現可能です。GCP側にも多少の準備は必要ですが、そもそもこのチャットボットを外注で導入すると「かなりいい金額になる上に驚くほどしょぼい」ということがこれまで何度もありました。結果、使われなくなり打ち捨てられたり。
そこをGoogle GeminiやChatGPTといった外部サービスを組み合わせることで、低コストで高機能なチャットボットを自分たちで構築可能になります。
外部連携
外部サービスと連携する
世の中にはたくさんのウェブサービスが溢れています。会計ソフトのFreeeであったり、人事管理ソフトであるSmartHR、プロジェクト管理のBacklogであったり、会議ツールのZoomなどなど。
それら有名どころのウェブサービスは人が操作するのではなくプログラムから操作する為の「REST API(WebAPI)」と呼ばれる仕組みを備えています。人間がいちいち画面でポチポチするのではなくコードでガッツリ高速で正確に操作が可能になるため、よく「外部連携」と言われています。
人間が行わないので作業漏れがなくなったり、人間では到底出来ない芸当が可能となるため、単にウェブサービスを導入するだけだと業務負荷が高まりますが、REST APIを操作する連携を加えることで大幅に業務負荷を下げることが可能になります。
GASからもこれらのAPIを叩いて命令したり、一括処理したり、自動連動させたり様々なことが出来るようになっています(VBAでコレをやるのはなかなかに大変です)。
※過去自分が取り組んだ事例としては、全社員1万人宛てにそれぞれのユーザ毎に異なる勤怠の過不足に関する通知メールをREST APIを使って一斉配信などなど。こんなの人間業じゃとても出来ません。
独自のウェブAPIを作ることが出来る
逆にGoogle Apps Script側でウェブAPIを構築して他のプログラムから利用するといったことも可能になります。問い合わせてきた内容に応じて答えを返してみたり、それをきっかけに自動処理を実行したり。
過去自分が作った事例ですと、Google Earthを操作した結果の緯度経度を送って、その緯度経度の範囲内にあるお店を返すというAPI。移動する度に問い合わせが行われ、ソレに基づいて検索、KMLを生成してGoogle Earthに返すという仕組みです。
Apps Script APIを利用することで直接的にGASの関数を叩くといったことも出来るので、社内に既にあるプログラムに、GASを叩いてGoogleサービスを操作する機能を追加することが可能になります。
VBAから使ってみる
前述の自作のAPIをGASで用意したり、Googleが用意してるREST APIを使ってGoogleサービスを操作をVBA側から行うということも可能です。ローカルのExcelとクラウドのスプレッドシートとを連携させたり、ファイルをやり取りしたり。
但しかなりハードルが高いので実装するのはなかなかに手間が掛かります。でも実現できるとGASと違って、実行時間制限が無いのでローカル環境をVBAは担当できるのでGASだけでは出来ない芸当が可能になります。
便利な拡張機能
Github Assistant
Google Apps Scriptは単体ではソースコード管理や、コードのインポート/エクスポートといった機能を持ち合わせていません。そこで利用するのがGithub Assistant。
Chromeの拡張機能を利用して、GASのスクリプトエディタ画面に追加機能をもたらし、指定のGithubのリポジトリにPushしたり、インポートしたりすることが可能になります。複数名での開発をする場合には必須のツールと言えます。
以下のエントリーで詳しく解説しています。
Black Apps Script
Google Apps Scriptのスクリプトエディタにはいくつかの弱点があります。
- 旧エディタにはあった「複数のファイルをまたいで検索」する機能がありません
- 白い画面だけでダークモードが搭載されていません
- エディタのサイドバーやツールバーは常に表示されたままになります。
- 変更箇所を出すDiffの機能がありません
- VSCodeのように現在コード全体のどこを見てるのか?というコードマップが備わっていません。
そこでこれらを保管する為の拡張機能としてBlack Apps Scriptが公開されています。インストールするだけで上記の課題が解決します。ホームページはこちら。
とりわけ複数ファイルをまたいで検索は、通常のCtrl+Fで検索をし、置換の項目を出したら右側に「0/3 ← →」みたいな表示が出るので、→キーをクリックすると現在見てるファイル以外も検索してジャンプしてくれるようになります。これだけでも入れる価値があります。
図:スクリプトエディタが強化されます