「正規表現の表」変数で「部分一致が可能なルックアップテーブル的変数」が可能になりました

2017年09月22日
ライター:畑岡 大作

先週のYouTube動画トリガーに続き、Googleタグマネージャで今週も新たな機能実装が行われました。
正規表現の表」という種類の変数で、要は「正規表現が使用できるルックアップテーブル」な変数となります。

……名前がけっこうまだまだふんわりしていますので、もしかしたら名称など変わるかもしれませんね。

  1. ルックアップテーブル? 正規表現の表?
  2. 「正規表現の表」変数の使い方
    1. 各ケースでのAdvanced Settings例
    2. 「キャプチャ グループと置換機能を有効にする」で使用できる置換文字列
  3. 設定例
    1. 基本:部分一致での使用
    2. 応用:一部を抜き出しての使用

ルックアップテーブル? 正規表現の表?

いわゆるルックアップテーブルというのは、ある特定の要素が「〇〇だったら△△を返す」「××だったら□□を返す」というような「条件と値」を表形式で管理するための機能です。
Googleタグマネージャでもそのものズバリな「ルックアップテーブル」という名前で、変数の種類として存在しています。具体的な仕様などについては実装当時の記事Googleタグマネージャに新マクロ「ルックアップテーブル」が登場をご参照ください。

ルックアップテーブル変数の設定画面
指定した変数の値に応じて、異なる値を返すための変数

ルックアップテーブル変数は、例えば複数のサブドメインへ対してGTMコンテナを設置している場合にサブドメイン毎に計測するトラッキングID(UA-XXXXXX-X)を変えたい、といった時などに使用できるとても便利な変数です。
しかし最大の欠点として「条件が完全一致でなければならない」という制限がありました。また、複雑な条件設定などが難しかったのもやや物足りないところでした。

そんな中、今回実装された「正規表現の表」変数はそんなルックアップテーブル変数の欠点を解消できる、とてもスーパーな変数なのです。

正規表現の表変数の設定画面
見た目はルックアップテーブル変数とほぼ同様だが、機能はより上位になっている
「正規表現の表」変数の概要
  • 新しい変数の種類として実装
    (ルックアップテーブルとは異なる変数として実装)
  • 条件の箇所で正規表現が使用可能
  • 部分一致での条件指定が可能
  • Googleアナリティクスのフィルタ設定と同様に、一部分の文字列を抜き出して取得することも可能

「正規表現の表」変数の使い方

すでにGoogleタグマネージャへ変数の種類として実装されていますので、利用は簡単です。

  1. 新規変数登録画面を出す
    変数の一覧画面から「ユーザー定義変数」の「新規」ボタンを押下
  2. 変数タイプで「ユーティリティ」の中にある「正規表現の表」を選択
    ユーティリティ > 正規表現の表 を選択
  3. 参照する変数を「入力変数」で指定
    入力変数をドロップダウンで指定
  4. 必要に応じて「デフォルト値を設定する」や「Advanced Settings」を設定
    オプション設定
  5. 「+行を追加」ボタンを押して、任意の条件(左側の「パターン」欄)と値(右側の「値」欄)を設定
    正規表現の表で条件と値を設定
  6. 名前を付けて保存して完了

ルックアップテーブル変数と同様の見た目ですので、そちらに慣れていれば正規表現の表変数も扱いやすいのではないでしょうか。

ただ注意点として、ルックアップテーブル変数では条件に合致するのが複数行あった場合は「下にある行が優先」でしたが、正規表現の表変数では「上にある行が優先」となります。その点、ルックアップテーブル変数とは真逆ですので気を付けなければなりません。

Advanced Settings
3つのオプションはデフォルトではすべてONになっている

また、オプション設定となるAdvanced Settingsはチェック状況によって結果が大きく変わってきますので、こちらも注意が必要です。
2017/9/21時点ではオプションは3つ存在しており、それぞれ以下の役割を持っています。

大文字と小文字を区別しない
名前の通り、アルファベットの大文字と小文字を区別するか(ON)、しないか(OFF)を設定します。
完全一致のみ
「パターン」で指定したものと完全一致した場合のみとするか(ON)、もしくは部分一致でもOKとするか(OFF)を設定します。
キャプチャ グループと置換機能を有効にする
「パターン」に合致した箇所を「値」へ置換した「入力変数の値」を返すか(ON)、もしくは「値」だけを返すか(OFF)を設定します。

すべてデフォルトではONの状態となっていますので、変数の種類を選択した時点では「大文字と小文字を区別しない」「完全一致」となる設定になっています。
つまりデフォルトでは「部分一致」の条件にはならないわけです。

もし条件が部分一致でも動作するようにしたい場合は「完全一致のみ:OFF」かつ「キャプチャ グループと置換機能を有効にする:OFF」にしなければなりません。
というのも「キャプチャ グループと置換機能を有効にする:ON」の状態では「『入力変数』の『パターン』で設定した箇所を『値』に置換した値」が返されてしまうからです。(なお1つの条件(パターン)内で複数個所にパターンが合致した場合は、すべての合致箇所が「値」へ置換されます。例えば「aabc」という入力変数の値へ対して「パターン:a」「値:」とした場合、返される値は2つあるaが両方とも置換されて「ああbc」となります)

例えば「/column/2017-09-15/17-41/」というPage Path変数を入力変数にし、「column」というパターンで「コラム」という値になるよう設定したとします。
その場合「完全一致のみ」と「キャプチャ グループと置換機能を有効にする」オプションの各状況で返される値は以下のようになります。

サンプルの状況
  • 入力変数:Page Path
    • /column/2017-09-15/17-41/
  • 正規表現の表:1行目条件
    • パターン:column
    • 値:コラム
