Google広告：コンバージョンタグのソースコードはどうクリックIDを処理しているのか？

#概要
Google広告のコンバージョンタグのソースコードで2種類の広告クリックIDのCookieを処理している部分を見てみました。

#背景
[【Google広告】クロスドメインのコンバージョン計測-実装パターンと検証](https://qiita.com/MasatoEmata/items/1dfe2b780eb8315feb70)でcookieを調べたところ、Google広告に送るためのクリックIDをセットしたcookieとして以下の2種類存在することが確認できました：
- `_gcl_aw`
- `_gac_UA-***`
この2種類のCookieをGoogle広告のコンバージョンタグではどのようにハンドリングしているのか見てみたいと思いました。

※なお、本動機は以下の記事に影響を受けています。
[Google AnalyticsのCookieの仕組みを解説](https://qiita.com/1987yama3/items/d3eb50fdbfbb55733bed)
[Googleアナリティクスのトラッカー生成処理を徹底解説](https://qiita.com/1987yama3/items/5c9910065f5e06caa59e)

#前提
コンバージョンタグを仕込んだページで`conversion_async.js`を見てみます。
<img width="894" alt="Google-Ads-Conversion-js_Source.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/f20e2675-1283-897a-4e84-ed15617855fa.png">
https://www.googleadservices.com/pagead/conversion_async.js
↓
[ソースコードを整形](https://lab.syncer.jp/Tool/JavaScript-PrettyPrint/)。


#詳細
途中で力尽きてざっくりと見ただけになりましたが、2つのCookieをハンドリングし分けているコードの箇所を確認することができました。何か誤りがあればコメントで教えてください__(._.)_

```conversion_async.js
(function() {
...
    //718行目:URLパラメータ(a=b)を作る
    function T(a, b) {
        b = S(b);
        return "" != b && (a = S(a), "" != a) ? "&".concat(a, "=", b) : ""
    }

    //792行目:cookieからクリックID(※)を作る
    //※ "a=b" つまり "_gcl_aw=***"または"_gac_UA-***=***"
    function Kb(a, b) {  
        ...
        var d = "";
        //797行目:cookie"_gcl_aw"にマッチする値を"gclaw"にセットしてリターン
        if (b.google_gcl_cookie_prefix && /^[a-zA-Z0-9_]+$/.test(b.google_gcl_cookie_prefix) && "_gcl" != b.google_gcl_cookie_prefix)
            return d = mb(a, b.google_gcl_cookie_prefix), T("gclaw", d);
        ...
        if ...
        //804行目:"_gac_UA-***"にマッチするcookieの値をセット
        else {
            ...
            b = [];
            a = a.cookie.split(";");
            for (var e = /^\s*_gac_(UA-\d+-\d+)=\s*(.+?)\s*$/, f = 0; f < a.length; f++) {
                //808行目:"_gac_UA-***"にマッチするcookieがあれば値を取得する
                var g = a[f].match(e);
                g && b.push({
                    c: g[1],
                ...
            }
        ...
        }
        //829行目:cookie"_gac_UA-***"にマッチする値を"gac"にセットしてリターン
        return d + (c ? T("gac", c) : "")
    }
            
    //893行目:Google広告へのリクエストURLを作る
    function V(a, b, d, c, e, f) {  
        ...
        switch (e) {
            default: return "";
            case 2:
                    case 3:
                    var g = "googleads.g.doubleclick.net/pagead/viewthroughconversion/";
                break;
            case 1:
                    g = "www.google.com/pagead/1p-conversion/";
                break;
            case 0:
                    g = (c.google_conversion_domain || "www.googleadservices.com") + "/pagead/conversion/"
        }
        g = ["https://", g, S(c.google_conversion_id),...,"?random=",S(c.google_conversion_time)].join("");
        ...
        //909行目コンバージョンラベルやクリックIDを含む各種パラメータを設定
        a = [...,T("label", c.google_conversion_label),...Kb(d, c),...].join("");
        ...
        g += a;
        ...
        return g
    }
...
//1140行目
}).call(this);
```


---
何かあればお手数ですが、本記事か以下アカウントでお知らせください！

**\ *Follow Me!* /**
**[*Qiitaアカウント*](https://qiita.com/MasatoEmata)**
**[*Twitterアカウント*](https://twitter.com/masatoemata)**