継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

サーバーレスでコードを実行可能な「Google Apps Scripts」に入門する

タダです。

最近、「Google Apps Scripts」(以下、GAS)を下記の書籍を読みながら勉強し始めました。業務の自動化や外部サービスとの連携ハブとして利用される文脈で登場する印象ですが、僕自身も興味があるサービスであったので実践的に使えるようになりたいと思ったのがモチベーションになります。

サーバーレスでお手軽自動化!Google Apps Script活用入門  (技術書典シリーズ(NextPublishing))

サーバーレスでお手軽自動化!Google Apps Script活用入門  (技術書典シリーズ(NextPublishing))

今回は、GAS について書籍で学んだことをまとめていきます。

GAS とは

GAS はクラウド上でスクリプトを実行することができるサービスで、ベースは JavaScript になっています。簡単な Hello World を表示するためのコードを見ていただくとわかりやすいかと思います。

function myFunction() {
  Logger.log("Hello World");
}

f:id:sadayoshi_tada:20190406212748p:plain

また、GAS の特徴として次のものがあります。

Google サービスとの連携

例えば、 Gmail のアカウントから GAS でメールを送ることもできます。Gmail のアドレスから携帯アドレスに送ってみましたらちゃんと届きました。

function myFunction() {
  var recipient = "送信したいメールアドレス";
  var subject = "テストメールです";
  var body = "こんにちは! \n現在の時刻は" + new Date() + "です";
  GmailApp.sendEmail(recipient, subject, body);
}

f:id:sadayoshi_tada:20190406223509p:plain

また、カレンダーにイベントの登録も可能です。

function myFunction() {
  createCalendar( "テストイベント", 2019, 4, 7);
}

function createCalendar(title,year,month,day) {
  var calendar = CalendarApp.getCalendarById("Gmail のアドレス");
  var date = new Date(year,month-1,day);
  calendar.createAllDayEvent(title, date);
}

f:id:sadayoshi_tada:20190406214920p:plain

GAS の特有機能について

特筆すべきは、GAS には次のような JavaScript で実行できない特有のメソッドやクラスが用意されているので、試しにUrlFetchAppを使って外部ドメインへアクセスしてみます。

機能名 役割
UrlFetchApp 外部ドメインのサービスへアクセスし、利用可能
Charts グラフなどの図を作成し、利用可能
PropertiesService KEY-VALUE 形式で値を保持し、スクリプト間で使いまわせる

試しに Yahoo! の天気情報にアクセスしてみると、アクセスした結果がコンテンツとして返されました。

function myFunction() {
  var html = getResource("https://weather.yahoo.co.jp/weather/jp/13/4410/13104.html");
  // ログ出力
  Logger.log(html);
}

function getResource(url) {
  var response = UrlFetchApp.fetch(url);
  var contentText = response.getContentText();
  return contentText;
}

f:id:sadayoshi_tada:20190406224626p:plain

GAS から Slack への投稿

外部サービスとの連携させるようになりたいので、Slack と GAS を連携してみます。 Slack の Incoming Webhooks 機能を使って GAS からメッセージを Slack に投稿してみました。

function doPost() {
  var url = "Incoming Webhooks のURL";
  var payload = { "text": "GASからのSlack投稿テストです" };
  var options = {
    "method": "post",
    "payload": "payload="+ JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

f:id:sadayoshi_tada:20190406223112p:plain

まとめ

GAS の入門として Google のサービスや外部サービスとも連携させる方法を学びました。

次はもっと他のサービスとも連携させて GAS を使ってみた結果をレポートします。