👋

Google App Scriptの活用事例

こんにちは。チームラボのフロントエンド班に所属しています、朴木です。趣味はNHKの連続テレビ小説を毎朝欠かさず鑑賞することです!

今回は、GASこと、Google App Scriptについて基本的な内容紹介したいと思います!
フロントエンドの技術からは少し離れますが、チームラボのフロントエンド班では、仕事をする上で欠かせない強力なツールとなっています。これを機に、皆様もぜひGASを使ってみてください!

この記事のターゲット

GASを始めたい人向けの内容になっています!

  • 触ったことがないが、GASに興味がある
  • Google Workspaceのサービス使っている人
  • スプレッドシートの単純作業にうんざりしている人
  • 基本的なJavaScriptの使い方を知っている人

GASとは?

GASはGoogleのサービスの作業を自動化・効率化する開発プラットフォームです!

  • Google App Scriptの略です。
  • Googleの各種サービスをJavaScriptで操作できるスクリプト言語です。
  • それらの各種サービスを連携し、簡単に自動化することができます。

https://developers.google.com/apps-script?hl=ja

GASでできること

GASはスプレッドシートの操作だけでなく、簡単な静的ページも作ることができ、外部APIとの連携もできます!
以下に、これさえ知っておけばGASライフが充実するような内容をピックアップしました。

1. スプレッドシートの値の入出力

1. スプレッドシートの値の入出力

以下のスクリプトで、値の入出力ができます。他にも様々なメソッドがあります。

コード.gas
/** 入力:「シート1」の「A1」のセルに「teamLab」をセット */
const myFunction = () => {
    SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/XXXXXXX')
        .getSheetByName('シート1')
        .getRange('A1')
        .setValue('teamLab')
}
コード.gas
/** 出力:「シート1」の「A1」のセルの値を取得 */
const myFunction = () => {
    const value = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/XXXXXXX')
      .getSheetByName('シート1')
      .getRange('A1')
      .getValue()
    console.log(value) // → teamLab
}

2. 実行スケジュールの設定

2. 実行スケジュールの設定

以下の手順で設定できます。毎晩実行しておきたい関数がある時などに便利です。

3. 実行ボタンの設置

スプレッドシートに、図形や自作メニュータブを追加し、関数を実行するボタンを作成できます。

3-1. 図形に関数を紐づける

3. 実行ボタンの設置-図形に関数を紐づける

以下の手順で設定できます。

3-2. 自作メニュータブを増やす

3. 実行ボタンの設置-自作メニュータブを増やす

以下のスクリプトで、自作メニュータブを設定できます。メニュータブですと、シート上に置かなくて良いので扱いやすいです。

コード.gas
/** 自作メニュータブを増やす */
const onOpen = () => {
  const ui = SpreadsheetApp.getUi()
  const menu = ui.createMenu("自作メニュータブ");
  menu.addItem("実行する", "myFunction");
  menu.addToUi();
}

※補足:onOpen関数

4. 静的ページの作成

4. 静的ページの作成 - サンプルページ
以下の手順でデプロイすると、静的ページを作成できます。公開範囲はGASの閲覧権限範囲に依存します。

コード.gas
/**
 * NOTE:
 * - 関数名は`doGet`固定
 * - HTML側で<?=hoge ?>と書き、GAS側で template.hoge = ’埋め込みたい文字列’ とを設定すると、htmlに埋め込める。
 */
const doGet = () => {
  const template = HtmlService.createTemplateFromFile('index');
  template.hoge = 'teamlabフロントエンド班'
  return template.evaluate()
}
index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1>テスト</h1>
    <h2>↓埋め込んだ文字列</h2>
    <div class="hoge"><?=hoge ?></div>
  </body>
  <style>
    .hoge {
      color: red;
    }
  </style>
</html>

5. WebAPIの実行

以下のスクリプトで、WebAPIを実行できます。SlackなどのWebhookの実行や、外部の情報を取得したい場合に便利です。

コード.gas
/** slackへ通知するサンプル関数 */
const executeSlackWebhook = () => {
    const requestParams = {
        text: 'GASから通知'
    };
    const options = {
        method: 'post',
        contentType: 'application/json',
        payload: JSON.stringify(requestParams),
    };
    UrlFetchApp.fetch('https://hooks.slack.com/triggers/XXXXXXXXXX', options);
}

GAS実例紹介

チームラボのフロントエンド班では、ほぼ上記で紹介した技術だけで、以下に挙げているようなツールをGASで開発している人もいます!

1. 画面設計書から、単体テストのケースを生成するツール

1-1. 画面設計書から、単体テストのケースを生成するツール

  • 単体テストの目的は「画面設計書の内容が実装に反映されていることの確認」です。
  • 表形式の画面設計書の内容をチェックリストにする作業をGASで自動化しています。
  • これにより、ケースの挙げ忘れ、ケース作成の時間短縮、つまらない作業によるエンジニアの士気低下を防止しています。

2. 便利ツールが搭載された静的ページ

  • ブラウザ上で完結する様々な便利ツール作成しています。
  • 例えば、JSON形式のobjectからYAML形式に変換するツールなどは、以下のCDNを利用してHTMLで作成しています。

https://cdnjs.com/libraries/js-yaml

3. 期限切れのプルリクエストを毎朝Slackに投稿するbot

2-2. 期限切れのプルリクエストを毎朝Slackに投稿するbot

  • GitHub GraphQL APIをfetchし、それをGASで加工し、SlackのWebhookを実行しています。
  • 公式のGitHubのbotよりも柔軟なプルリクエストの状況把握が可能になります。

https://docs.github.com/ja/graphql

4. ガチャ

3. ガチャ
インターンランチガチャ

以下のようなガチャを日常的に利用しています。

  • タスク担当を決めるガチャ(選出回数に応じて調整する機能付き)
  • インターン生とランチにいくメンバーを選出するガチャ(会社付近の店を提案してくれる機能付き)

GAS開発環境

1. 純正のGASエディタ

Google Woekspace 公式
Google Woekspace 公式

  • 基本的にはGASのブラウザエディタを利用します。
  • コーディング中、標準で設定されているクラスや関数のサジェストが表示されます。
  • 一方で、型のサポートやコード整形機能はありません。
  • ちょっとした便利ツールを作るのに最適です。

2. VSCode

VSCode 公式
VSCode 公式

  • 「もっと型安全にTypeScriptを使って開発したい!」という方は、google/claspというライブラリを利用すれば、ローカルのコードエディタで開発可能です。
  • TypeScriptをJavaScriptにコンパイルし、GASの実行環境のクラウド上へpushするという仕組みになっています。
  • Git管理、Jestなどのテスト実行、VSCodeの拡張機能などが利用できます。
  • 一方で、実行結果確認など、デバッグをするためには、pushしてから実行が必要です。
  • 大規模なGAS開発に最適です。

https://github.com/google/clasp

まとめ

  • GASはプチWebアプリなら作れてしまうほど強力です。
  • クラスの使い方やUI操作が直感的なので、使っていればすぐに覚えていきます。
  • この記事以外にも、調べれば多くの情報が見つかります。
  • 皆様も、日常の小さなストレスをGASで解決してみませんか?

最後までお読みいただきありがとうございました!

Discussion