1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ほぼ、そのまま使えるコード配布中】Googleアナリティクスの実績をスプレッドシートへ自動で転記する方法

Last updated at Posted at 2023-07-24

Apps Scriptとは?

Apps Scriptとは、Googleが提供するプログラム言語で、javascriptをベースに作られています。

GmailやGoogleドライブなど、Googleのサービスと連携して何かを行うWebサービスやアプリをつくることができます。

1.png

アナリティクスと組み合わせて、何かできそう!

Googleアナリティクスの分析結果をレポート化して、毎日自動で配信する方法を、下記の記事で紹介しました。

※ここで紹介しているレポートは、テンプレートも配布中です。

このレポート、めちゃくちゃ見やすくて本当に良いものなのですが、1つだけ不得意なことがあります。

それは…「データのストック(蓄積)には不向きなこと」。

つまり、日々の実績をシートにまとめて、後で推移などを分析したり、このタイミングでアクセスが急激に伸びている!と言ったことを見るのには、実は不向きなんです。そこで、このレポートの運用はもちろん継続しつつ、シンプルに実績を蓄積できないかな…と考えました。

そう、こんな感じに。

5.jpg

実は、「Apps Script」とGoogle Analyticsを組み合わせることで、自動でデータを蓄積することができるんです。

Google Analyticsとの連携方法

➀「Apps Script」の画面へ移行します

1.png

スプレッドシート「拡張機能」から「Apps Script」を選んでください。

➁GoogleアナリティクスのAPIに接続して、集計値を参照できるように準備します

2-1.png

・「サービス」をクリックし、「Google Analytics Data API」を選択します
・バージョンは最新の「ベータ版」、IDが「AnalyticsData」であることを確認します
・最後に「追加」を押して、接続完了です

2-2.png

「サービス」の下に「AnalyticsData」と表示がされていればOKです。

Apps Scriptの画面構成

ここで、「Apps Script」の画面構成について、見ておきましょう。

3.png

・右下の青枠の広いスペースが、コード(Javascript)を書く場所になります。
・「実行」を押すと、上記で書いたコードが動き、処理が開始されます。

上記の画像を翻訳すると…

「myFunction」という名前の空っぽの関数を作っていて、「実行」ボタンを押すことで、「myFunction」の処理が開始されます

という意味になります。

Google Analyticsの集計値を取得してみよう

Apps Scriptへコードを貼り付けます

今回は、下記の項目を取得します。
・日付
・エンゲージメント時間(秒)
・総PV数
・アクティブユーザ数
・新規ユーザ数
・イベント数
・コンバージョンイベント数

※下記のJavascriptのコードを、コピーして貼り付けてください
※貼り付ける際には、デフォルトで書かれている「function myFunction() {}」は消去して大丈夫です。

function GetDateGA4() {

  // Googleアナリティクスの「プロパティID」を取得します
  /*** GA4のプロパティIDを記載してください ***/
  const propertyId = 'ここにプロパティIDを貼り付けます';

  try {
    // ここでは取得したい項目を設定します(取得順は下記の順となります)
    //「日付」「総PV数」「アクティブユーザ数」「新規ユーザ数」「エンゲージメント時間(秒)」「イベント数」「コンバージョンイベント数」
    const metric = AnalyticsData.newMetric();
    metric.name = 'screenPageViews';

    const metric1 = AnalyticsData.newMetric();
    metric1.name = 'userEngagementDuration';

    const metric2 = AnalyticsData.newMetric();
    metric2.name = 'activeUsers';

    const metric3 = AnalyticsData.newMetric();
    metric3.name = 'newUsers';

    const metric4 = AnalyticsData.newMetric();
    metric4.name = 'eventCount';

    const metric5 = AnalyticsData.newMetric();
    metric5.name = 'conversions';

    // 行の項目を指定します
    const dimension = AnalyticsData.newDimension();
    dimension.name = 'date';

    // 取得期間を指定します(昨日:yesterday, 7日前:7daysAgo, 今日:today, 28日前:28daysAgo)
    const dateRange = AnalyticsData.newDateRange();
    dateRange.startDate = 'yesterday';
    dateRange.endDate = 'yesterday';
    
    // GA4からデータを取得するためのリクエストを作成します
    const request = AnalyticsData.newRunReportRequest();
    request.dimensions = [dimension];
    request.metrics = [metric,metric1,metric2,metric3,metric4,metric5];
    request.dateRanges = dateRange;
    
    // 指定されたGA4のプロパティIDからデータを取得します
    const report = AnalyticsData.Properties.runReport(request,
        'properties/' + propertyId);
    if (!report.rows) {
      console.log('Oops...データを取得できません!.');
      return;
    }
    
    // 現在アクティブなシート名「****」を取得します
    /*** スプレッドシート内の画面下「タブ名」を記載してください ***/
    const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = spreadsheet.getSheetByName('Daily'); 

    // Analytics Data APIから取得したレポートの結果を整えます
    const rows = report.rows.map((row) => {
      const dimensionValues = row.dimensionValues.map(
          (dimensionValue) => {
            return dimensionValue.value;
          });
      const metricValues = row.metricValues.map(
          (metricValues) => {
            return metricValues.value;
          });
      return [...dimensionValues, ...metricValues];
    });

    // 取得したデータをシートのA列を基準とした最下行に出力します
    var lastRowA = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
    sheet.getRange(lastRowA + 1, 1, report.rows.length, rows[0].length)
        .setValues(rows);

    // 処理に"成功"した時にコンソールログに出力するメッセージはコチラ
    console.log('おめでとう!レポートは正常に出力されました!: %s',
        spreadsheet.getUrl());
  
  } catch (e) {

    // 処理に"失敗"した時にコンソールログに出力するメッセージはコチラ
    console.log('おやおおや…何かがおかしいみたいだぞ?: %s', e.error);
  
  }
}

