Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2098

Google Apps Scriptで特定のURLを踏んだらスクリプトを動作させるdoGet関数の使い方

$
0
0
request

photo credit: mikecogh Alyssum In Between via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptで備品購入申請を題材としてワークフローを作る方法についてシリーズでお伝えしております。

前回の記事はこちら。

Google Apps Scriptでフォーム送信した内容を含んだメッセージをGmailで送るスクリプト
Google Apps Scriptで備品購入申請を題材にワークフローを作っております。今回はGASでフォーム送信した内容をイベントオブジェクトから取り出してそれを含めたメッセージをGmailで送る方法です。

フォームから送信した内容を含んだメールをGmailで送る方法をお伝えしました。

これで、承認者に備品購入申請の内容をメールで送ることができたわけですが、メールから直接承認できたら便利ですよね。

それを目指していろいろやっていきましょう。

まずは、Google Apps Scriptで特定のURLを踏んだらスクリプトを動作させる方法です。

doGet関数というものを使いますよ。

では、行ってみましょう!

前回のおさらい

まずは前回のおさらいからです。

このシリーズでは備品購入申請のワークフローをGASで作成しております。

申請を行うのはGoogleフォームからで、以下のようなものです。

Googleフォームによる備品購入申請

これを使って申請を行うと、連携するスプレッドシートに以下のように蓄積されます。

フォームから送信したデータをスプレッドシートで確認

スプレッドシートがフォーム送信を受け取ると、「フォーム送信時」のトリガーにより、以下のsendMessageが動作します。

function sendMessage(e) {

  var shop = e.values[1];
  var item = e.values[2];
  var price = e.values[3];
  var amount = e.values[4];
  var total = price * amount;

  var recipient = 'hogehoge@example.com'; //送信先メールアドレス
  var subject = '備品購入申請のお知らせ';
  var body = '';
  body += '備品購入申請がありました。\n\n';
  body += '・購買先: ' + shop + '\n';
  body += '・品名: ' + item + '\n';
  body += '・単価: ' + price + ' 円\n';
  body += '・数量: ' + amount + '\n';
  body += '・総額: ' + total + ' 円\n\n';  
  body += '以下URLからスプレッドシートをご覧ください\n';
  body += 'https://docs.google.com/spreadsheets/d/~'; //スプレッドシートのURL    

  GmailApp.sendEmail(recipient, subject, body);
  
}

それで、結果として承認者宛に以下のようなメッセージが届くというところまで進めました。

フォーム送信の内容を含むGmailメッセージ

承認者が受け取ったメッセージからは、スプレッドシートへのリンクが挿入されています。

実は、メールに仕込むURLを「ウェブアプリケーションのURL」に変更をすると、そのアクセスを受けてスクリプトを動作させることができます。

今回は、その方法を紹介していきますよ!

シンプルトリガーとは

「フォーム送信時」のトリガーは、G Suite Developer Hubで設定しましたが、そこで設定するのはインストーラブルトリガーという種類のトリガーです。

GASにはもう一種類別のトリガーがとして、シンプルトリガーという種類のトリガーがあります。

シンプルトリガーは、function名を固定にするだけで特定のイベントに応答して動作する関数を作れるという、その名の通りシンプルなものです。

例としては、スプレッドシートやドキュメントを開いたときに動作するonOpen関数や、スプレッドシートを編集したときに動作するonEdit関数などがあります。

doGet関数とは

今回主役となるのはdoGet関数という関数です。

doGet関数はシンプルトリガーの一種で、ウェブアプリケーションにアクセスがあったときに動作する関数です。

(専門的にいうと、指定したURLにGETリクエストがあったときに動作するものです。)

要は誰かが何らかのWebページや、メール内からURLリンクを踏んだら動作させることができるというわけですね。

それで、以下のように名前を「doGet」にして関数を記述することで作成できます。

function doGet() {
 ’処理
}

それに加えて、以下のルールがあります。

  • TextOutputオブジェクトかHtmlOutputオブジェクトをリターンする
  • プロジェクトをウェブアプリケーションとして公開してアクセスを受けるためのURLを発行する

んー…ちょっと難し目ですね。

一つずつ見ていきましょう。

doGet関数を作成する

doGet関数のスクリプト

まず、doGet関数から作っていきましょう。

こちらです。

