2023年4月6日木曜日

【GAS】Google Analytics 4 のデータを Googleスプレットシートに集約し、PDFでメール添付する方法(アドオンなし編)

 以前やり方について書き出していたのは、アドオン「Google Analytics™ connector by SyncWith」を活用したものでした。

この方法についてはアドオンが無料でできる範囲が限られてしまうため、今回はアドオンなしでの方法を紹介します。

今回は Google Analytics 4 限定の方法なります。

STEP 1. Googleスプレットシートの準備


Googleスプレットシートを作成し、「Configuration」シートを作成。
そのシートに下記の情報を入力します。


1行目:タイトル等、なんでもよい
2行目:
 A2:Report Name(名称は何でも良い)
 B2, C2, D4 と2列目から各列に生成するシート名を入力
3行目:
 A3:Property ID(名称は何でも良い)
 B3, C3, D3 と2列目から各列に Google Analytics 4 のプロパティIDを入れる
4行目:
 A4:Start Date
 B4, C4, D4 と2列目から各列に取得したい範囲(開始日)を入力(日付形式 2022/04/01 や 2022-04-01等)
5行目:
 A5:End Date
 B5, C5, D5 と2列目から各列に取得したい範囲(終了日)を入力(日付形式 2023/03/31 や 2023-03-31等)

STEP 2. Google Apps Script の挿入と初期設定


Googleスプレットシートの拡張機能 > Apps Script を選択して Google Apps Script エディタを起動します。


Google Apps Scriptエディタが開いたら、すでに入力されているサンプルコードを削除して、下記のURLにあるコードをコピーして、ペーストしてください。

- get_GA4_with-GAS.gs (GitHubに置いています)


すると下図のようにコードが入っているはずです。


一旦これでコードを保存してください。
名前は好きなもので構いません。ここでは get_GA4という名前にしたとして話を進めます。


コードはそのままでも動作しますが、いくつか設定を変更することで取得データの変更が可能です。

STEP 1で作成した「Configuration」シートの名前を変更した

下記の赤文字部分も変更してください。

const Configu_sheet = 'Configuration';

Dimension の変更や追加をしたい

下記の Dimensions 配列に追加してください。
標準では国別のアクセスログ集計になります。
const Dimensions = [
  {name: 'country'},
//  {name:'eventName'},
];

Metirics を追加したい

下記の Metrics 配列に追加してください。
標準は、アクティブユーザー(訪問者数)と表示回数(アクセスログ)になります。
const Metrics = [
  {name: 'activeUsers'},
  {name: 'screenPageViews'},
//  {name:'eventCount'},
];
Dimensions に対してフィルタを使いたい

下記の Dimensions_filters を有効にして条件をいれてください。
現在は /* と */ でくくることで無効化しています。これを外すと、 Dimensions で eventName を取得したときに page_view に 限定にできます。
/*
const Dimension_filters = {
filter: {
fieldName: 'eventName',
stringFilter: {
value: 'page_view'
}
}
}
*/

STEP 3. Google Apps Script のサービス追加と実行

左サイドメニューの「サービス」の「+」をクリックしてください。


そして、Google Analytics Data API を選択して追加してください。



次に下図の「実行ログ」の左側にある関数が「runReport」になっているのを確認して、「実行」をクリックしてください。

すると最初に実行するときに、権限に関する承認・許可画面がでてきます。

下記の表示がでてくれば「権限の確認」に進んでください。

無料版 Googleアカウントの場合、「このアプリが確認されていません」という警告がでてくるかもしれません。その場合には「詳細」より、「安全でないページ」への移動をしてください。スクリプトの安全性が不明だということで出ます。


あとは実行するアカウントを選択し、


アカウントに対してこのスクリプトの実行許可を与えてください。



そうすることでスクリプトの実行が可能です。
うまく実行されれば Configuration シートの  Report Nameで設定したシート名ができているはずです。そこにGoogle Analytics 4 のデータが入っているはずです。


STEP 4. Googleスプレットシートにまとめページ「TOTAL Summary」シートを作成

個別の Google Analytics 4 のデータはこれで取得できたので、次は一覧ページを作成します。

シートの2行目まではメモとなります。ただしメールで送付されることになるので、ログの取得期間などの情報をいれておくと便利かと思います。