貼り付けたコードをちょっとだけ解説

今回のコードの大まかな流れは、こんな感じです。

GA4のプロパティIDを取得

取得したいメトリクスを定義

データの行の項目を「日付」で指定

取得期間を指定

リクエストを作成

指定されたプロパティIDからデータを取得

アクティブなスプレッドシートのシート名を取得

取得したデータを整理

整理したデータをスプレッドシートに出力

成功/失敗メッセージをコンソールに出力

実行ボタンを押してみましょう

「実行」ボタンを押すと、下記の画像のように結果が出力されます。
※見出しは出力されないので作成しています。
 
4.jpg

データが蓄積されると、こんな感じで日々の結果をストックすることができます。

5.jpg

皆さんの環境に合わせるには…ココを書き換えましょう

書き換えなければいけない箇所は「2箇所」です。

➀GA4のプロパティID(上から4行目あたり)

const propertyId = 'ここにプロパティIDを貼り付けます';

8-2.png

プロパティIDは、この数字です。

プロパティIDは、Google Analyticsの「アカウント名横よこの▼」>「アナリティクスアカウント」>「プロパティとアプリ」で確認ができます。

8-1.png

8-3.png

(例)プロパティIDが「123456789」の場合

const propertyId = '123456789';

➁結果を出力するスプレッドシートの「タブ名」(下から25行目あたり)

const sheet = spreadsheet.getSheetByName('Daily'); 

上記のコードでは、「Daily」というタブが指定されていますので、Dailyを書き換えましょう。

6.png

「タブ名」とは、スプレッドシートのココのことです。今回のコードでは結果を出力する「シート名」については、記載する必要はありません。

(例)タブ名が「Output」の場合

const sheet = spreadsheet.getSheetByName('Output'); 

※注意!
デフォルトでは「myFunction」が実行されるようになっているので、コードを貼り付けた直後に「実行」ボタンを押すと、下記のエラーが表示されます。

7.png

これは、コードを貼り付けた直後に出る1回切りのエラーなので、気にしないでください。
もう一度、「実行」ボタンを押すと正常に動きます。(以降、同様のエラーが出ることはありません)

集計を自動化してみましょう

「実行」ボタンを押すことで、前日の実績がスプレッドシートへ転記できることが分かりました。でも、毎日「実行」ボタンを押すというタスクをスケジュールへ入れるのは、ちょっとナンセンスです。

そこで、毎日決まった時刻に「実行」ボタンが押されるように、処理を自動化してみましょう。

自動化の方法

「Apps Script」のホーム画面に戻り、「トリガー」>「トリガーを追加」ボタンを押します。

9.png

トリガーの詳細設定画面が立ち上がりますので、設定をしていきます。

10.png

ここでは、毎日「AM6:00~7:00に処理が自動実行される」ように設定しています。

・実行する関数:今回ペーストした関数の名前を選択してください
・実行するデプロイ:「Head」で構いません
・イベントのソース:時間主導型
・時間ベースのトリガータイプ:日付ベースのタイマー
・時刻:午前6時~7時
・エラー通知設定:今すぐ通知を受け取る

上記設定ができたら「保存」を押して完了です。

この設定により、毎日自動で「実行」ボタンが押されるようになりました。あとは、毎朝追加される実績をチェックすることに時間が割けるので、有意義にサイト運営ができますね。

この記事は、著者が運営するメディア「ぬるぺでぃあ」でも読むことができます(記事はコチラ

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?