GoogleアナリティクスのタグをGA4にそしてGoogleタグマネージャにしてみた

UA(ユニバーサルアナリティクス?)が2023/7/1で使えなくなるということで、GA4に移行。 さらにGoogleタグマネージャにしてみた。

Googleタグマネージャを使うにはGA4にしておかないと測定IDを取得できない。 つまり以下のフローで作業が必要。

  1. GoogleアナリティクスでGA4設定アシスタントを使用してGA4に移行。
  2. データストリームというメニューで参照すると測定IDを表示するのでメモっとく。
  3. Googleタグマネージャ(以下GTM)にアカウントを新規登録。「コンテナ」という単位で複数のタグを管理する。
  4. コンテナにタグを新規で登録する。タグタイプは「GoogleアナリティクスGA4設定」で測定IDを入力。イベントは「All Pages」を選択。
  5. GTMでプレビュー後、公開。バージョン管理してくれているようで公開ごとにそのバージョン名を入力する。リポジトリにチェックインするときのコメントみたいなものか。

今まではそれぞれのサイトにGoogleアナリティクスで生成したタグIDとともにjavascriptで埋め込んでいたが、 GTMでは同じjavascriptをそれぞれのサイトに埋め込んでおいて、測定IDはGTMで管理するという感じ。 しかも、GTMでは「プレビュー」という機能があり、GTMのタグを埋め込んだサイトで正常に動作するのかを確認できる。 その他もろもろ、以下のサイトが詳しい。

moltsinc.co.jp

なお、Bloggerに埋め込む場合、UAのときは設定にIDだけ入力するところがあるのだが、GTMの場合は現時点ではHTML編集しないといけないらしい。

www.ozu-log.com

しかし、保存しようとするとGTMのjavascriptが以下のエラーとなる。

org.xml.sax.SAXParseException; lineNumber: NNNN; columnNumber: NN; The reference to entity "l" must end with the ';' delimiter.

これは以下のサイトの記載通り、

geromazusoup.blogspot.com

&」をエスケープ「&」してあげないといけないらしい。

<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','XXX-XXXXXX');</script>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&amp;l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','XXX-XXXXXX');</script>

excelの保護ビュー「インターネットから入手したファイルは~」を(削除|解除)する

インターネット経由(メール添付も)で入手したexcelファイルは、

インターネットから入手したファイルは、ウイルスに感染している可能性があります。編集をする必要がなければ、保護ビューのままにしておくことをお勧めします。

と保護ビューとなるものが出る。危険だからということで表示してくれるが、あきらかに問題ないファイルもそうなるので、それを解除する方法。

検索していると「excelのオプションのトラストセンター(セキュリティーセンター)の画面から『インターネットから取得したファイルに対して、保護ビューを有効にする』というチェックを外す」と書いてあるサイトがあるが、それをやってしまうとどんなファイルも保護ビューを表示しなくなる。これではセキュリティ的に意味がない。

あきらかに問題ないファイルだけ保護ビューを外したい、つまり、該当するファイル内部で持っている「インターネットから持ってきているぜ」というフラグを削除するにはどうしたらいいのかを検索していたところ、以下のサイトが秀逸。サンプルバッチまである。

Excel ファイルの保護ビューを外したい

このサイトの「2. 保護ビューを削除するには」に記載してあるとおり、excelからではなくエクスプローラのプロパティから(全般タブにある「セキュリティ」と表示しているところの「許可する」をチェックで)削除するんですね。

Java(JRE)カレンダー和暦(令和対応)について

JDK8(Oracle JDK 8u211以前)を使用していてハマったので備忘録。

$ echo 令和 | native2ascii
\u4ee4\u548c

この値と令和の省略文字"R"、JST時間2019年5月1日9:00(GMT2019年5月1日0:00)のミリ秒(1556668800000)を jre/lib/calendars.propertiesに追記。

$ cat ${JAVA_HOME}/jre/lib/calendars.properties
....
calendar.japanese.eras: \
    name=Meiji,abbr=M,since=-3218832000000;  \
    name=Taisho,abbr=T,since=-1812153600000; \
    name=Showa,abbr=S,since=-1357603200000;  \
    name=Heisei,abbr=H,since=600220800000;   \
    name=\u4ee4\u548c,abbr=R,since=1556668800000