上記で重要なのは、次の4つです。

Sheet Name: Google Apps Scriptで生成したシート名

Access Log: 関数「=SUM(INDIRECT(B5 & "!C:C"))」を入れる
*Sheet Name!C:C(screenPageViewsの欄)の合計値となります。

Visitors: 関数「=SUM(INDIRECT(B5 & "!B:B"))」を入れる
*Sheet Name!B:B(activeUsersの欄)の合計値となります。

Countries: 関数「=COUNTIF(INDIRECT(B5 & "!A:A"), ">=A")」をいれる
*Sheet Name!A:A(Countryの欄)が空欄でない場合
*COUNTA や COUNTIFの "<>" 条件の場合、空欄にみえてデータが入っているのかうまくいきません。そのため、C言語でよくやる文字の数値での比較「C言語における文字(文字変数char)・文字列の表現(ASCIIコード表つき)」が使えるんじゃないかーと思ってやってみたら上手く言った程度です。ここは改良の余地ありですね。

TOP 10 of Countries: 関数「=INDIRECT(B5 & "!A2:A11")」を入れる
このあたりは、A2:A21すると TOP 20なども可能です。

STEP 5. トリガー(スケジュール)の設定


手動での実行がうまくいったなら、次は定期的に実行するトリガーの設定をしてみましょう。トリガーを使って定期実行するということは、まず Google Analytics 4 で取得する開始日と終了日が自動的に変更にならないと意味がありません。毎回同じ期間を取得してもいみがないということです。

そこでいくつかの例を紹介しておきます。

1日前のみ取得
Start Date: =TODAY()-1
End Date: =TODAY()-1

前月のみ取得
Start Date: =DATE(YEAR(TODAY()),MONTH(TODAY())-1,1)
End Date: =EOMONTH(TODAY(),-1)
*EOMONTH の代わりは、=DATE(YEAR(TODAY()), MONTH(TODAY()) + 0, 0) でも構いません。

今年度のみ取得
Start Date: 年度開始日
End Date: =EOMONTH(TODAY(),-1)

Google App Script エディタの左サイドメニューにある「時計」マークを選択します。



下図のように「トリガーを追加」ボタンがあるのでクリックします。

下図のように、実行する関数を runReport にして、毎月実行するようにスケジュールを設定してから保存します。保存後、Google Apps Scriptを初めて実行したときのように、アカウント指定と権限付与の許可を求めてくるので許可を与えてください。


設定できれば下図のようにトリガーが設定されています。
指定した日時に実行された場合、下図に成功したのか失敗したのか記録されます。

STEP 6. 一括取得した Googleスプレットシートの特定シートデータをメール本文(HTML)と PDF にして添付したメール送信


基本的には下記の後半「(後半)一括取得した Googleスプレットシートの特定シートデータをメール本文(HTML)と PDF にして添付したメール送信」を参照してください。
の部分です。こちらは、実際に 「TOTAL Summary」シートで処理したい(メール本文やPDF添付)範囲を指定してください。こちらは作り込みが面倒なので手動設定にしています。



2023年2月16日木曜日

Googleスプレットシートと連携したGoogleフォームに入力されたデータを自動折返しする方法

 Googleフォームに入力したデータを、自動で Googleスプレットシートに保存する設定をしている場合、入力データが長いとセルからはみ出して表示されています。その都度、一括で折り返し設定をすればよいのですが、ここをプログラム(Google Apps Script)で自動で折り返したい場合もあるかもしれません。これを実現する方法を備忘録としてまとめておきます。

STEP 1. コーディングする


1. Googleスプレットの拡張機能 > Apps Scriptを開く。



2. 既存のコードを削除して置き換える。


参考:https://speakerdeck.com/kimipooh/practice-lets-experience-more-comfortable-google-services-with-google-apps-script?slide=10

既存のコード

function myFunction() {

}

置き換えるコード


function autoWrap() {
 var sheet = SpreadsheetApp.getActiveSheet();
 const lastRow = sheet.getLastRow();
 const lastColumn = sheet.getLastColumn();

 sheet.getRange(lastRow, 1, lastRow, lastColumn).setWrapStrategy(SpreadsheetApp.WrapStrategy.WRAP);
}

