Google Apps Script @福岡

GASで面白Webサービス&コスト削減や!

Google Apps Script 講座初級編「GASで月が変わるとスプレッドシートに書込むシートを自動で切り替える」

はじめに

後藤銃士です。@miwa59307636 さんが質問を投げていたので勝手に回答案をつくりましたのでご査収下さい。内容としましてはツイート通りです。

実装として事前にシートを作っておくのもよいですが、シートを管理する人も面倒ですしシート名の指定誤りなんて頻発する(半角全角を誤って機能しなくなる、とか)ので、今回は自動でシートを追加する実装を考えます。

また長く使うことも想定し、シート名は「2018年1月」というように「西暦+月(ゼロ埋めなし)」で行きたいと思います。

準備するもの

  • GAS を使う環境
  • 熱意

この機能が役に立つのは

GASでデータを定期取得し保存するケース。実際私もこの機能を「GASでTwitterのフォローフォロワー数を毎日記録する」に追加しようと思います。

今回は初級編「GASで月が変わるとスプレッドシートに書込むシートを自動で切り替える」

対象

  • 基本ができていればよいかもしれません。

学べること

Google Apps Script によるスプレッドシートの使い方

講座スタート

いつもどおりコピペだけで大丈夫です。が、その前に使うスプレッドシートを用意して下さい。

f:id:jijyoronn:20181230193226p:plain

用意が出来ましたか?では、

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そしていつもどおり1行目の3行目の間に

  var spreadsheet = SpreadsheetApp.openByUrl('あなたのスプレッドシートのURL');
  
  // シート名生成
  var date = Utilities.formatDate(new Date(), "JST", "yyyy年M月");
  Logger.log(date); //2018年12月
  
  var sheet = spreadsheet.getSheetByName(date);
  Logger.log(sheet);
  if(sheet){
    Logger.log("ある"); 
  }else{
    spreadsheet.insertSheet(date);
    Logger.log("ない"); 
  }
  
  // 以下、シート書込処理を記載する

をコピペして保存し、実行してみましょう。

f:id:jijyoronn:20181230193243p:plain

実行後、スプレッドシートを見て下さい。

f:id:jijyoronn:20181230193318p:plain

シートが作成されていますね? ログを見ると、対象とするシート名と、シートのあるなしが記録されます。

f:id:jijyoronn:20181230193337p:plain

初回ですので「ない」と記載されます。

それではもう一度実行してみて下さい。

ログをみると「ある」と記載されますね?

f:id:jijyoronn:20181230193351p:plain

つまりそういうことです。

