// 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