Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

5分で理解する Google Apps Script

はじめに

Google Apps Script(以降、GAS)はGoogleによって開発されたスクリプト言語になります。

業務でGoogleサービスを利用している場合、GASを用いることで様々な業務効率化を行うことができます。

本記事ではGASについて最速で理解することを目的に、最低限必要な知識についてまとめています。

GAS概要

GASを始めるのに必要なのはGoogleアカウントのみです。

Googleのプラットフォーム上で動作するため、実行環境も不要です。

JavaScriptを基に作られているため、JavaScriptを知っている人なら簡単に使い始めることができます。また、学習コストも低いので非エンジニアの方でも習得して業務に活用することもできます。

GASの活用

要約すると以下の様なことができます。

  • 作成したスクリプトを使用したマクロの実行
  • スプレッドシートからのメール一括送信
  • Gmailに届いたメールに対するアクションの実行
  • フォーム入力後、Gmailから自動返信
  • カレンダーとの連携
  • Webスクレイピングして収集したデータをスプレッドシートに入力
  • スプレッドシートに入力後、外部APIと連携してWebhookで通知

注意事項

GASを使用する際の注意事項は以下になります。

  • JavaScriptとの違い
    GASはサーバーサイドで実行されるため、JavaScriptが持つWinodwオブジェクトなどの関数は実行できませんん。
  • 実行制限
    Apps Scriptサービスには、一部の機能に1日あたりの割り当てと制限があります。クォータまたは制限を超えると、スクリプトは例外をスローし、実行が停止します。具体的には、実行時間(6分)や、実行回数に制限が設定されています。また、自動でスクリプトを起動するトリガー機能についても制限があます。制限の詳細については、Quotas for Google Servicesを参照。ざっくり言うと、Google Workspace(旧 G Suite)のアカウントの場合、無料アカウントに比べて、実行時の制限が違います。

基本的な使い方

スクリプトエディタの起動

はじめにスプレッドシートを開き、画面上部のツールから、スクリプトエディタを起動します。スクリプトエディタが表示されない場合は、Excelファイルでないことを確認してください。

スクリーンショット 2021-01-30 16.25.57.png

スクリプトエディタが起動します。

スクリーンショット 2021-01-30 16.26.37.png

タイムゾーンの設定

スクリプトエディタを起動したデフォルトの状態では、タイムゾーンが日本時間になっていません。タイムゾーンを日本時間に変更するための方法について以下に記載します。

まずは以下のコードを実行し、現在のタイムゾーンを確認します。

スクリーンショット 2021-01-30 18.27.25.png

画面左ペインからプロジジェクトの設定を開きます。

スクリーンショット 2021-01-30 18.27.34.png

「appsscript.json」マニフェスト ファイルをエディタで表示するにチェックを入れます。

スクリーンショット 2021-01-30 18.27.42.png

画面左ペインからエディタを選択すると、appsscript.jsonが表示されていることが確認できます。また、timeZoneAmerica/New_Yorkになっていることが確認できます。

スクリーンショット 2021-01-30 18.27.55.png

timeZoneを日本時間であるAsia/Tokyoに変更して保存ます。

スクリーンショット 2021-01-30 18.28.12.png

再度、先程のコードを実行すると、タイムゾーンが日本時間に変更されたことが確認できます。

スクリーンショット 2021-01-30 18.28.29.png

ライブラリの追加

HTMLからデータを抽出することができるParserライブラリを例に解説します。
ParserはGoogleが公開している公式のライブラリになります。
Ivan KutilというGoogleのDeveloperの方が開発しています。

画面左ペインのエディタの中にあるライブラリから、+のアイコンをクリックすると、ライブラリの追加画面が表示されます。

スクリーンショット 2021-01-30 16.26.44.png

以下のスクリプトIDを入力し、「検索」ボタンをクリックします。

1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw

スクリーンショット 2021-01-30 16.26.53.png

Parserが表示されます。

スクリーンショット 2021-01-30 16.27.01.png

バージョンを8に変更して、「追加」ボタンをクリックします。

スクリーンショット 2021-01-30 16.27.08.png

ライブラリにParserが追加されます。

スクリーンショット 2021-01-30 16.27.16.png

スプレッドシートの読み取り

A1にfoo、A2にvarと入力しています。

スクリーンショット 2021-01-31 23.45.59.png

スクリプトエディタで以下のコードを入力します。

  • スプレッドシートの読み取り
function myFunction() {
  /*アクティブなシート取得*/
  var sheet=SpreadsheetApp.getActiveSheet();

  /*getRangeメソッドで操作するセルの範囲を指定*/
  var range=sheet.getRange("A1:A5");

  /*getRangeメソッドで指定したA1を起点(相対パス)に、getCellメソッドで行番号と列番号を指定してセルの値を取得*/
  var cell=range.getCell(1,1).getValue();
  console.log(cell)
}

初回の場合は以下の様な承認を求めるメッセージが出力されるため、「権限を確認」をクリックします。

スクリーンショット 2021-01-31 23.46.29.png

メールアドレスを選択します。

スクリーンショット 2021-01-31 23.46.36.png

