JavaScriptを使用してGTMのJSONファイルをExcelフォーマットに変換
GTM JSONからExcelへの変換フロー GTM JSON {“container”:{ “tag”:[…] “trigger”:[…] “variable”:[…] }} JavaScript データ 変換処理 Excel タグ一覧 トリガー一覧 変数一覧 各シートにデータを整理して出力 タグ・トリガー・変数の関連付けを保持
// GTM JSONをExcelに変換するスクリプト
import * as XLSX from 'xlsx';

class GTMExcelConverter {
    constructor(jsonData) {
        this.data = jsonData;
        this.workbook = XLSX.utils.book_new();
    }

    // タグ情報を処理
    processTags() {
        const tags = this.data.container.tag.map(tag => ({
            'タグ名': tag.name,
            'タグID': tag.tagId,
            'タグタイプ': tag.type,
            'トリガー': this.getTagTriggers(tag),
            'ステータス': tag.paused ? '停止' : '有効'
        }));

        const worksheet = XLSX.utils.json_to_sheet(tags);
        XLSX.utils.book_append_sheet(this.workbook, worksheet, 'タグ一覧');
    }

    // トリガー情報を処理
    processTriggers() {
        const triggers = this.data.container.trigger.map(trigger => ({
            'トリガー名': trigger.name,
            'トリガーID': trigger.triggerId,
            'トリガータイプ': trigger.type,
            'ステータス': trigger.paused ? '停止' : '有効'
        }));

        const worksheet = XLSX.utils.json_to_sheet(triggers);
        XLSX.utils.book_append_sheet(this.workbook, worksheet, 'トリガー一覧');
    }

    // 変数情報を処理
    processVariables() {
        const variables = this.data.container.variable.map(variable => ({
            '変数名': variable.name,
            '変数ID': variable.variableId,
            '変数タイプ': variable.type,
            'ステータス': variable.paused ? '停止' : '有効'
        }));

        const worksheet = XLSX.utils.json_to_sheet(variables);
        XLSX.utils.book_append_sheet(this.workbook, worksheet, '変数一覧');
    }

    // タグに紐付いているトリガーを取得
    getTagTriggers(tag) {
        if (!tag.triggerIds) return '';
        return tag.triggerIds.map(triggerId => {
            const trigger = this.data.container.trigger.find(t => t.triggerId === triggerId);
            return trigger ? trigger.name : triggerId;
        }).join(', ');
    }

    // Excelファイルを生成
    generateExcel(filename = 'gtm_container.xlsx') {
        this.processTags();
        this.processTriggers();
        this.processVariables();
        
        // スタイル設定
        this.workbook.Sheets['タグ一覧']['!cols'] = [
            { wch: 30 }, // タグ名
            { wch: 15 }, // タグID
            { wch: 20 }, // タグタイプ
            { wch: 40 }, // トリガー
            { wch: 10 }  // ステータス
        ];

        // Excelファイルを保存
        XLSX.writeFile(this.workbook, filename);
    }
}

// 使用例
document.getElementById('fileInput').addEventListener('change', async (e) => {
    const file = e.target.files[0];
    const reader = new FileReader();
    
    reader.onload = (event) => {
        const jsonData = JSON.parse(event.target.result);
        const converter = new GTMExcelConverter(jsonData);
        converter.generateExcel();
    };
    
    reader.readAsText(file);
});

HTMLファイルにファイル選択用の入力フィールドを追加:

<input type="file" id="fileInput" accept=".json" />

必要なライブラリをインストール

npm install xlsx

このスクリプトの特徴:

  • GTMのJSONファイルを3つのシート(タグ一覧、トリガー一覧、変数一覧)に分けて出力
  • 各要素の関連付け(タグとトリガーの紐付けなど)を保持
  • 列幅の自動調整
  • ステータス(有効/停止)の表示

制限事項:

  • ブラウザ環境での使用を想定(Node.jsで使用する場合は若干の修正が必要)
  • 大規模なGTMコンテナの場合、処理に時間がかかる可能性あり

また、Node.js環境で使用する場合は、以下のように修正が必要です:

const XLSX = require('xlsx');
const fs = require('fs');

// JSONファイルを読み込む
const jsonData = JSON.parse(fs.readFileSync('GTM-XXXXX_workspace.json', 'utf8'));
const converter = new GTMExcelConverter(jsonData);
converter.generateExcel();

https://www.mitsue.co.jp/knowledge/blog/marketing/202408/05_1028.html