「完全一致のみ:ON」の場合
undefined
(完全一致しないため、デフォルト値となる)
「完全一致のみ:OFF」かつ「キャプチャ グループと置換機能を有効にする:ON」
/コラム/2017-09-15/17-41/
(パターンと一致するcolumnの箇所が値の「コラム」に置換されたPage Path変数が返される)
「完全一致のみ:OFF」かつ「キャプチャ グループと置換機能を有効にする:OFF」
コラム
(「値」のみが返される)

ですので、完全一致と部分一致のどちらとして使いたいかによって、Advanced SettingsのON/OFFを切り替えましょう。
大まかには次の2通りになると思います。

各ケースでのAdvanced Settings例

完全一致で条件を設定する場合
デフォルト設定
デフォルトのままでOK(完全一致のみ:ON)
部分一致で条件を設定する場合
「完全一致のみ」と「キャプチャ グループと置換機能を有効にする」をOFF
「完全一致のみ:OFF」かつ「キャプチャ グループと置換機能を有効にする:OFF」

正規表現に詳しい方であれば「完全一致のみ:OFF」でも「キャプチャ グループと置換機能を有効にする:ON」を使えると思いますが、予期せぬパターンマッチで正規表現が誤動作する可能性がありますので、利用には十分な注意が必要です。ご留意ください。
(「完全一致のみ:OFF」かつ「キャプチャ グループと置換機能を有効にする:ON」の実際の設定例は後述の「設定例 > 応用」で取り上げていますので、そちらもご参考ください)

また、「正規表現の表」の「値」欄では、Googleアナリティクスのフィルタ設定のように「パターンに合致した箇所」を参照するための機能もあります。
キャプチャ グループと置換機能を有効にする」がONの状態であれば、「値」欄へ以下のように入力することでそれぞれパターンにマッチした箇所を参照することができます。

「キャプチャ グループと置換機能を有効にする」で使用できる置換文字列

サンプルの状況
  • 入力変数:Page Path
    • /column/2017-09-15/17-41/
  • 正規表現の表:1行目条件
    • パターン:((20\d+)-(\d+)-(\d+)/(\d+)-(\d+))
      ※「\d」は正規表現で「半角数値」を、「+」は「1回以上の繰り返し」を示します。
       (「\d+」は「1桁以上の半角数値」となります)
置換文字 役割
取得例
$& パターン全文
例)2017-09-15/17-41
$n
($1や$2)
()で括られたn番目の該当箇所。
  • ()がパターン内で使用されていない場合は無効($nでそのまま出る)
  • ()内のパターンに一致した文字列を指し、番号は(の登場順に割り振られる。
    例えば((abc)-(def))であれば$1(または$&ではabc-defになり、$2ならabc$3ならdefとなる。
  • 番号が1-9までは$n($1~$9)、番号が10以上ある場合は$nn($01~$99)での表記とする
例)$1……2017-09-15/17-41
 $2……2017  $3……09  $4……15
$' パターンより前の記述
  • 完全一致がONだと無効(空欄)
例)/column/
$` パターンより後の記述
  • 完全一致がONだと無効(空欄)
例)/

置換文字の利用は正規表現ともども少々複雑になりがちですが、使えれば対応できる幅が格段に増えますので、気になった方はぜひ正規表現を調べ、利用してみてください。

設定例

さて、では2つほど具体的な設定例を挙げてみたいと思います。
完全一致であればルックアップテーブル変数と変わりませんので、ここでサンプルとしてお見せするのは部分一致で設定する場合の例となります。

基本:部分一致での使用

例えば、ドメインによって異なるトラッキングID(UA-XXXXXX-X)を返したい、などであればこのような設定になります。

ドメインに応じて異なるトラッキングIDを返す設定例
入力変数でPage Hostnameを選び、パターンへ部分一致のドメイン名を、値へトラッキングIDを設定して「完全一致のみ」と「置換機能」をOFFにする
ポイント
  • 「完全一致のみ」と「キャプチャ グループと置換機能を有効にする」をOFFにする

特に複雑な正規表現も使わず、単純に「固定文言で部分一致させたい」などであればAdvanced Settingsさえ気を付ければとてもシンプルですね。
正規表現が使える方であれば、さらにパターンも複雑にできるので応用の幅は広いと思います。

応用:一部を抜き出しての使用

例えば、ブログ記事などのURL中から「-」繋ぎになっている年月日部分を連結した値として取得したい、といった場合はこのような設定になります。

URL中から年月日を抜き出す設定例
入力変数でPage Pathを選び、パターンを「.*/(\d+)-(\d+)-(\d+)/.*」とし、値を「$1$2$3」と設定して「完全一致のみ」をOFFにする(「置換機能」はONのまま)
ポイント
  • $n($1や$2など)」でパターンの()内に合致した文字列を取得可能
  • 「キャプチャ グループと置換機能を有効にする」をONにしたまま部分一致にしたい場合は、パターンの冒頭と最後へ「.*」を付ける

上記はURLをベースにしていますが、例えばDOM要素変数として取得したテキストを加工したり、はたまたページのtitleから自社サイト名を除去したり、など用途の幅が広いです。

以上、「正規表現の表」変数はいかがでしたでしょうか。ルックアップテーブル変数でかゆいところに手が届かなかった経験がある方は、特にわくわくする機能実装だったと思います。わくわくしました。

ただ正規表現および置換を行うため、おそらく処理負荷的には「正規表現の表」変数の方がルックアップテーブル変数よりも高いことが懸念されます。
ですので、機能的に上位互換だからといって「正規表現の表」で統一するよりも、基本的には「完全一致で正規表現を使わずに指定可能」であればルックアップテーブルを、「部分一致や正規表現が必要な場合」であれば「正規表現の表」を使う、といった使い分けをおすすめいたします。