3 時間で学ぶ Google Apps Script 入門 ~スプレッドシートと連携するアプリケーションを開発してみよう|研修コースに参加してみた
今回参加したコースは 3 時間で学ぶ Google Apps Script 入門 ~スプレッドシートと連携するアプリケーションを開発してみよう です。
ノーコードで仕事を自動化することが増えていますね! 私もノーコードツール大好きです。 個人的なお気に入りは Zapier です。
でも、ノーコードだと普段使っている “スプシ” ことスプレッドシートで色々自動化するのは難しい。 例えば、メールでちょちょっと自動配信とか、 Google Analytics からデータを取得してゴニュゴニョしたり、などなど。
今回はそれを実現できる Google Apps Script 、略して GAS でアプリケーションを書いてみよう、というローコード開発入門でした! 開発者ではない一般ビジネスパーソン向けのプログラミング入門もあって、厳選された関数で実際アプリケーションを書いて動かしてみました!
“こんなことできたらいいのに” と思っていたことを「できるかも!」と思えるようになりました!
では、どんなコースだったのか、レポートします!
もくじ
コース情報
想定している受講者 | パソコンの基本操作ができること |
---|---|
受講目標 |
|
講師紹介
このコースではクロノスの 藤丸 卓也 さんが登壇されました。
普段は開発者向けのテクノロジコースで登壇することが多いのですが、今回はローコード分野です。
info_outline クロノスさんの過去の登壇
なお SE カレッジではノーコード、ローコード分野のコース数も増やしています。
Google Workspace とは
改めて、 Google のビジネス向けクラウドサービス、 Google Workspace について簡単に紹介いただきました。
- Gmail / Meet / Calendar / Drive / Forms / Docs / Spreadsheets / Slides などのクラウドサービス
- 共同編集がしやすい
会社での利用もさることながら、個人でも利用することが多いので、皆さんおなじみですね。
ちなみに個人的には記事の原稿をやり取りするのに、会社的に Google Docs が使える方なのか、そうではないのかだけでスピードが変わります。 共同編集のしやすさは圧倒的なので、 Google Docs を使える会社が増えて欲しいと切に願っています m(_ _)m 。 特に大手企業さまはぜひ!
Google Apps Script ( GAS ) とは
本題です。 Google Apps Script 、略して GAS 、通称「ガス」です。
- Google Workspace のサービスの処理を自動化できるスクリプト環境
- JavaScript がベースのスクリプト言語
- Excel の VBA に近い
- Google サービスと連携
- ex. スプレッドシートで管理している顧客リストにメールを送信する
- 外部サービスとの連携も可能
- Slack や LINE など
- ブラウザがあれば動かせる
- Web アプリケーションとして開発・公開できる
- 例えば、スクレイピングすることもできる
- 実行時間や実行回数などに制限がある
個人的には JavaScript がベースになっているのがいいなぁと思うところです。 VBA のように固有のスクリプトは見慣れないので、ちょっと抵抗感があります。
ちなみに、 Microsoft も Excel を操作できる Office スクリプトを公開しました。 こちらは TypeScript がベースです。
気になって TypeScript って調べてみたら、 … うーむ、ホンキの開発者向けですやん。
Google Apps Script でプログラミングの基本を学ぼう!
ここからは GAS でプログラミングしてみましょう!
インストール
まずは開発環境を作ります。 と言っても、 GUI でサクサクなのです。 黒い画面は出てきません。
- Google Workspace Marketplace を開く
- “google apps script” で検索して選択 2022 年 3 月現在、 Marketplace では表示されないため、 Apps Script – Google Apps Script を開きます
- Google アカウントでログイン
- Apps Script を選択
これで環境は整いました!
Hello World
では、プログラミングの定番、 Hello World をやってみましょう!
藤丸さんに事前に用意いただいたサンプルコードをもとにプログラミングします。
function myFunction() {
// Logger.log() で実行ログに表示
Logger.log("Hello, Google!!")
}
実行してみましょう!
タイプし始めると補完が効いていて、とても打ちやすいですね。
なお、実行時にアクセス権限を求められる場合がありますが、アカウント認証をして許可しましょう。
基本構文
続いて、プログラミングの基本を学びます。
- 変数
- 値を格納する箱というイメージ
let message = 'Hello'
- let を書いて変数を宣言する
- message が変数名
- = で代入する
- 文字列
' '
もしくは" "
で囲む
- 算術演算子
+ - * /
function myFunction() {
let sum = 100 + 200
Logger.log(sum) // 300
}
- let と const と var がある
- const は再代入も再宣言もできない
- var は昔の JavaScript の宣言方法
試しに const で宣言した変数に別の値を代入してみます。
function myFunction() {
const sum = 100 + 200
sum = 500
Logger.log(sum)
}
エラーになってしまいますね。
const は何のためにあるんだろうか。 気になって調べてみると constant の略で “定数” という意味だったのですね。 なるほど!
制御文
分岐や繰り返し(ループ)などプログラムの流れを制御する方法を紹介いただきました。
プログラムの流れは 順次 (ただ上から下に処理が進む) / 分岐 / 繰り返し のたった 3 つしかないのですね。
分岐処理
条件によって処理を分ける、 分岐処理 の書き方です。
- if 文を使う
- 別条件は else if で書く
if (条件 1) { // 条件 1 が一致したときの処理 } else if (条件 2) { // 条件 2 が一致しないときの処理 } else { // すべての条件が一致しないときの処理 }
function myFunction() {
let age = 20
let amount = 0
if (age >= 65) {
amout = 1200
} else if (age >= 20) {
amount = 1800
} else {
amout = 1000
}
Logger.log(amount) // 1800
}
繰り返し
条件によってプログラムを繰り返す、 繰り返し の書き方です。
- for 文を使う
for (変数の定義; 繰り返し条件; 繰り返し後の処理) { // 繰り返し行う処理 }
function myFunction() {
// i はカウンタを表すのによく使わる
// ++ で自動で 1 増やす
for (let i = 0; i < 10; i++) {
Logger.log(i)
}
}
実行してみましょう!
配列
これまでは単一の値だけを変数に入れてきましたが、それだけでは複数の値を取り扱うときに、一つ一つ定義するのは大変不便です。
そこで出てくるのが 配列 です
- 複数の値を入れられる
- リストとも言われる
- 要素番号が割り振られる ( 0 から始まるので注意)
let fruits = ["apple", "banana", "cherry"] fruits[0] // "apple"
- 配列から値を取り出すときには for 文をよく使う
function myFunction() {
let array = [100, 200, 300]
let total = 0
for (let i = 0; i < array.length; i++) {
total = total + array[i]
}
Logger.log(total)
}
なるほど、 for 文はこんなときにも使うのですね。
関数
同じ処理を定義して、呼び出して使えるのが 関数 です。 先ほどから何回も出ている Logger.log も関数です。 便利なやつですね!
- 同じ処理を複数書いていると修正があった場合、すべて書き直しが必要
- この同じ処理を切り離すのが関数
- 関数を呼んで処理をする
function
キーワードで宣言する
function myFunction() {
let sum = add(100, 200)
Logger.log(sum)
}
function add(num1, num2) {
let sum = num1 + num2
return sum
}
実行してみましょう!
- 関数名は処理の内容を示すものをつける
- 先頭文字を数字にはできない
- 関数に代入する値を 引数 という
- add 関数の num1 や num2
- 上記のサンプルでは 100 と 200 が入る
- add 関数の num1 や num2
- 関数が返す値を 戻り値 という
return
というキーワードを使う- 戻り値は無くてもよい
関数名をつけるのは、なかなかセンスが要りそうですね。
関数について、さらに補足解説がありました。
- 組み込み関数とカスタム関数がある
- myFunction 関数 はカスタム関数
- Logger.log 関数 は予め用意されている組み込み関数
なるほど、 Logger.log 関数が何も定義しないで使えたのは、そういうことだったのですね。
スプレッドシートと Google Apps Script を連携させてみよう
Excel で VBA を使うように、スプレッドシートと GAS はよく組み合わせて使われます。 記録やデータベース的に使うからでしょうかね。
では、連携させてみましょう!
- スプレッドシートを開く
- メニューから 拡張機能 > Apps Script を選択
- 先ほどと同じ Apps Script のスクリプト画面が表示される
- 自動連携される
function myFunction() {
// JavaScript では . で処理をつなぐ
// Browser という部品にある msgBox 関数を使う
Browser.msgBox('メッセージを表示するよ')
}
これまではスクリプト画面から実行しましたが、スプレッドシートからも実行できます。 ... えっ、マジで。
- 挿入 > 図形描画 で適当な図を書いて保存
- 図の : ボタンから "スクリプトの割当" を選択
- myFunction を入力
- 図をクリックする
おお~、できてます! アプリケーションっぽいですね。
この他にもマクロから実行することもでき、メニューから 拡張機能 > マクロ > マクロをインポート で作った関数を動かせます。
Google Apps Script からスプレッドシートを操作してみよう
さらに実践的な演習に進みます。 スプレッドシートを GAS で操作してみます。
基本的な関数
SpreadsheetApp.getActiveSpreadsheet()
SpreadSheetオブジェクト.getSheetByName()
Sheetオブジェクト.getRange()
function myFunction() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
const sheet = spreadsheet.getSheetByName('シート1')
const range = sheet.getRange('B6')
// getValue 関数でセルの値を取得する
const value = range.getValue()
Browser.msgBox(value)
}
実行してみましょう!
いいですね! 動かしている感が増してきています !!
Spreadsheet.getActiveSheet()
で開いているシートを一発で取れる
基本的な関数としてまとめてもらったものは、いろいろ使えますね!
GAS とスプレッドシートの活用例としてサンプルアプリケーションを作ってみよう
さらに実践的な例として、ここから簡単なタスク管理のアプリケーションを作ってみます!
- 一覧シートと入力シートを作成
- 入力シートのセルの値を取得するコードを書く
function register() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet() // 入力シートの値を取得 const inputSheet = spreadsheet.getSheetByName('入力') // 入力シート (inputSheet) の B2 のセルを指定 (getRange) して値を取得する (getValue) const task = inputSheet.getRange('B2').getValue() const member = inputSheet.getRange('B3').getValue() const date = inputSheet.getRange('B4').getValue() Logger.log(task) Logger.log(member) Logger.log(date) }
入力シートの処理ができたところで、一旦実行してみて、入力シートに値を入れて、動いているか確認してみましょう。
続いて、入力データを受け取って、一覧シートに表示する処理を書いていきます。
- 入力シートの値を一覧シートに転記するコードを書く
getLastRow()
で値が入っている最終行 (数値) を取得できる
// 一覧シートに値を出力する const listSheet = spreadsheet.getSheetByName('一覧') const lastRow = listSheet.getLastRow() listSheet.getRange(lastRow + 1, 1).setValue(task) listSheet.getRange(lastRow + 1, 2).setValue(member) listSheet.getRange(lastRow + 1, 3).setValue(date)
lastRow + 1
で最終行の次の行を指定lastRow + 1, 1
で最終行の次の行の 1 列目を指定- setValue 関数で変数 task, member, date の値をセット
- 入力シートに図形描画で登録ボタンをつくる
- 登録ボタンに register 関数を割り当て
実行してみましょう
とってもアプリケーションな感じです!! また、本当に教えてもらった基本的な関数がほとんどですね!
これならフォーム入力させた値をスプレッドシートから取得して、何か処理する、と言ったデータベース的な使い方もできそうです。
このあと、別のブックから値を取得することもやってみたところで、コースは修了しました。
まとめ
Google Apps Script で基本的なプログラミングを学び、スプレッドシートを使って簡単なアプリケーションの開発に取り組みました。
やってみると、基本的な構文は「ふむふむ」という感じでしたが、スプレッドシートと連携させてみると、全く楽しさが違いました! やっぱりプログラミングはレスポンスが派手になればなるほど、俄然、楽しくなりますね。
また藤丸さんに厳選してもらった関数は、本当に何度も使うものだったので、これから学ぶのにとても便利でした。
ノーコードも便利ですが、特定用途になりがちなので、今回の GAS のようなローコードなら、ほぼ自由にビジネスアプリケーションを作れそうに感じましたね!
ローコードやプログラミングが気になるビジネスパーソンには、とてもオススメです!
label SEカレッジを詳しく知りたいという方はこちらから !!
IT専門の定額制研修 月額28,000円 ~/ 1社 で IT研修 制度を導入できます。
年間 670 講座をほぼ毎日開催中!!
SEプラスにしかないコンテンツや、研修サービスの運営情報を発信しています。