ロジックのキモは

   if(sheet){

になりますね。事前に

  var sheet = spreadsheet.getSheetByName(date);

で sheet の情報を取得します。情報がある場合はある、ということで if 関数は真と判定して処理を行います。情報がない(=該当するシートがない)場合は null という情報を取得します。で、null とはまあ平たくいうと「なんにもない」ということです。if 関数は、null を否定の意味で捉えるので、次の else 処理を実行することになります。

こまけーことはまあいいです。データがない=偽=ifではスルーされる、ぐらいで覚えておけばとりあえずOK。

一度「2018年12月」の存在が確認できればあとは月が変わるまで「2018年12月」をシートで指定し続けます。月が変わるとまたシートを確認にいき、ないとシートを作る、ということになります。

あとは、以降にシートへ書込む処理を書いておけば、シートについて気にする必要はありません。勝手に書込シートを選択しますし、なければシートを追加してくれますからね。

というわけで今回は、「月が変わるとスプレッドシートに書込むシートを自動で切り替える」GAS の書き方についてまとめてみました。

割と使うのでどんどん組み込んでいきましょう。

ご覧いただきありがとうございました。

Google Apps Script 講座初級編「GASでInstagramのフォローフォロワー数をスクレイピングする」

はじめに

後藤銃士です。7回目となります。Instagram のフォロー数、フォロワー数を取得したケースを考えてまして、今回はそのスクレイピングについて説明したいと思います。5回めに書きました「GASでTwitterのフォローフォロワー数をスクレイピングする」の姉妹編となります。

前回のスクレイピングでは Twitter のページのソースから正規表現を利用して欲しい情報を(フォローフォロワー数)を取り出しましたが、今回、Instagram のページのソースをよく見ると、JSON形式でサイトの概要が掲載されている箇所があるんでそこを利用することにします。

JSON形式とは?

詳しい解説は JSON とは何か

を読んでいただくとよいと思います。

JSONJavaScript オブジェクトの構文に従ったテキストベースのフォーマット

とかいわれてもチンプンカンプンでしょうから「ふーん」ぐらいでよいかと思います。具体的に説明していきますのでそこでざっくり理解できればよいです(できなくても大丈夫です、コピペなので)

この機能が役に立つのは

  • Instagram の自他問わずフォローフォロワー数を記録しておきたい人向け(マニア)
  • JSON のちょっとした知識

今回は初級編「GASでInstagramのフォローフォロワー数をスクレイピングする」

対象

  • 基本ができていればよいかもしれません。

学べること

Google Apps Script によるスクレイピングの基礎テクニック

講座スタート

いつもどおりコピペだけで大丈夫です。

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そしていつもどおり1行目の3行目の間に

  var instagramId = 'rena_takeda'
  var url = 'https://www.instagram.com/' + instagramId;
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');
  var json = html.match(/window._sharedData = (.*?);<\/script>/)[1];
  var jsonData = JSON.parse(json);
  var full_name = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['full_name']
  var follows   = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['edge_follow']['count'];
  var followers = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['edge_followed_by']['count'];
  Logger.log(full_name);
  Logger.log(follows);
  Logger.log(followers);

をコピペして保存し、実行してみましょう。

f:id:jijyoronn:20181223224846p:plain

表示>ログを選択してみて下さい。

f:id:jijyoronn:20181223225136p:plain

今回は人気女優の「武田玲奈さん」の Instagram を参考にさせていただいています。あっさり名前、フォロー、フォロワー数が取得できました。

f:id:jijyoronn:20181223225300p:plain

コードの instagramId を参照したい方の InstagramId に変えてもらえば誰のものでも参照できます。 instagramId は URL の https://www.instagram.com/rena_takeda/ の赤文字のところです。

ではコードの解説を少し。 1〜4行目は前回説明が済んでいると飛ばすします。

  var json = html.match(/window._sharedData = (.*?);<\/script>/)[1];

今回は個々がキモです。これは正規表現ソースコードの 「window._sharedData =」から「;<\/script>」の間の記述を取り出して json に格納してね、という命令です。 じゃあその間にあるデータがどういうものかというと、以下になります。

f:id:jijyoronn:20181223230155p:plain

…ゴチャゴチャしてよくわかんねーですね?複雑な構造のデータをコンピューターは気にせず処理できますが、人類が目視で確認するのは少々キツイ。そんなときは便利なサイトがあります。見やすいように整形してくれるんです。

JSONきれい ~JSON整形ツール~

f:id:jijyoronn:20181223230235p:plain

そうするとなにやらデータが構造的に定義されていることがわかるのではないでしょうか。Instagram の情報がてんこ盛りとなっていますので、ここかデータを取得します。 GAS、というか JavaScriptJSON データを配列に変換することで簡単に扱えるようにしてくれる仕組みがあって、それが

  var jsonData = JSON.parse(json);

です。あとはデータの構造にそって欲しい情報を指定すればデータを取得することができるわけです。

  var full_name = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['full_name']

entry_data → ProfilePage → 0

この「0」っていう、突然出てくるのでなんだこれ?と思うかもしれないですが、画面をよくみると「[」ってのがあるじゃないですか。こいつを指してます。これは配列と呼ばれるデータの持ち方で番号で指定します。

"ProfilePage" : [ { xxxx } ,  { yyyy },  {zzzz} ]

のようなデータで { xxxx } を指定したい場合は ['ProfilePage'][0] になります。今回は配列でデータを持っているのですが

"ProfilePage" : [ { xxxx } ]

なので 0 を指定することになります。

あとは、

entry_data → ProfilePage → 0 → graphql → user → full_name

とすれば、名前を取得できる、というわけです。 解析データを眺めるといろいろわかると思いますが、最新の画像の URL や投稿時のコメントなども合わせて取り出すことができますから、トリガーを使って定期取得する、というのも価値があるかと思います。

今回は、スクレイピングJSON について書きました。この JSON はあちこちで出現する重要データ形式ですので、扱い方を知っていると役に立つと思います。特にフロントは JavaScript を使いますしね。

よし、これで Twiter と Instagram 双方のフォロー、フォロワー数の自動記録の仕方はクリアです。おめでとうございます。次は YouTube や TicTok あたりがターゲットになるかもしれないですが、食傷気味かな。次はもっと別の GAS の使い方を解説出来るようにします。

それではご覧いただきありがとうございました。

Google Apps Script 講座中級編「GASでTwitterのフォローフォロワー数を毎日記録する」

はじめに

後藤銃士です。6回目となります。今回は総集編です。総決算です。今までコピペでやってきた数々の処理を組合せて、

  • 設定した時間毎に
  • 指定したTwitterアカウント(誰でもOK)のフォロー数、フォロワー数を
  • スプレッドシートに書き込んでくれる

ことができるようになります。無料です。 正直ここで説明するところはあんまりありません。すでに説明が済んでいるので、コピペするコードのざっくり説明だけでよさそうな感じです。

というわけで

今からお見せるコードはまだ発展途上といいますか、作りかけ、といいますかさらいろんな機能を足すこともできます。私が作っている LINEbot のように例えばフォロワー数を LINE で通知させたり、あるいはメールで受信するというのもできます。

スプレッドシートに溜まったデータの傾向を分析するようなアイディアがあればそれをまた GAS や他のツールと連動させることもできるでしょう。

自社の手作業している作業を GAS で置き換えられないか?といった検討を始めるのもいいですね。

この機能が役に立つのは

Twitter を使って商売を始めたいけど、その分析資料としてフォロワー数を記録しておきたい人向け(ニッチ)。

今回は中級編「GASでTwitterのフォローフォロワー数を毎日記録する」

対象

  • 基本ができていればよいかもしれません。

学べること

Google Apps Script の基本クラスの組合せ方

講座スタート

今回もコピペだけで大丈夫です。

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そして今回はでは1行目の3行目の間に

  var twiiterId = 'jijyoron'
  var url = 'https://twitter.com/' + twiiterId;
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');  
  var title = html.match(/data-count=(\d.*?)\s/g);
  var follows   = title[1].match(/data-count=(\d.*?)\s/)[1];
  var followers = title[2].match(/data-count=(\d.*?)\s/)[1];
  Logger.log(follows + " " + followers);
  
  var spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Guk0FXiVGxVMXLZA83u3TNpdMVgSPikKvjC7Jkej-zg/edit#gid=0');
  var sheet = spreadsheet.getSheetByName('シート1');
  var lastrow = sheet.getLastRow(); // 最後の行番号
  var today = new Date();
  sheet.getRange(lastrow +1, 1).setValue(today);
  sheet.getRange(lastrow +1, 2).setValue(follows);
  sheet.getRange(lastrow +1, 3).setValue(followers); 

をコピペして保存し、実行してスプレッドシートを御覧ください。

f:id:jijyoronn:20181222230407p:plain

f:id:jijyoronn:20181222230431p:plain

あとはトリガー設定しましょう。

f:id:jijyoronn:20181222230720p:plain

今私はテストで5分毎に取得していますが、いろいろ試してみるといいです。

今回は、新しいクラスもメソッドも登場しないので、コードの説明も省略します。みたらわかる、ですよね?

一応これで、まったくの素人が位置から GAS を使って「Twitterのフォローフォロワー数を毎日記録する」ことができるようになりました。 今後は難易度がどうなるかわかりませんが、比較的役にたつような GAS の使い方を紹介していきたいと思います。

ご覧いただきありがとうございました。

Google Apps Script 講座初級編「GASでTwitterのフォローフォロワー数をスクレイピングする」

はじめに

後藤銃士です。5回目となります。今回はスクレイピング、つまりインターネット上に存在するサイト情報を収集する、というチャレンジになります。

このスキルをを獲得すると、正直アイディア1つでいろんなことができるんですよね。私がひっそりやっているのが、某掲示板情報から有用な情報を引っこ抜いてまして、そこから動画情報を集めて整理して、Webサイトとして毎日自動で更新していたります。

今ままで、インターネットでこんな情報集めて集約すれば役に立つのにな、といったことを手動ではなく自動でできるようになるのですから、熱意のある人には是非とも覚えて欲しいテクニックです。

っていっても

汎用的になんでもできる、みたいな講座にすると一筋縄ではいかないんですよ。スクレイピングって要素が2つあって、①指定した URL (URI)からデータを取り出すこと、これは GAS 標準にそのやりとりを簡単に行うクラスがあるのでよいのですが、②今取り出したデータから意中のキーワードや数値を取り出すことが難しいんですね。

具体的には「正規表現」という超絶役に立つけど覚えんのハードルたけーという技術を一部使うこととなるんですが、その説明は正直疲れるので、正規表現は使うけど今回は説明抜きで行きたいと思います。

あのあたりは奥が深い沼のような世界なので、好きな人は自分で調べるといいと思います。おそろしく世界が広がるので。

で、ですね、次回のつなぎも考えて今回は「GASでTwitterのフォローフォロワー数をスクレイピングする」機能を実現する講座となります。

この機能が役に立つのは

超絶役立つ。GAS で遊ぶには何事もまずはデータの取得ありきですからね。まだここでは、ログイン後のデータ取得、みたいな手の混んだスクレイピングは出来ないのですが、普通に URL を叩いて表示できるサイトの情報であれば取得できないものはありません(厳密にはあるけど)。今回は Twitter が対象ですけど、それこそ Google でもなんでもいけます。

今回は初級編「GASでTwitterのフォローフォロワー数をスクレイピングする」

対象

  • 基本ができていればよいかもしれません。

学べること

Google Apps Script によるスクレイピングの基礎テクニック

講座スタート

今回はコピペだけで大丈夫です。

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そして今回はでは1行目の3行目の間に

  var twiiterId = 'taichinakaj'
  var url = 'https://twitter.com/' + twiiterId;
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');  
  var title = html.match(/data-count=(\d.*?)\s/g);
  var follows   = title[1].match(/data-count=(\d.*?)\s/)[1];
  var followers = title[2].match(/data-count=(\d.*?)\s/)[1];
  Logger.log(follows + " " + followers);

をコピペして保存し、実行してみましょう。

f:id:jijyoronn:20181222191528p:plain

表示>ログを選択してみて下さい。

f:id:jijyoronn:20181222191554p:plain

左の数値がフォロー数、右の数値がフォロワー数になります。今回のモデルは、最近お気入りのプロ奢ラレヤーさんの twitterId (@より右側の文字列)を使っています。

f:id:jijyoronn:20181222191625p:plain

凄い。簡単に情報取れましたね?

では解説を少しだけ。

  var twiiterId = 'taichinakaj'
  var url = 'https://twitter.com/' + twiiterId;

1行目に twitterId を設定しています。ご自身でアカウントをお持ちでしたら入れてみて下さい。 2行目で、1行目で設定た値を用いて Twitter へアクセスするための URL を作成しています。この場合(https://twitter.com/taichinakaj)となります。ブラウザで叩いて表示されることを確認してみて下さい。

  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText('UTF-8');  

UrlFetchApp.fetch(url) が今回のキモの1つです。URL情報を渡すと、そのURLに沿ってサーバへリクエストしてそのレスポンスを受信してくれます。それが reponse に取り込まれ、こんどは、getContentText('UTF-8') これは取得したレスポンスを UTF-8 形式で返してね、というおまじないで、最近はほぼどこでも UTF-8 で書かれていると思うのですけどね。というか UTF-8 って何?という人はおいていきます(ここではあまり関係ないのでスルーするけど勉強するのはよいです)

  var title = html.match(/data-count=(\d.*?)\s/g);
  var follows   = title[1].match(/data-count=(\d.*?)\s/)[1];
  var followers = title[2].match(/data-count=(\d.*?)\s/)[1];

で、ね…。この match 以降の内容がいわゆる「正規表現」と呼ばれる処理で、取得してきたレスポンスからさらにデータを絞るための処理なんですね。 ここは Twitter が返すレスポンスが変更されると影響を受けるのでいつまでもこのままではいかないかもしれませんが、今はこれで動きます。正規表現の勉強も今後の課題ですよね、って実際正規表現だけで専門書がある世界ですから、本気でやるとやけどするのでほどほどで…。

というわけ今回は出力先をログにしておりますけど、今までの勉強を振り返ればわかりますが、スプレッドシートに書き込むと、この処理を繰り返すだけでどんどんフォロー・フォロワー数を保存されることができますし、さらにトリガーを組み合わると、巷では有料 note で販売されているサービスが無料で出来てしまう、というわけなんですね、これが。

とうわけで次はその「GASで自動でTwitterアカウントをスプレッドシートに記録する」を扱うことにします。今までの集大成になります。

それでは、ご覧いただきありがとうございました。

Google Apps Script 講座初級編「GASでタイマー処理させる」

はじめに

後藤銃士です。4回目ですね。今回はタイマー処理がテーマです。設定した時間に処理を自動的に起動させるというものです。 GAS では「トリガー」という機能を使って実現します。

実はこの「トリガー」、プログラムというよりは、GAS の機能の1つなので単純な自動起動であるなら GAS さえ書く必要がありません(!)時間設定をすればいいんです。もっとも作っていくうちにいろいろ細かい制御をやりたくなるはずで、そうすると GAS を書いて制御することになります。が、今回はそんなにややこしいことはやりません。

今回は、「毎分、スプレッドシートに時間と文字を書き込む」機能を実現させる講座となります。

この機能が役に立つのは

超役立つ。といいますかこれありきといっても過言でありません。GAS では自動定期処理こそが1つの理想ですからね。 これをマスターすれば GAS の半分は理解したといっていいでしょう(言い過ぎですね)。

今回は初級編「GASでタイマー処理をさせる」

対象

学べること

Google Apps Script を時間による定期実行設定のやり方

講座スタート

「毎分、スプレッドシートに時間と文字を書き込む」機能を実現するに当たり2つのステップで実現しようと思います。

こうやってやりたいことを分割すると、自分のやることが明確になるのでよいですね。ではいきます。

スプレッドシートに時間と文字を書き込む」

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そして今回は1行目の3行目の間に

  var spreadsheet = SpreadsheetApp.openByUrl('あなたのスプレッドシートのURL');
  var sheet = spreadsheet.getSheetByName('シート1');
  var lastrow = sheet.getLastRow(); // 最後の行番号
  var today = new Date();
  sheet.getRange(lastrow +1, 1).setValue(today);
  sheet.getRange(lastrow +1, 2).setValue("どんどん増える…"); 

をコピペして保存し、実行してみましょう(「承認関連は初回実行時、毎回でます。以降この説明は省略しますね」)。

f:id:jijyoronn:20181222104612p:plain

そしてスプレッドシートを御覧ください。

前回記入した箇所からすぐ下に日付と文言が挿入されているのがわかると思います。 日付は今しがた実行した日です。日付をクリックすると、上部に時間まで表示されます。素晴らしい。

f:id:jijyoronn:20181222105528p:plain

それではもう一度実行してみて下さい。…出来ましたか?

f:id:jijyoronn:20181222105431p:plain

すると前回の下にさらに同じように日付と文言が追加されています。何故そんなことになるか、コードをみてなんとなく予測できますか。

  var lastrow = sheet.getLastRow(); // 最後の行番号

こいつ(getLastRow())がですね、指定したスプレッドシート>シート>セルのうち、書き込まれている箇所で1番大きい行番号を取得してくるやーつ(メソッド)なんですね。

   var today = new Date();

これは見た目通り、今日の Date(日付)を取得するあれ(クラス)です。いろんな言語に似たようなのあります。 でそれらの情報をゲットしたら、あとはスプレッドシートに書き込みます。

  sheet.getRange(lastrow +1, 1).setValue(today);
  sheet.getRange(lastrow +1, 2).setValue("どんどん増える…"); 

getRange(lastrow +1, 1) のカッコの中がポイントです。1つ目の lastrow +1 は何をしているかというと、上のほうで取得した行番号に1つ足すことにより、次の空欄行番号をつくっているんですね。2つめの 1 は列番号を意味します。つまり、

次に実行すると、赤い枠に setValue(today) つまり、日付をセットする、という意味になります。

f:id:jijyoronn:20181222105612p:plain

というわけで実行すればどんどん追記されていく、というわけです。

毎分

ではこれを毎分自動で実行できるようにしましょう。 コード.gs 画面から時計アイコンをクリックします。

f:id:jijyoronn:20181222105643p:plain

すると、トリガー画面が新規タブとして開くかと思います。

f:id:jijyoronn:20181222105703p:plain

では右下にある「+トリガーを追加」をクリックしましょう。

モーダル画面が表示されるので画面のようにプルダウンを設定し、保存して下さい。

f:id:jijyoronn:20181222105747p:plain

内容は

  • 1分単位で、myFunciton という関数を実行させる

というものです。 myFunciton はコピペ内容を挟んでいるところです。

f:id:jijyoronn:20181222105820p:plain

はい、これでもうトリガーが設定されました。 それではスプレッドシートに戻ってみましょう。

…1分毎に行が追加されていることがわかるかと思います。これがッ!トリガーの威力ッ!!!

f:id:jijyoronn:20181222105840p:plain

さきほどのトリガー設定画面に戻り、左ある「実行数」をクリックすると、実行されたものが何かがひと目で分かります。自分で実行した内容も分かりますので振り返りに便利ですね。

f:id:jijyoronn:20181222105940p:plain

それでは「マイトリガー」からさきほど作ったトリガーを消しておきましょう。そのままだと永遠に書き続けられてしまいます(汗)

f:id:jijyoronn:20181222110002p:plain

以上で、トリガーの説明を終わります。前回の講座でメール送信をやりましたけれど、あの画面で同じことをすれば、毎分同じ内容のメールを送り付けることも可能です(迷惑なのでやめましょう)。つまり、あなたは強力な力を手に入れてしまったんですね…。

さて次回は、GASを使って簡単なスクレイピングをしたいと思います。スクレイピングとはネットにあまねく情報を抽出する行為のことです。昔からいろんな言語で実装されており、近年では Python を使ったものが人気かもしれませんが、簡単なものなら GAS でも十分可能です。

これを学ぶことでさら GAS の底知れぬパワーを感じることになるかと思います。お楽しみに。

それではご覧いただきありがとうございました。

Google Apps Script 講座初級編「GASでスプレッドシートに書き込む」

はじめに

後藤銃士です。3回目ともなりますと、流石に1行コピペというわけにはいかなくなってきまして、今回は3行のコピペになります。あと、スプレッドシートの準備も必要となります。

ですが今回の講座では、なにかしら外部から情報を取得してきたものを一旦、スプレッドシートに保存できる、ということを理解できればOKです。今回は「書き込む」だけしか扱いませんが、「読み出し」までできると簡単なDB(データベース)としてのパワーを発揮することになります。イヤほんとよ?

この機能が役に立つのは

先程も書きましたが、取得情報を「保存できる」これです。といいますか GAS を使って期待されているのはおおよそ、取得してきたデータを、

ことになるんですが、その一翼を担うわけです、この講座は!

とはいえ、いうても3行コピペですからね、その辺りは流石 GAS といったところでしょうか。

今回は初級編「GASでスプレッドシートに書き込む」

対象

学べること

Google Apps Script を使った スプレッドシートへの書き込みの仕方

講座スタート

今回はまず、スプレッドシートを用意します。ブラウザ開き「drive.google.com」を入力してGoogle Drive 画面を開きます。

f:id:jijyoronn:20181221235931p:plain

「新規」ボタンから「Google スプレッドシート」>「空白のスプレッドシート」を選びます。

f:id:jijyoronn:20181222000213p:plain

すると、「無題のスプレッドシート」が表示されると思います。

f:id:jijyoronn:20181222000244p:plain

そのときに、URLをコピペしておいて下さい。私の場合は「https://docs.google.com/spreadsheets/d/1Guk0FXiVGxVMXLZA83u3TNpdMVgSPikKvjC7Jkej-zg/edit#gid=0」がそれにあたります(長い)。

ではそれはおいといて、新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そして今回はでは1行目の3行目の間に

var spreadsheet = SpreadsheetApp.openByUrl('あなたのスプレッドシートのURL'); var sheet = spreadsheet.getSheetByName('シート1'); sheet.getRange("A1").setValue("え?!マジで?");

とコピペして下さい。

f:id:jijyoronn:20181222000514p:plain

'あなたのスプレッドシートのURL'にはさっき保存していたスプレッドシートのURLを入れてくださいね。

で、例によって保存、後横向き三角ボタンを押してみて下さい。やっぱり承認関連のメッセージが出てきます。

f:id:jijyoronn:20181222000703p:plain

こういうのって最初だけなんでまあ、気にせず、前回同様「許可を承認」とか「許可」とかしていきましょう。

すると、もとの画面に戻ります。なにもしていない顔してますよね…。

でもですよ?

さっきメモした URL を叩くかスプレッドシートを開いてみて下さい。

追加されてますね?

f:id:jijyoronn:20181222000727p:plain

ほら。

できた。

3行でできちゃった。

解説

細けえことはあれなんですけど、わかってほしいことは、

var spreadsheet = SpreadsheetApp.openByUrl('あなたのスプレッドシートのURL');

まず、書き込む対象となるスプレッドシートの情報を取得するために URL を通してスプレッドシートの情報を取り込んでます。取り込んだ結果が spreadsheet ってところに保存されます。

var sheet = spreadsheet.getSheetByName('シート1');

で。取り込んだスプレッドシートの情報から今度は、対象となるシートを、シート名を指定することで絞りこみます。絞り込んだ結果、sheet ってところへ保存されます。

sheet.getRange("A1").setValue("え?!マジで?");

ここからなんですが、絞り込まれたシート「シート1」の、A1 へ「え?!マジで?」を設定しなさい、という記述がこれになります。 sheet から Range(範囲のこと)A1 に対して、Value(え?!マジで?)という内容を set (設定)しろ、ということなります。

スプレッドシート → シート → セル というように書き込む先を絞っているわけですね。 それがこの3行に込められている、というわけです。

読み出す場合は、getValue を使います。そのあたり知りたければリファレンスを眺めておくといいですよ。

しかし凄いなあ。もうスプレッドシートまで操作できるようになってしまっている…。

次回はトリガーという自動で処理をさせる記述を学ぶことしましょう。今まで見てきた、メール送信やスプレッドシートに書き込むことを組み合わせることが出来ます。いやーやっとプログラムの勉強っぽくなりますね!ご覧いただきありがとうございました。

Google Apps Script 講座初級編「GASでメール送信する」

はじめに

後藤銃士です。2回目の今回は、一見役に立ちそうに見えるのだけれども、この機能だけではしょんぼりな結果になってしまう「GASでメールを送信する」講座をお届けいたします。いや、メールソフトを使わずにメールを送ることができるとか結構なにげに凄いことは凄いんですけど、これ「だけ」ではメリットが感じられないんですよね。

この機能が役に立つのは

  • 決まった時間に通知する(リマインダー)
  • メールを受信したら自動で「メール送信」する(メールフォームと組合せる)
  • 少しずつ内容を変えたメール(例えば相手の方の名前などを本文に添えるとか)を大量に「メール送信」する(メルマガ)
  • ネット上の欲しい情報を収集後、毎日決まった時間に自動で「メール送信」する(クローラー

ように、何かの操作と組合せたときに本領を発揮します。でも最初からいきなりなんでもはできないので、順番なので焦らずにお願いします。

今回は初級編「GASでメール送信する」

対象

学べること

  • Google Apps Script を使ったメール送信の1つのケース

講座スタート

ブラウザを開き、「script.google.com」を入力してコードを書ける状態にして下さい。

f:id:jijyoronn:20181219222139p:plain

では1行目の3行目の間に

MailApp.sendEmail("送信したいメールアドレス","GASの勉強進んでる?","ちゃんとやるんだよ?");

とコピペして下さい。

f:id:jijyoronn:20181220230137p:plain

"送信したいメールアドレス"には受信できるメールアドレスを設定して下さい。ただこれ、どんなメールアドレスでもよいかというとそうでもなくてたしかキャリアのメールアドレスは制限があって送信できない、もしくは受信できなかったりするので、今ログインしている Gmail を設定するのが確実かもしれません。

さて、保存後(覚えているかな?)、横向き三角ボタンを押してみて下さい。すると、なにか不穏なメッセージが。

f:id:jijyoronn:20181220230218p:plain

というのも、メールを送信するのって例えばスパムメールのように油断すると迷惑行為につながったりするケースがあるわけなんですね。だから Google 先生側でチェックしているわけです。「承認を確認」を押して下さい。

f:id:jijyoronn:20181220230233p:plain

すると今度はさらに仰々しいポップアップが出てきます。「リスクを詳細」リンク先を読んで問題ないと判断したら「許可」ボタンを押します。すると、もとの画面に戻ります…。

…。

なにげにメールソフトを眺めてみると…。

f:id:jijyoronn:20181220230813p:plain

なんかきてる!

開けてみると…

f:id:jijyoronn:20181220230824p:plain

先程入力した内容のメールが届く!というわけです。

解説

MailApp.sendEmail("doublecrown.under@gmail.com","GASの勉強進んでる?","ちゃんとやるんだよ?");

カンマ(,)で区切られていますよね。これ順番ごとに意味があるんですよ。

  • 1つ目が、送信先
  • 2つ目が、メールタイトル、
  • 3つめが、メール本文

となります。それぞれ好きなように書き換えて送ることができるわけですよ。

リファレンス(詳しい説明)は sendEmail(recipient, subject, body) です。英語ですけど雰囲気はわかるのではないでしょうか。

また、「あれ?いろいろな形式があるけど?」と思った方は鋭い。そんな人は自分で学習できるセンスがあるので、いろいろ試してみるとよいです。

というわけで、1行コピペで GAS からメールを送信することができました。次回はスプレッドシートを操作を説明したいと思います。ご覧いただきありがとうございました。