ビジネスに使える無料Webツールを公開しました

Google Apps Script(GAS)とは?初心者向け使い方の事例とテンプレ集

ふきげん猫ちび

Google App Scriptでどんなことが出来るの?
なるべく簡単に作業を自動化したい。

ふきげん猫ちび

ふきげん猫ちび

Google App Scriptでスクレイピングできる?

このような方に向けて、今日はGoogle Apps Scriptの概要を説明します。

この記事の内容
  • Google App Scriptとは?
  • こんな人におすすめ
  • Google Apps Scriptで出来ること
  • Google App Scriptの始め方

僕の中ではGoogle Apps Scriptを使いこなせる人はすべて自動的に尊敬しています。

それくらい、使えると便利なツールです。

ヘイショー

それでは行ってみましょう!

Google App Scriptとは?

Google Apps Script(グーグルあぷスクリプト)は、Googleが開発したJavaScriptベースのプログラミング言語です。

主にGoogle系サービスを簡単に自動化するために使います。

ヘイショー

通称GAS(ガス)と呼ばれています。

参考 Google Apps Script公式サイト

ヘイショー

ちなみに僕はPythonを勉強していた時に、挫折して習得が簡単なGASにたどり着きました。

こんな人におすすめ

Google App Scriptはプログラミング言語ですが、その汎用性の高さからすべての会社員にお勧めできます。

ヘイショー

たまにGASを使える同僚などを見かけると「おっ」となります。

僕は一度だけGASを使いこなす方と一緒に仕事をさせていただいたことがあるのですが、会社員として初めて「この人には叶わないな」と思わされました。

それくらいパワフルなツールです。

Google App Scriptの始め方

基礎を一から学びたいという方は上記の動画をおすすめします。

一方で、スクリプトの走らせ方だけを覚えておいて後はテンプレを活用していきたいという方は以下の記事をご覧ください。

関連記事 GAS(Google App Script)のスクリプトを走らせる方法

ヘイショー

ちなみにまずは後者のテンプレを活用する方法から始めて、自分の用途に合致するかを確認することをお勧めします。一から勉強するとそれなりに時間がかかりますので。

Google Apps Scriptで出来ること

いろいろ出来るのですが、自分が認識しているところでは以下の通りです。

  • マニュアル作業を自動化させる
  • Webページからテキストなどを抽出する
  • Google系のサービスでカバーされていない内容を実装する

ヘイショー

具体例をご覧ください。

Twitterのフォロワー数を定期的に数える

Twitterでフォロワー数の推移を毎週、または毎月記録することが出来ます。

関連記事 Google App Script(GAS)でTwitterのフォロワー数を自動で数える方法

スクレイピング

Webサイトの各ページのメタタイトル、メタディスクリプション、H1タグなどを抽出してGoogleスプレッドシートに記録していくことが出来ます。

関連記事 Google App Script(GAS)でWebサイト情報をスクレイピングするテンプレ

その他

個人的によく利用しているのは以下のスクリプトです。

  • webpagetestと組み合わせて、Webサイトの複数のページのパフォーマンスを測定する
  • Googleスプレッドシート上で、ボタンをクリックすることで全部のグループを開閉させる

ヘイショー

僕もまだまだ勉強中なので、これからバリエーションを増やしていきたいです。

スクリプトを走らせる方法

GASのスクリプトの走らせ方をSTEP by STEPで丁寧に解説していきます。

ヘイショー

スクショでの通りに進めていくと、5分でスクリプトを走らせれるようになります

スクリプトを自分でスクラッチから書くのは難易度が高いですが、スクリプトの走らせ方さえ知っていればググって公開されているものを利用することが出来るようになります。

ヘイショー

実は、ググったら自分の欲しかった機能が公開されていることは案外多いです。

STEP 1. Googleスプレッドシートを開く

「ツール」→「スクリプトエディタ」をクリックすると、GASの新規ファイル作成のページへジャンプします。