function all_autoWrap() {
 var sheet = SpreadsheetApp.getActiveSheet();
 const lastRow = sheet.getLastRow();
 const lastColumn = sheet.getLastColumn();

 sheet.getRange(1, 1, lastRow, lastColumn).setWrapStrategy(SpreadsheetApp.WrapStrategy.WRAP);
}
置き換えたらコードを保存します。

STEP 2. トリガー(いつ実行するのか)を設定する


下図のように左サイドメニューの時計マーク(トリガー)を選択し、「トリガーの追加」ボタンをクリックします。

表示されたトリガーは、次のように設定します。

実行する関数を選択:autoWrap
イベントの種類を選択:フォーム送信時
エラー通知:今すぐ通知を受け取る


ここで保存します。
このとき、下記にあるように安全性が確認されていないなどエラーがでることがあります。その場合には下記のリンク先を参考に、詳細から「安全でないページへ移動」リンクを押して許可してください。

STEP 4. 作成した Google Apps Scriptを実行してみる


STEP 3. テスト


Googleフォームから入力したデータが、Googleスプレットシートの各セルで折り返していることを確認してみてください。
ただし、下図のようにすでに入力されたデータは折返ししません。


もし、すでに入力されたデータも含めて一括で折り返ししたい場合には
先程作成した Google Apps Scriptの画面を開いて、実行する関数について「all_autoWrap」を選択した上で、「実行」ボタンをクリックしてみてください。


2023年2月16日 @kimipooh

2023年2月3日金曜日

macOS Ventura でデスクトップ等に保存したURLのショートカットファイルのデフォルトブラウザがSafariから変更できない

下記の Chromeヘルプコミュニティで質問があり、手持ち端末で再現しました。解決策が少し長くなるのでブログに備忘録的にまとめます。 本情報は 2023年2月3日時点のものであり、手持ち端末で試して結果のものです。すべての端末で使えるかどうかは分かりません。

MacでブラウザはGoogle Chromeでデフォルト設定もしてありますが、ショートカット作るとショートカットのデフォルトブラウザがsafariになってしまします。

再現した環境

  • M1 MAX MacbookPro 16inch
  • macOS Ventura 13.2

再現手順

  1. Google Chromeブラウザでウェブサイトを開く
  2. URL欄の鍵マーク部分をドラッグして、デスクトップへペーストする
    *すると下記のようなアイコンができます。
  3. 「情報を見る」から「このアプリケーションで開く」を見ると、Safariが指定されされている。
     *Safariや Chromeブラウザ設定では、デフォルトブラウザは Google Chromeにしている。更にこの設定は、変更不可となっている。

関連情報

解決手段


上記関連情報を参考に、下記の設定をすることで解決しました。

  1. 下記より、SwiftDefaultApps(zipファイル) をダウンロード
    https://github.com/Lord-Kamina/SwiftDefaultApps/releases

  2. ダウンロードした zipファイルを展開し、「SwiftDefaultApps.prefpane」を開く
  3. 現在ログイン中(端末のユーザーの話)のユーザーか、すべてのユーザーのいずれにインストールするか聞いてきます。どちらでもよいですが、私の場合には現在ログイン中のユーザーへインストールしました。

  4. システム設定の左サイドメニューの末尾に「SwiftDefaultApps」が追加されているはずです。
    こちらの「Uniform Type Identifiers」タブにアクセスし、「com.apple.web-internet-location」の項目を開いてください。こちらが Safari担っていると思います。これについて「Other」を選択して、Google Chromeなど変更したいブラウザを指定してみてください。
  5. うまく設定できれば、下図のように Safari以外が選択されていると思います。


  6. その状況で再度、デスクトップ等に保存していたURLショートカットファイルの「情報を見る」から、「このアプリケーションで開く」が変更したブラウザになっていることを確認してみてください。

2023年2月3日 @kimipooh

2023年1月31日火曜日

Gmail UI の変遷

 一年ほど前から、Gmail UIの新しい UIが使えるようになり、2023年1月31日現在、どうやら新 Gmail UIが強制(もとに戻せなくなった)模様です。これは、Gmailヘルプコミュニティでもとに戻せなくなったという質問が多発しているためです。

筆者は、2008年ぐらいから使い始めていますが(実際には2007年からテスト的に使い始めた)、当時のUIは下記のような感じだったのなぁと思います。それから何度かUI変更されてきました。