function doGet() {
  var html = '';
  html += '

備品購入申請のお知らせ

'; html += '<p>あなたは備品購入申請のメールのリンクを踏みました'; return HtmlService.createHtmlOutput(html); }

変数htmlには、いわゆるHTML文を文字列で構成して代入しています。

見出しを表すh1タグと、段落を表すpタグだけのとてもシンプルな内容です。

それで、5行目のreturn文ですね。

これが「HtmlOutputオブジェクトをリターンする」という部分です。

createHtmlOutputメソッドとHtmlOutputオブジェクト

HtmlServiceサービスのcreateHtmlOutputメソッドは、引数として指定したHTML文からHtmlOutputというオブジェクトを生成するメソッドです。

HtmlService.createHtmlOutput(HTML)

それで、doGet関数からそのHtmlOutputオブジェクトをリターンすることで、URLを踏んだ人に、そのHTMLの内容を反映したWebページを返して見てもらうことができるというものです。

これでdoGet関数の準備はOKです。

ウェブアプリケーションとして公開する

続きまして、「ウェブアプリケーションとして公開」する方法を見ていきましょう。

なにせ、踏むURLがなければアクセスできませんからね。

公開してURLを発行しましょう。

doGet関数を書いたら、スクリプトエディタの「公開」メニューから「ウェブアプリケーションとして導入」を選択します。

スクリプトエディタからウェブアプリケーションとして導入
すると「ウェブアプリケーションとして導入」ダイアログが開きます。

「プロジェクトバージョン」にはバージョン名を適当に入力して、「アプリケーションにアクセスでいるユーザー」は今回は社内ツールを想定して「[ドメイン名]の全員」としました。

「ウェブアプリケーションとして導入」ダイアログ

「導入」をクリックすると、次の画面で「現在のウェブアプリケーションのURL」が表示されます。

これが目的のURLですので、コピーしておきましょう。

GASで公開したウェブアプリケーションのURL

ためしに、そのURLにアクセスしてみると、以下のようなWebページが表示されます。

公開したウェブアプリケーションのページ

送るメッセージに公開したウェブアプリケーションのURLを含める

では、冒頭のsendMessageを以下のように変更します。

function sendMessage(e) {

  var shop = e.values[1];
  var item = e.values[2];
  var price = e.values[3];
  var amount = e.values[4];
  var total = price * amount;

  var recipient = 'hogehoge@example.com'; //送信先メールアドレス
  var subject = '備品購入申請のお知らせ';
  var body = '';
  body += '備品購入申請がありました。\n\n';
  body += '・購買先: ' + shop + '\n';
  body += '・品名: ' + item + '\n';
  body += '・単価: ' + price + ' 円\n';
  body += '・数量: ' + amount + '\n';
  body += '・総額: ' + total + ' 円\n\n';  
  body += '以下URLをクリックしてみてください\n';
  body += 'https://script.google.com/a/~exec'; //公開したウェブアプリケーションのURL    

  GmailApp.sendEmail(recipient, subject, body);
  
}

19行目を公開したウェブアプリケーションのURLに変更し、それに合わせて18行目の文言も変更しました。

フォーム送信からの流れで確認してみましょう。

受信したメールの中のURLをクリックすると、先ほどと同じWebページが表示されるはずです。

まとめ

以上、Google Apps Scriptで特定のURLを踏んだらスクリプトを動作させる方法をお伝えしました。

doGet関数の役割と使い方について、バッチリ理解いただけたでしょうか?

さて、今回はただの静的ページを表示しただけですが、doGet関数でフォーム送信で追加されたスプレッドシートの行数などの情報をパラメータとして受け取ることができたりします。

その部分を次回以降で紹介していきます。

GASでURLを踏んでスクリプトを動作させたときにパラメータを渡す方法
Google Apps Scriptで備品購入申請を題材にワークフローを作る方法をお伝えしています。今回は、GASでURLを踏んでスクリプトを動作させたときにパラメータを渡す方法をお伝えします。

どうぞお楽しみに!

連載目次:初心者でも作れるGASによる簡単ワークフロー

スプレッドシート、Gmail、フォーム…Google Apps Scriptで操作できるアプリケーションはまさに「ワークフロー」を作成する上で必要なものが揃っています。ということで、このシリーズでは初心者でも簡単に作れるワークフローの作り方について解説をしていきます。
  1. 備品購入申請フォームをGoogleフォームで作成する方法
  2. Google Apps Scriptでフォーム送信時にメッセージを送るスクリプトの作り方
  3. Google Apps Scriptでフォーム送信した内容を含んだメッセージをGmailで送るスクリプト
  4. Google Apps Scriptで特定のURLを踏んだらスクリプトを動作させるdoGet関数の使い方
  5. GASでURLを踏んでスクリプトを動作させたときにパラメータを渡す方法
  6. 【GASで作るワークフロー】URLクリックで「承認」とするスクリプトの作り方
  7. GASで送信するGmailのメッセージをプレーンでもHTMLでも送れるようにする
  8. GASのワークフローでURLのパラメータで承認・否認を切り替える方法

Viewing all articles
Browse latest Browse all 2098

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>