STEP 2. App Scriptファイルを開く

これがApp Scriptのファイル編集画面です。

プロジェクト名とファイル名を、適当な名前に変更します。

STEP 3. スクリプトを書いて保存する

スクリプトを書いたら、ファイルのアイコンをクリックして保存します。

次に「実行」というボタンをクリックすると、スクリプトが正しく動くかどうかを確認してくれます。

今回はサンプルとして、URLから一括でメタタイトルとメタディスクリプションを取得するコードを使います。

HTML

function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getDataRange().getValues();

try {
for (var i = 1; i < values.length; i++) { // 1行目は説明行なので2行目であるkey1から開始
checkTitleDescription(sheet, values[i], i);
}
} catch (e) {
Browser.msgBox(e);
}
}

function checkTitleDescription(sheet, value, i) {
var response = UrlFetchApp.fetch(value[0]); // 一番左のセルにURLの値が入っている
var text = response.getContentText();
var titleMatch = text.match(/<title>([\s\S]*)<\/title>/i);
var title = getFirstValue(titleMatch);
var descMatch = text.match(/meta\s+name=['"]description['"]\s+content=['"](.+)['"]/i);
var description = getFirstValue(descMatch);
var h1Match = text.match(/<h1.+?>([\s\S]*)<\/h1>/i);
var h1 = getFirstValue(h1Match);
sheet.getRange(i + 1, 2, 1, 3).setValues([[title, description, h1]]);
}

// マッチする最初の要素を返す
function getFirstValue(values) {
return values && values.length > 1 ? values[1] : '';
}


STEP 4. アカウント認証をする

スクリプトを走らせるには、自分のGoogleアカウントと紐付ける必要があります。

STEP 5. スクリプトが動いていることを確認する

認証が終わったら、下の「実行ログ」というウィンドウに結果が表示されます。

問題が無ければ、右上の「デプロイ→新しいデプロイ」というリンクをクリックします。

ヘイショー

デプロイは「本番環境時に実装する」という意味です。

STEP 6. デプロイする

デプロイ→新しいデプロイのリンクをクリックすると、上記のようなポップアップウィンドウが表示されます。

「種類の選択」の右にある歯車のアイコンをクリックして「ウェブアプリ」を選択します。

説明文を適当に入力して、デプロイします。

ヘイショー

これでWebアプリ作成が完了しました。

STEP 7. 動作を確認する

今回サンプルで提供したスクリプトは、「A2行目以降のURLに対して、メタタイトルとメタディスクリプションを表示させる」というものでした。

なのでA2より以下に対象とするURLを入れます。

次に、先ほどのスクリプトファイルに戻って、「実行」をクリックします。

下に「実行ログ」で実行完了と表示されたら、Googleシートに戻ります。

ヘイショー

反映されてますね。

Webサイト情報をスクレイピングする方法

メタタイトルとメタディスクリプションを抽出する方法です。

用意するもの

まずはこんな感じで、Googleスプレッドシートに1列目に抽出したい項目を、A列にURLを羅列してください。

シート名は「Scraping」と命名ください。

メタタイトルとメタディスクリプション

HTML

function myFunction() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("Scraping");
var values = sheet.getDataRange().getValues();

try {
for (var i = 1; i < values.length; i++) {
checkTitleDescription(sheet, values[i], i);
}
} catch (e) {
Browser.msgBox(e);
}
}

function checkTitleDescription(sheet, value, i) {
var response = UrlFetchApp.fetch(value[0]);
var text = response.getContentText();
var titleMatch = text.match(/<title>([\s\S]*)<\/title>/i);
var title = getFirstValue(titleMatch);
var descMatch = text.match(/meta\s+name=['"]description['"]\s+content=['"](.+)['"]/i);
var description = getFirstValue(descMatch);
sheet.getRange(i + 1, 2, 1, 2).setValues([[title, description]]);
}

function getFirstValue(values) {
return values && values.length > 1 ? values[1] : '';
}


ヘイショー

コピペするだけでOKです。

メタタイトル/ディスクリプション+H1タグも一緒に抽出する

HTML

function myFunction() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("Scraping");
var values = sheet.getDataRange().getValues();

try {
for (var i = 1; i < values.length; i++) {
checkTitleDescription(sheet, values[i], i);
}
} catch (e) {
Browser.msgBox(e);
}
}

function checkTitleDescription(sheet, value, i) {
var response = UrlFetchApp.fetch(value[0]);
var text = response.getContentText();
var titleMatch = text.match(/<title>([\s\S]*)<\/title>/i);
var title = getFirstValue(titleMatch);
var descMatch = text.match(/meta\s+name=['"]description['"]\s+content=['"](.+)['"]/i);
var description = getFirstValue(descMatch);
var h1Match = text.match(/<h1.+?>([\s\S]*)<\/h1>/i);
var h1 = getFirstValue(h1Match);
sheet.getRange(i + 1, 2, 1, 3).setValues([[title, description, h1]]);
}

function getFirstValue(values) {
return values && values.length > 1 ? values[1] : '';
}


Twitterのフォロワー数を自動で数える方法

ここからは実装方法をレクチャーします。

機能は以下の通り。

  • 毎日 or 週毎 or 月毎でTwitterのフォロワー数をGoogleスプレッドシートに記録する
  • 複数のアカウント対象
  • Googleスプレッドシートでシートを指定する

ヘイショー

GASの走らせ方を知っていてコードをコピペすれば5分で作れます。

完成した表はこんな感じです

GASのソースコード

Twitterの各アカウントのフォロワー数を数えるためのスクリプトはこちら。

コード

function TwitterFollowers() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
//Google Spreadsheetのシート名を記入
var sheet = spreadsheet.getSheetByName("★Google Sheetのシート名★");
var today = Utilities.formatDate(new Date(), "JST","yyyy/MM/dd")
var lastRow = sheet.getLastRow()
var row = lastRow + 1;
//★アカウント1~3★のところに自分のTwitter IDを入れる
var result1 = getTwitterNumFollowersJson("★アカウント1★");
var result2 = getTwitterNumFollowersJson("★アカウント2★");
var result3 = getTwitterNumFollowersJson("★アカウント3★");
//入力
sheet.getRange(row, 1).setValue(today);
sheet.getRange(row, 2).setValue(result1.followers_count);
sheet.getRange(row, 3).setValue(result2.followers_count);
sheet.getRange(row, 4).setValue(result3.followers_count);
}
function getTwitterNumFollowersJson(screenName) {
var baseURL = "https://cdn.syndication.twimg.com/widgets/followbutton/info.json?screen_names=";
var response = UrlFetchApp.fetch(baseURL + screenName);
var result = null;
if (response.getResponseCode() == 200) {
var text = response.getContentText("utf-8");
if (text != "") {
var data = JSON.parse(text);
if (data.length == 1) {
result = data[0];
}
}
}
return result;
}
function getNumFollowers(screenName) {
var result = getTwitterNumFollowersJson(screenName);
if (result) {
return result.followers_count;
} else {
return 0; // Not Found;
}
}

定期的にスクリプトを走らせるためのトリガーを設定

スクリプトを毎週自動で走らせるために、トリガーを設定します。

  • Extentions → Apps Script
  • 左のサイドバーから「Triggers」を選択
  • 右下の「+ Add Trigger」をクリック
  • ポップアップで「TwitterFollowers」「Head」「Time-driven」「Week timer」「曜日を選択」「時間を選択」を選択して、最後に「Save」をクリックすれば完了です。

まとめ

自分もまだまだ勉強中ですが、これからも学んだ内容をこのブログにアップしていきたいと思います。

ヘイショー

同じように勉強中の方がいらっしゃれば、一緒に頑張りましょう!

それでは、ご精読ありがとうございました。