Gmailがリリースされたのは、2004年4月1日でした。当時 1GBのメール容量が無料で使えるなどというのは、かなりインパクトがあったようです。当時他のサービスが数MBしか使えなかったようですので。

2005年には米国限定で一般公開され、Gmail日本語版がリリースされたのは、2006年。当時は招待制でスタートしました。

当時のUIを体験したい場合には、PC版Gmailにおいて、簡易 HTML形式で表示することで擬似的ではありますが可能かなと思います。

Gmail 日本語版が一般公開したのは、2006年8月。このときには一人 2.5GBを使うことができたようです。そうそう、当時は 9ヶ月放置するとアカウントが削除されるという利用規約もあったと思います。それはいつの間にやら消え、2021年6月1日より、2年間利用しないでいるとサービスによってはデータ削除される 状況になってますね。

2008年に、Google Apps (現在の Google Workspace)を組織的に導入して以来、無料版 Gmailほうも使い続けていますが、当時は毎日容量が増えていくのが Gmailのフッター部分で確認できていたように思います。

2023年1月31日現在、15GBが使える状況になっています。

さて、GmailのUIがどのように変化していったのか、備忘録としてメモしておきたいので下記に書き出してみました。もしかしたら、抜けているところがあるかもしれません。

GmailのUIと主な機能推移


こうしてみると、かなりいろいろな変更をしてきたのだなぁとしみじみと思いました。
今後どのように進化していくか楽しみですね!

2023年1月31日 @kimipooh
2023年12月14日 追記

2022年12月8日木曜日

ダイヤモンド プロダクトエキスパートと私

2011年6月に、日本語版の Googleヘルプフォーラム(現Googleヘルプコミュニティ)で国内で初めてトップレベルユーザー(現プロダクトエキスパート)に就任してから、11年半ぐらいになる 2022年11月に、Gmailヘルプコミュニティにおいて日本で初めて最高位となるダイヤモンドプロダクトエキスパートに認定されました(他のいくつかのプロダクトではすでにダイヤモンドプロダクトエキスパートはいます)。

特にそれを狙ってやっていたわけではありませんが、結果的に認定されこうして額縁に入った認定証が送られてくると嬉しいものですね!

これまで、Gmailを皮切りに Chrome、アカウント、グループなど様々なヘルプコミュニティで活動公開プロフィール参照)してきました。またコミュニティに関連するイベントで海外に招待していただき、様々な刺激を受けることが出来ているのは、いつもワクワクしています。

今後も引き続き、よく利用し、よくお世話になっている Googleプロダクトを楽しみつつ、貢献していければと思います。

2022年12月8日 @kimipooh

2022年10月27日木曜日

Chromeのメモリ自動解放機能について

 Chromeのメモリ使用量が激減、ベータ版のメモリ自動解放機能を試してみた( https://www.sumahoinfo.net/ )のように2018年ぐらいからベータ版として使えていましたが、いつのまには正式対応していたようです。

具体的には、一定時間使用していないタブはメモリが解放されるというもの。そのタブにアクセスすると再度読み直しが発生します。このため大量のタブを開いていても、開いたときは各タブごとにメモリが必要ですが、そのうちメモリが解放されていくことで無駄にメモリが消費され続けるのを防ぐ仕組みの模様。

どのような状況になっているかは chrome://discards をURLにいれることでチェックできます。

下図のように、 Loading State が「unloaded」になっていればメモリが解放されているタブだということになりますね。


ここの Graphタブをみると、それぞれタブからどのようなリンクが広がっているのか、つながっているかを可視化しているようで面白いですね。




ただあまりタブを開かずに、読み直されると困るという場合には
拡張機能「Disable automatic tab discarding」などをインストールすることで無効化できる模様。

2022年10月27日 @kimipooh

2022年9月25日日曜日

【GAS】GASによる Googleドキュメントの文字色を一括置換する方法

ふとそういう質問を Quora で発見したため、ネットでコードを探しましたが、似たようはものはありましたが全く同じものはなかったので作成してみました。

コードと利用方法

イメージとしては、たとえば赤文字をすべて黄色文字に変更したい場合に使うという感じになります。Google ドキュメントにはそのような機能がないため、Google Apps Scriptにて実装する必要があります。


2022年9月25日 @kimipooh