「詳細」をクリックします。

スクリーンショット 2021-01-31 23.46.44.png

「※スプレッドシートのファイル名(安全ではないページ)」に移動をクリックします。

スクリーンショット 2021-01-31 23.46.51.png

「許可」をクリックします。

スクリーンショット 2021-01-31 23.46.59.png

スクリプトが実行されます。
consolelogに、A1のセルの値であるfooが出力されたことが確認できます。

スクリーンショット 2021-01-31 23.47.08.png

スプレッドシートの書き込み

指定したセルに入力する場合の例になります。
以下のコードを実行します。

  • スプレッドシートの書き込み
function myFunction() {
  /*アクティブなシート取得*/
  var sheet=SpreadsheetApp.getActiveSheet();

  /*getRangeメソッドで操作するセルの範囲を指定*/
  var range=sheet.getRange("A1:A5");

  /*setValueメソッドでA1を起点(相対パス)に、行番号と列番号指定してセルに書き出し*/
  var cell=sheet.getRange(4,1).setValue("test");
}

スクリーンショット 2021-01-31 23.47.58.png

A4のセルに値が入力されたことが確認できます。

スクリーンショット 2021-01-31 23.48.13.png

スクリプトの設定方法

作成したスクリプトはApps Scriptのエディタ画面から即時に実行して試すこともできますが、実際に業務で運用する場合は何かをトリガーにして使いたいと思います。その様な場面でのスクリプトの設定方法ついて以下に記載します。

図形にスクリプトを割り当てる

図形にスクリプトを割り当てることで、誰でも作成したスクリプトを実行することができます。
例えば、スプレッドシートの更新が終わったタイミングで担当者に通知したい状況で使えます。

はじめに図形を作成します。

スクリーンショット 2021-02-01 21.45.03.png

スクリプトを割り当てたい図形を選択して「スクリプトを割り当て」をクリックします。

スクリーンショット 2021-02-01 21.45.13.png

図形に割り当てたいスクリプトのスクリプト名を入力して「OK」をクリックします。

スクリーンショット 2021-02-01 21.46.01.png

Gmailの送信スクリプトを割り当てている場合は、スクリプトが実行されてメールが送信されます。

スクリーンショット 2021-02-01 21.48.22.png

トリガーの作成

スプレッドシートを起動したタイミングなど、実行するタイミングをコントロールするためにはトリガーを作成して設定します。

画面左ペインからトリガーを選択して、「トリガーを追加」をクリックします。

スクリーンショット 2021-02-01 21.49.07.png

トリガーの設定画面が開きます。

スクリーンショット 2021-02-01 21.49.27.png

イベントのソースを選択で「スプレッドシートから」の場合、スプレッドシートを起動した時や、スプレッドシートを編集したタイミングをトリガーにしてスクリプトの実行ができます。

スクリーンショット 2021-02-01 22.08.05.png

スクリプトの実行を時間ドリブンで実行したい場合は、イベントのソースを選択のプルダウンをクリックして「時間主導型」に変更します。

スクリーンショット 2021-02-01 22.07.58.png

作成したトリガーが表示されます。

スクリーンショット 2021-02-01 21.49.39.png

Webスクレイピング

上記で解説したParserライブラリを使用することで、簡単なWebスクレイピングを行うことができます。

Webサービスなど他のリソースにアクセスするためには、URL Fetch Serviceサービスを使用します。

具体的にはUrlFetchAppクラスを使用して、HTTPクライアントしてリクエストを行ない、レスポンスについてはHTTPResponseクラスを使用することで、ステータスコードやレスポンスのボディを取得することができます。詳細については、公式リファレンスのURL Fetch Serviceを参照。

html要素の取り出しはfromとtoにタグの文字列を指定し、要素が単体の場合はbulid()、複数の場合はiterate()を指定します。fromとtoには正規表現が利用できます。

function myFunction() {
  /*指定したURLをフェッチ*/
  let response = UrlFetchApp.fetch('<URL>');

  /*ステータスコードの取得*/
  let code = response.getResponseCode();
  console.log(code)

  /*文字列としてエンコードされたレスポンスの取得*/
  let content = response.getContentText();

  /*パーサーで解析し、要素を取り出し*/
  let html = Parser.data(content).from('<タグの文字列>').to(' class="<タグの文字列>').iterate();
  console.log(html)
}

おわりに

打ち合わせ作業の準備など普段のちょっとした作業についても、GASを活用することで時短できることがあると思います。

また、freeeはGASを用いてGoogleスプレッドシートと連携するためのAPIを公開しているため、もっと応用的な取組もできます。

GASもどんどんバージョンアップして便利になってきているので、是非業務に活用していきたいと思います。

参考

Brutus
DevOpsとAIの二刀流を目指すLinuxエンジニア。Python、RaspberryPi、Linux、Docker、k8s、セキュリティ、Oracle Cloud、Terraform、Ansible等について発信しています。
https://brutus.tk/
infra-workshop
インフラ技術を勉強したい人たちのためのオンライン勉強会です
https://wp.infra-workshop.tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away