....

以下のサイトが秀逸。

Javaバージョン別の改元(新元号)対応まとめ

Oracleのアーカイブログで以前のデータを消す方法

リカバリマネージャRMANでアーカイブログを削除できるが、実際のアーカイブログフォルダを見ると リストにも表示しないファイルがまだ残っていたりすることがある。 この場合はOS側から削除してもいいらしい。削除の手順としては以下のとおり。

まずRMANを実行して削除

> set ORACLE_SID=FOO
> rman target SYS/SYSのパスワード
RMAN> list archivelog all;
表示したのが管理対象のログファイル
RMAN> delete archivelog all;
RMAN> list archivelog all;
表示しなくなるはず
RMAN> exit

なお、日付指定も可能。例えば30日以前のアーカイブログファイルなら

RMAN> delete archivelog until time 'sysdate - 30';

OS側で削除

上記で表示・削除しているのはoracleが管理対象としているファイルだけ。 なので管理対象外のファイルは残ったままとなる。その場合はOS側コマンドで削除する。 削除後、念のためチェックして(間違って管理対象を削除した場合でも)oracleに認識させる。

> set ORACLE_SID=FOO
> rman target SYS/SYSのパスワード
RMAN> crosscheck archivelog all;
なにもなければ対象なしとなるはず
RMAN> delete expired archivelog all;
なにもなければ削除もない
RMAN> exit

参考サイトは以下がよい。

アーカイブログの削除方法まとめ(ORA-00257対処方法)

モーダルダイアログのソース表示

window.showModalDialog(URL)で表示した画面のソースを調べる方法。 右クリックでソースの表示ができないため。 Windows10で確認。

  1. モーダルダイアログを表示。
  2. CTRL+Pで印刷ダイアログを表示。
  3. C:\Users\ログオンユーザ名\AppData\Local\TempにあるXXXXNNNN.htmが該当ファイル(XXXXNNNNは一時的なファイル名なので一意でない)。

参考サイトは以下。

https://www.trust.or.jp/Public/Blog.aspx?articleNo=11

Oracleの文字列リテラルn'文字'

NCHAR,NVARCHAR2の型の場合の指定方法。

select * from tbl where col=n'文字列';

のようにn'文字列'と指定(N'文字列')でも可。以下が参考サイト。

文字・数値 リテラル - オラクル・Oracleをマスターするための基本と仕組み

Oracleで接続制御(制限)をやってみた

$ORACLE_HOME/network/admin/sqlnet.oraに以下のような記述をすることで、 TCPレベルでホスト名またはIPアドレス(IPv4 or IPv6)で制限できる。なので sqlplusはもちろん、各種ツール、ODBCなどの接続も制限可能。 IPアドレスについてはワイルドカード指定、CIDR指定が可能。 なお、ホスト名にはワイルドカードは使用できない(リスナ起動失敗となる)。

また、TCP.INVITED_NODESはTCP.EXCLUDED_NODESより優先となるらしいので 2つ同時指定は意味がない(と思う)。

参考は以下。

https://docs.oracle.com/cd/E16338_01/network.112/b56287/sqlnet.htm#CIHFGCBH

https://docs.oracle.com/cd/E96517_01/netrf/parameters-for-the-sqlnet-ora-file.html#GUID-A649AB38-37DA-4033-BDC6-9D8E6E417C32

設定例

  • foo.bar.comと192.168.1.0-127を許可。その他は拒否。
TCP.VALIDNODE_CHECKING=YES
TCP.INVITED_NODES=(foo.bar.com, 192.168.1.0/25)
  • foo.baz.comと192.168.*を拒否。その他は許可。
TCP.VALIDNODE_CHECKING=YES
TCP.EXCLUDED_NODES=(foo.baz.com, 192.168.*)

sqlnet.oraを変更後はリスナを再起動。

lsnrctl stop
lsnrctl start

もしくは「サービス」からリスナを再起動。