{"id":11808,"date":"2026-04-27T18:46:36","date_gmt":"2026-04-27T09:46:36","guid":{"rendered":"https:\/\/code-plus.jp\/gp\/?p=11808"},"modified":"2026-07-17T13:48:38","modified_gmt":"2026-07-17T04:48:38","slug":"ga4report-gas-11808","status":"publish","type":"post","link":"https:\/\/code-plus.jp\/gp\/ga4report-gas-11808\/","title":{"rendered":"GA4\u30ec\u30dd\u30fc\u30c8\u3092\u6bce\u65e5\u30e1\u30fc\u30eb\u3067\u81ea\u52d5\u914d\u4fe1\u3059\u308b\u65b9\u6cd5\u3010GAS\u3067\u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8\u4ed8\u304d\u3011"},"content":{"rendered":"<!--\r\ntitle: GA4\u30ec\u30dd\u30fc\u30c8\u3092\u6bce\u65e5\u30e1\u30fc\u30eb\u3067\u81ea\u52d5\u914d\u4fe1\u3059\u308b\u65b9\u6cd5\u3010GAS\u3067\u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8\u4ed8\u304d\u3011\r\ndescription:Google Apps Script\uff08GAS\uff09\u3067GA4\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u30e6\u30fc\u30b6\u30fc\u6570\u30fbPV\u6570\u3092\u6bce\u671d\u81ea\u52d5\u30e1\u30fc\u30eb\u914d\u4fe1\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3002\u524d\u65e5\u6bd4\u30fb7\u65e5\u5e73\u5747\u6bd4\u3067\u30a2\u30af\u30bb\u30b9\u304c\u6025\u843d\u3057\u305f\u3068\u304d\u4ef6\u540d\u3067\u901a\u77e5\u3059\u308b\u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8\u6a5f\u80fd\u4ed8\u304d\u3002\u8907\u6570\u30b5\u30a4\u30c8\u5bfe\u5fdc\u3002\r\n\u30bf\u30b0\u6848: GA4, Google Analytics, GAS, Google Apps Script, \u30a2\u30af\u30bb\u30b9\u89e3\u6790, \u81ea\u52d5\u5316, \u30e1\u30fc\u30eb\u914d\u4fe1, \u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8, WordPress, GTM, \u30a2\u30af\u30bb\u30b9\u76e3\u8996, Analytics Data API\r\n-->\r\n\r\n<p>GA4\u3092\u6bce\u65e5\u30c1\u30a7\u30c3\u30af\u3057\u305f\u3044\u3051\u3069\u3001\u30ed\u30b0\u30a4\u30f3\u304c\u9762\u5012\u2026\u3068\u3044\u3046\u65b9\u306b\u5411\u3051\u3066\u3001Google Apps Script\uff08GAS\uff09\u3092\u4f7f\u3063\u3066GA4\u306e\u30a2\u30af\u30bb\u30b9\u30ec\u30dd\u30fc\u30c8\u3092\u6bce\u671d\u81ea\u52d5\u3067\u30e1\u30fc\u30eb\u914d\u4fe1\u3059\u308b\u4ed5\u7d44\u307f\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\r\n<p>\u524d\u65e5\u6bd4\u30fb\u76f4\u8fd17\u65e5\u9593\u306e\u5e73\u5747\u6bd4\u3067 <b class=\"fw-600\">\u30a2\u30af\u30bb\u30b9\u6570\u304c\u6025\u843d\u3057\u305f\u3068\u304d\u3060\u3051\u4ef6\u540d\u304c\u5909\u308f\u308b\u300c\u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8\u300d\u6a5f\u80fd<\/b> \u3082\u5b9f\u88c5\u3059\u308b\u306e\u3067\u3001gtag \u306e\u8a2d\u7f6e\u6f0f\u308c\u3084\u5e83\u544a\u505c\u6b62\u306b\u3082\u65e9\u671f\u306b\u6c17\u3065\u3051\u308b\u5b9f\u7528\u7684\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\r\n\r\n<!-- \u2756\u76ee\u6b21\u30ea\u30b9\u30c8 -->\r\n<ul class=\"tocList mt-1.5r\" data-toc-id=\"js-tocBWGD\" style=\"height:28rem\"><\/ul>\r\n<ins class=\"tocBtn is-fixed\" data-toc-id=\"js-tocBWGD\"><\/ins>\r\n\r\n<hr class=\"separator mt-3r\">\r\n\r\n<h2 class=\"fz-xl\">\u3053\u306e\u8a18\u4e8b\u3067\u3067\u304d\u308b\u3053\u3068<\/h2>\r\n<ul style=\"list-style-type:bullet;\" class=\"my-0.5r\">\r\n  <li>GA4 \u306e\u30a2\u30af\u30c6\u30a3\u30d6\u30e6\u30fc\u30b6\u30fc\u6570\u30fbPV\u6570\u3092\u6bce\u671d\u81ea\u52d5\u3067\u30e1\u30fc\u30eb\u914d\u4fe1<\/li>\r\n  <li>\u524d\u65e5\u6bd4 \/ \u76f4\u8fd17\u65e5\u5e73\u5747\u6bd4\u304c \u221240% \u4ee5\u4e0b\u306b\u306a\u3063\u305f\u3068\u304d\u3001\u4ef6\u540d\u306b <code>\u26a0\ufe0f\u3010\u8981\u78ba\u8a8d\u3011<\/code> \u3092\u4ed8\u3051\u3066\u901a\u77e5<\/li>\r\n  <li><code>CONFIG<\/code> \u30921\u304b\u6240\u66f8\u304d\u63db\u3048\u308b\u3060\u3051\u3067\u8907\u6570\u30b5\u30a4\u30c8\u306b\u5bfe\u5fdc<\/li>\r\n<\/ul>\r\n\r\n<hr class=\"separator mt-3r\">\r\n\r\n<h2 class=\"fz-xl\">\u5b8c\u6210\u30a4\u30e1\u30fc\u30b8<\/h2>\r\n<p><b class=\"fw-600\">\u6b63\u5e38\u6642\u306e\u4ef6\u540d<\/b><\/p>\r\n<pre><code class=\"language-\">\u2705 GA4 \u30c7\u30a4\u30ea\u30fc\u30ec\u30dd\u30fc\u30c8 (2026-04-27)<\/code><\/pre>\r\n<p><b class=\"fw-600\">\u30a2\u30af\u30bb\u30b9\u6025\u843d\u6642\u306e\u4ef6\u540d<\/b><\/p>\r\n<pre><code class=\"language-\">\u26a0\ufe0f \u3010\u8981\u78ba\u8a8d\u3011GA4 \u30a2\u30af\u30bb\u30b9\u7570\u5e38\u691c\u77e5 (2026-04-27)<\/code><\/pre>\r\n<p><b class=\"fw-600\">\u30e1\u30fc\u30eb\u672c\u6587\uff08\u629c\u7c8b\uff09<\/b><\/p>\r\n<pre><code class=\"language-\">GA4 \u30c7\u30a4\u30ea\u30fc\u30ec\u30dd\u30fc\u30c8\r\n2026-04-27 09:07 \u914d\u4fe1\r\n\r\n\u25ef \u6628\u65e5\uff082026-04-26\uff09\u306e\u5b9f\u7e3e\r\n  \u30a2\u30af\u30c6\u30a3\u30d6\u30e6\u30fc\u30b6\u30fc\u6570\uff1a234\r\n  \u30da\u30fc\u30b8\u30d3\u30e5\u30fc\u6570\u3000\u3000\u3000\uff1a612\r\n\r\n\u25ef \u524d\u65e5\u6bd4\uff08\u4e00\u6628\u65e5 198 \u4eba\u3068\u306e\u6bd4\u8f03\uff09\r\n  \u25b2+36 \u4eba\uff08+18.2%\uff09\r\n\r\n\u25ef \u76f4\u8fd17\u65e5\u5e73\u5747\u6bd4\uff08\u5e73\u5747 210 \u4eba\u3068\u306e\u6bd4\u8f03\uff09\r\n  \u25b2+24 \u4eba\uff08+11.4%\uff09<\/code><\/pre>\r\n\r\n<hr class=\"separator mt-3r\">\r\n\r\n<h2 class=\"fz-xl\">\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h2>\r\n<h3 class=\"fz-ml\">1. GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b<\/h3>\r\n<p><cite><a href=\"https:\/\/console.cloud.google.com\" target=\"_blank\" class=\"link\">Google Cloud Console<\/a><\/cite> \u3092\u958b\u304d\u3001\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4f5c\u6210\u5f8c\u3001 <b class=\"fw-600\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7<\/b> \u3092\u63a7\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\r\n<p>\r\n  <picture class=\"bd-bounds\"><img decoding=\"async\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/FS-20260423-console.cloud_.google.com_036.jpg?ver=20260717134838\" alt=\"\"><\/picture>\r\n<\/p>\r\n<h3 class=\"fz-ml\">2. Google Analytics Data API \u3092\u6709\u52b9\u306b\u3059\u308b<\/h3>\r\n<p>Cloud Console \u2192 <b class=\"fw-600\">API\u3068\u30b5\u30fc\u30d3\u30b9<\/b> \u2192 <b class=\"fw-600\">\u30e9\u30a4\u30d6\u30e9\u30ea<\/b> \u3067 <code>Google Analytics Data API<\/code> \u3092\u691c\u7d22\u3057\u3001\u6709\u52b9\u306b\u3057\u307e\u3059\u3002<\/p>\r\n<h3 class=\"fz-ml\">3. OAuth \u540c\u610f\u753b\u9762\u3092\u8a2d\u5b9a\u3059\u308b<\/h3>\r\n<p>Cloud Console \u2192 <b class=\"fw-600\">Google Auth Platform<\/b> \uff08\u307e\u305f\u306f\u300cAPI\u3068\u30b5\u30fc\u30d3\u30b9\u300d\u2192\u300cOAuth\u540c\u610f\u753b\u9762\u300d\uff09\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\r\n<ul style=\"list-style-type:bullet;\" class=\"my-0.5r\">\r\n  <li>\u30a2\u30d7\u30ea\u540d\u306f\u4efb\u610f\uff08\u4f8b\uff1a<code>ga4-daily-report<\/code>\uff09<\/li>\r\n  <li>\u30b5\u30dd\u30fc\u30c8\u30e1\u30fc\u30eb \/ \u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u9023\u7d61\u5148\u306f\u81ea\u5206\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9<\/li>\r\n  <li>\u5bfe\u8c61\uff08\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\uff09\u306b\u3001GAS\u3092\u5b9f\u884c\u3059\u308bGoogle\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8ffd\u52a0<\/li>\r\n<\/ul>\r\n<p>\r\n  <picture class=\"bd-bounds\"><img decoding=\"async\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/FS-20260423-console.cloud_.google.com_041.jpg?ver=20260717134838\" alt=\"\"><\/picture>\r\n<\/p>\r\n<p>\u300c\u30c6\u30b9\u30c8\u4e2d\u300d\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u307e\u307e\u3067\u500b\u4eba\u5229\u7528\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\r\n<h3 class=\"fz-ml\">4. Google Apps Script \u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b<\/h3>\r\n<p><cite><a href=\"https:\/\/script.google.com\/\" target=\"_blank\" class=\"link\">Google Apps Script<\/a><\/cite> \u3092\u958b\u304d\u3001 <b class=\"fw-600\">\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/b> \u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\r\n<p>\u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u6b6f\u8eca\u30a2\u30a4\u30b3\u30f3\uff08 <b class=\"fw-600\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/b> \uff09\u2192 <b class=\"fw-600\">GCP\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7<\/b> \u306b\u624b\u98061\u3067\u63a7\u3048\u305f\u756a\u53f7\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\r\n<p>\r\n  <picture class=\"bd-bounds\"><img decoding=\"async\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/FS-20260423-script.google.com_043.jpg?ver=20260717134838\" alt=\"\"><\/picture>\r\n<\/p>\r\n<h3 class=\"fz-ml\">5. appsscript.json \u3092\u8a2d\u5b9a\u3059\u308b<\/h3>\r\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u304b\u3089\u300c<code>appsscript.json<\/code> \u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u30a8\u30c7\u30a3\u30bf\u3067\u8868\u793a\u3059\u308b\u300d\u3092\u30aa\u30f3\u306b\u3057\u307e\u3059\u3002<\/p>\r\n<p>\r\n  <picture class=\"bd-bounds\"><img decoding=\"async\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/FS-20260423-script.google.com_044.jpg?ver=20260717134838\" alt=\"\"><\/picture>\r\n<\/p>\r\n<p>\u30a8\u30c7\u30a3\u30bf\u306b <code>appsscript.json<\/code> \u304c\u8868\u793a\u3055\u308c\u305f\u3089\u3001\u5185\u5bb9\u3092\u4ee5\u4e0b\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002<\/p>\r\n<pre><code class=\"language-json\">{\r\n  \"timeZone\": \"Asia\/Tokyo\",\r\n  \"exceptionLogging\": \"STACKDRIVER\",\r\n  \"runtimeVersion\": \"V8\",\r\n  \"oauthScopes\": &lsqb;\r\n    \"https:\/\/www.googleapis.com\/auth\/analytics.readonly\",\r\n    \"https:\/\/www.googleapis.com\/auth\/script.send_mail\",\r\n    \"https:\/\/www.googleapis.com\/auth\/script.external_request\"\r\n  &rsqb;\r\n}<\/code><\/pre>\r\n<blockquote>\r\n  <p><code>oauthScopes<\/code> \u3092\u660e\u793a\u3057\u306a\u3044\u3068 <code>analytics.readonly<\/code> \u30b9\u30b3\u30fc\u30d7\u304c\u4ed8\u4e0e\u3055\u308c\u305a\u3001GA4 API \u547c\u3073\u51fa\u3057\u6642\u306b <code>ACCESS_TOKEN_SCOPE_INSUFFICIENT<\/code> \u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3059\u3002\u5148\u306b\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3066\u304b\u3089\u6b21\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\r\n<\/blockquote>\r\n<h3 class=\"fz-ml\">6. Code.gs \u306b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u8cbc\u308a\u4ed8\u3051\u308b<\/h3>\r\n<p>\u30c7\u30d5\u30a9\u30eb\u30c8\u306e <code>\u30b3\u30fc\u30c9.gs<\/code> \u3092\u958b\u304d\u3001\u5185\u5bb9\u3092\u4ee5\u4e0b\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002<\/p>\r\n<pre><code class=\"language-javascript\">\/* ============================================================\r\n * GA4 \u30c7\u30a4\u30ea\u30fc\u30ec\u30dd\u30fc\u30c8\uff08\u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8\u4ed8\u304d\uff09\r\n * ======================\u0fd0\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u2740\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u22b0\u27e1\u22b1\u0f36\u0f04 *\/\r\n\r\n\/\/ ============================================================\r\n\/\/ \u2605 \u8a2d\u5b9a\u30a8\u30ea\u30a2\uff08\u3053\u3053\u3060\u3051\u66f8\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\uff09\r\n\/\/ ============================================================\r\nconst CONFIG = {\r\n  \/\/ \u9001\u4fe1\u5148\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\uff08\u8907\u6570\u306e\u5834\u5408\u306f\u30ab\u30f3\u30de\u533a\u5207\u308a: 'a@b.com,c@d.com'\uff09\r\n  \/\/ \u7a7a\u6b04\u306b\u3059\u308b\u3068 GAS \u5b9f\u884c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30e1\u30fc\u30eb\u306b\u5c4a\u304d\u307e\u3059\r\n  REPORT_TO: 'your@email.com',\r\n\r\n  \/\/ GA4 \u30d7\u30ed\u30d1\u30c6\u30a3\u8a2d\u5b9a\uff08\u30b5\u30a4\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u5834\u5408\u306f\u3053\u3053\u306b\u8db3\u3059\u3060\u3051\uff09\r\n  GA_PROPERTIES: &lsqb;\r\n    { label: '\u30b5\u30a4\u30c8\u540d', propertyId: '000000000' }\r\n  &rsqb;,\r\n\r\n  \/\/ \u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8\u306e\u95be\u5024\uff08\u524d\u65e5\u6bd4\u3067\u3053\u306e\u5272\u5408\u4ee5\u4e0a\u6e1b\u3063\u305f\u3089\u8b66\u544a\uff09\r\n  \/\/ 0.4 = 40%\u6e1b\u3067\u30a2\u30e9\u30fc\u30c8\r\n  ALERT_THRESHOLD: 0.4,\r\n\r\n  \/\/ \u76f4\u8fd1\u4f55\u65e5\u9593\u306e\u5e73\u5747\u3092\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u306b\u3059\u308b\u304b\r\n  BASELINE_DAYS: 7,\r\n};\r\n\/\/ ============================================================\r\n\r\n\r\nfunction sendDailyReport() {\r\n  const tz = 'Asia\/Tokyo';\r\n  const now = new Date();\r\n\r\n  const dYesterday    = formatDate_(addDays_(now, -1), tz);\r\n  const dDayBefore    = formatDate_(addDays_(now, -2), tz);\r\n  const dBaselineFrom = formatDate_(addDays_(now, -(CONFIG.BASELINE_DAYS + 1)), tz);\r\n  const dBaselineTo   = formatDate_(addDays_(now, -2), tz);\r\n\r\n  const results = CONFIG.GA_PROPERTIES.map(p =&gt; {\r\n    const yesterday  = gaReport_(p.propertyId, dYesterday, dYesterday);\r\n    const dayBefore  = gaReport_(p.propertyId, dDayBefore, dDayBefore);\r\n    const baseline   = gaReport_(p.propertyId, dBaselineFrom, dBaselineTo);\r\n    const baselineAvg = {\r\n      users: Math.round(baseline.users \/ CONFIG.BASELINE_DAYS),\r\n      pv:    Math.round(baseline.pv    \/ CONFIG.BASELINE_DAYS),\r\n    };\r\n\r\n    const diffVsDayBefore = calcDiff_(yesterday.users, dayBefore.users);\r\n    const diffVsBaseline  = calcDiff_(yesterday.users, baselineAvg.users);\r\n\r\n    const alert =\r\n      diffVsDayBefore.rate &lt;= -CONFIG.ALERT_THRESHOLD ||\r\n      diffVsBaseline.rate  &lt;= -CONFIG.ALERT_THRESHOLD;\r\n\r\n    return { label: p.label, yesterday, dayBefore, baselineAvg,\r\n             diffVsDayBefore, diffVsBaseline, alert };\r\n  });\r\n\r\n  const hasAlert = results.some(r =&gt; r.alert);\r\n  const subject  = hasAlert\r\n    ? `\u26a0\ufe0f \u3010\u8981\u78ba\u8a8d\u3011GA4 \u30a2\u30af\u30bb\u30b9\u7570\u5e38\u691c\u77e5 (${dYesterday})`\r\n    : `\u2705 GA4 \u30c7\u30a4\u30ea\u30fc\u30ec\u30dd\u30fc\u30c8 (${dYesterday})`;\r\n\r\n  MailApp.sendEmail(getReportTo_(), subject, buildMailBody_(results, dYesterday, tz, now));\r\n}\r\n\r\n\r\n\/* ===== GA4 API ===== *\/\r\n\r\nfunction gaReport_(propertyId, startDate, endDate) {\r\n  const url = `https:\/\/analyticsdata.googleapis.com\/v1beta\/properties\/${propertyId}:runReport`;\r\n  const payload = {\r\n    dateRanges: &lsqb;{ startDate, endDate }&rsqb;,\r\n    metrics: &lsqb;{ name: 'activeUsers' }, { name: 'screenPageViews' }&rsqb;,\r\n  };\r\n  const token = ScriptApp.getOAuthToken();\r\n  const resp  = UrlFetchApp.fetch(url, {\r\n    method: 'post', contentType: 'application\/json',\r\n    headers: { Authorization: `Bearer ${token}` },\r\n    payload: JSON.stringify(payload), muteHttpExceptions: true,\r\n  });\r\n  const code = resp.getResponseCode();\r\n  if (code &lt; 200 || code &gt;= 300) {\r\n    throw new Error(`GA4 API \u30a8\u30e9\u30fc (${code}): ${resp.getContentText()}`);\r\n  }\r\n  const row = JSON.parse(resp.getContentText())?.rows?.&lsqb;0&rsqb;?.metricValues || &lsqb;&rsqb;;\r\n  return {\r\n    users: row&lsqb;0&rsqb; ? Number(row&lsqb;0&rsqb;.value) : 0,\r\n    pv:    row&lsqb;1&rsqb; ? Number(row&lsqb;1&rsqb;.value) : 0,\r\n  };\r\n}\r\n\r\n\r\n\/* ===== \u30e1\u30fc\u30eb\u672c\u6587 ===== *\/\r\n\r\nfunction buildMailBody_(results, dYesterday, tz, now) {\r\n  const dt    = Utilities.formatDate(now, tz, 'yyyy-MM-dd HH:mm');\r\n  const lines = &lsqb;`GA4 \u30c7\u30a4\u30ea\u30fc\u30ec\u30dd\u30fc\u30c8`, `${dt} \u914d\u4fe1`, ''&rsqb;;\r\n\r\n  results.forEach(r =&gt; {\r\n    const alertMark = r.alert ? '\u26a0\ufe0f ' : '';\r\n    lines.push('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500');\r\n    lines.push(`\u25a0 ${alertMark}${r.label}`);\r\n    lines.push('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500', '');\r\n    lines.push(`\u25ef \u6628\u65e5\uff08${dYesterday}\uff09\u306e\u5b9f\u7e3e`);\r\n    lines.push(`  \u30a2\u30af\u30c6\u30a3\u30d6\u30e6\u30fc\u30b6\u30fc\u6570\uff1a${fmtInt_(r.yesterday.users)}`);\r\n    lines.push(`  \u30da\u30fc\u30b8\u30d3\u30e5\u30fc\u6570\u3000\u3000\u3000\uff1a${fmtInt_(r.yesterday.pv)}`, '');\r\n    lines.push(`\u25ef \u524d\u65e5\u6bd4\uff08\u4e00\u6628\u65e5 ${fmtInt_(r.dayBefore.users)} \u4eba\u3068\u306e\u6bd4\u8f03\uff09`);\r\n    lines.push(`  ${diffRateLine_(r.diffVsDayBefore, CONFIG.ALERT_THRESHOLD)}`, '');\r\n    lines.push(`\u25ef \u76f4\u8fd1${CONFIG.BASELINE_DAYS}\u65e5\u5e73\u5747\u6bd4\uff08\u5e73\u5747 ${fmtInt_(r.baselineAvg.users)} \u4eba\u3068\u306e\u6bd4\u8f03\uff09`);\r\n    lines.push(`  ${diffRateLine_(r.diffVsBaseline, CONFIG.ALERT_THRESHOLD)}`, '');\r\n    if (r.alert) {\r\n      lines.push(`  \u26a0\ufe0f  \u30a2\u30af\u30bb\u30b9\u6570\u304c\u57fa\u6e96\u5024\u3088\u308a ${Math.round(CONFIG.ALERT_THRESHOLD * 100)}% \u4ee5\u4e0a\u6e1b\u5c11\u3057\u3066\u3044\u307e\u3059\u3002`);\r\n      lines.push(`      gtag \/ GTM \u306e\u8a2d\u7f6e\u72b6\u6cc1\u3001\u5e83\u544a\u914d\u4fe1\u72b6\u6cc1\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002`, '');\r\n    }\r\n  });\r\n\r\n  lines.push('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500');\r\n  lines.push(`\u203b \u25b2 \u306f\u30d7\u30e9\u30b9\u3001\u25bc \u306f\u30de\u30a4\u30ca\u30b9\u3092\u793a\u3057\u307e\u3059`);\r\n  lines.push(`\u203b \u26a0\ufe0f \u30a2\u30e9\u30fc\u30c8\u306f\u524d\u65e5\u6bd4\u30fb\u76f4\u8fd1${CONFIG.BASELINE_DAYS}\u65e5\u5e73\u5747\u6bd4\u306e\u3044\u305a\u308c\u304b\u304c -${Math.round(CONFIG.ALERT_THRESHOLD * 100)}% \u4ee5\u4e0b\u306e\u5834\u5408\u306b\u767a\u706b\u3057\u307e\u3059`);\r\n  lines.push(`\u203b \u672c\u30e1\u30fc\u30eb\u306f\u81ea\u52d5\u9001\u4fe1\u3055\u308c\u3066\u3044\u307e\u3059`);\r\n  lines.push('\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500');\r\n  return lines.join('\\n');\r\n}\r\n\r\nfunction diffRateLine_(diff, threshold) {\r\n  const pct      = (diff.rate * 100).toFixed(1);\r\n  const mark     = diff.value &gt;= 0 ? `\u25b2+${fmtInt_(diff.value)}` : `\u25bc${fmtInt_(Math.abs(diff.value))}`;\r\n  const rateMark = diff.rate &gt;= 0 ? `+${pct}%` : `${pct}%`;\r\n  const warn     = diff.rate &lt;= -threshold ? ' \u2190 \u26a0\ufe0f \u8981\u78ba\u8a8d' : '';\r\n  return `${mark} \u4eba\uff08${rateMark}\uff09${warn}`;\r\n}\r\n\r\n\r\n\/* ===== \u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3 ===== *\/\r\n\r\nfunction getReportTo_() {\r\n  const to = (CONFIG.REPORT_TO || '').trim();\r\n  return to || Session.getEffectiveUser().getEmail();\r\n}\r\nfunction calcDiff_(current, base) {\r\n  return { value: current - base, rate: base &gt; 0 ? (current - base) \/ base : 0 };\r\n}\r\nfunction formatDate_(date, tz) {\r\n  return Utilities.formatDate(date, tz, 'yyyy-MM-dd');\r\n}\r\nfunction addDays_(date, n) {\r\n  const d = new Date(date);\r\n  d.setDate(d.getDate() + n);\r\n  return d;\r\n}\r\nfunction fmtInt_(n) {\r\n  return (Number(n) || 0).toLocaleString('ja-JP');\r\n}<\/code><\/pre>\r\n<h3 class=\"fz-ml\">7. CONFIG \u3092\u66f8\u304d\u63db\u3048\u308b<\/h3>\r\n<p>\u30b9\u30af\u30ea\u30d7\u30c8\u5192\u982d\u306e <code>CONFIG<\/code> \u3092\u81ea\u5206\u306e\u74b0\u5883\u306b\u5408\u308f\u305b\u3066\u7de8\u96c6\u3057\u307e\u3059\u3002<\/p>\r\n<p>\r\n  <picture class=\"bd-bounds\"><img decoding=\"async\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/FS-20260423-script.google.com_045.jpg?ver=20260717134838\" alt=\"\"><\/picture>\r\n<\/p>\r\n<table class=\"table my-0.5r\">\r\n  <thead>\r\n    <tr class=\"rung\">\r\n      <th>\u9805\u76ee<\/th>\r\n      <td>\u8aac\u660e<\/td>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr class=\"rung\">\r\n      <th><code>REPORT_TO<\/code><\/th>\r\n      <td>\u9001\u4fe1\u5148\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3002\u7a7a\u6b04\u306b\u3059\u308b\u3068\u5b9f\u884c\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u5c4a\u304f<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th><code>GA_PROPERTIES<\/code><\/th>\r\n      <td><code>label<\/code>\uff08\u8868\u793a\u540d\uff09\u3068 <code>propertyId<\/code>\uff08GA4\u30d7\u30ed\u30d1\u30c6\u30a3ID\uff09\u3092\u8a2d\u5b9a<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th><code>ALERT_THRESHOLD<\/code><\/th>\r\n      <td>\u30a2\u30e9\u30fc\u30c8\u95be\u5024\u3002<code>0.4<\/code> = 40%\u6e1b\u3067\u767a\u706b<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th><code>BASELINE_DAYS<\/code><\/th>\r\n      <td>\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u3068\u3059\u308b\u65e5\u6570\uff08\u30c7\u30d5\u30a9\u30eb\u30c87\u65e5\uff09<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n<p><b class=\"fw-600\">GA4 \u30d7\u30ed\u30d1\u30c6\u30a3ID\u306e\u78ba\u8a8d\u65b9\u6cd5\uff1a<\/b> GA4 \u7ba1\u7406\u753b\u9762 \u2192 \u5de6\u4e0b\u300c\u7ba1\u7406\u300d\u2192\u300c\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u8a2d\u5b9a\u300d\u306b\u8868\u793a\u3055\u308c\u308b9\u301c10\u6841\u306e\u6570\u5b57\u3002<\/p>\r\n<p><b class=\"fw-600\">\u8907\u6570\u30b5\u30a4\u30c8\u306e\u8ffd\u52a0\uff1a<\/b><\/p>\r\n<pre><code class=\"language-javascript\">GA_PROPERTIES: &lsqb;\r\n  { label: '\u30b5\u30a4\u30c8A', propertyId: '111111111' },\r\n  { label: '\u30b5\u30a4\u30c8B', propertyId: '222222222' },\r\n  { label: '\u30b5\u30a4\u30c8C', propertyId: '333333333' },\r\n&rsqb;,<\/code><\/pre>\r\n<p>1\u901a\u306e\u30e1\u30fc\u30eb\u306b\u4e3b\u8981\u306a\u30b5\u30a4\u30c8\u304c\u307e\u3068\u3081\u3066\u5c4a\u304d\u307e\u3059\u30021\u30b5\u30a4\u30c8\u3067\u3082\u30a2\u30e9\u30fc\u30c8\u304c\u51fa\u308c\u3070\u4ef6\u540d\u304c <code>\u26a0\ufe0f<\/code> \u306b\u306a\u308a\u307e\u3059\u3002<\/p>\r\n<h3 class=\"fz-ml\">8. \u52d5\u4f5c\u78ba\u8a8d\u3059\u308b<\/h3>\r\n<p>\u4e0a\u90e8\u30d0\u30fc\u306e\u95a2\u6570\u9078\u629e\u304b\u3089 <code>sendDailyReport<\/code> \u3092\u9078\u3073\u3001\u300c\u5b9f\u884c\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\r\n<p>\u521d\u56de\u306f OAuth \u8a8d\u8a3c\u30c0\u30a4\u30a2\u30ed\u30b0\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u300c\u3053\u306e\u30a2\u30d7\u30ea\u306f Google \u3067\u78ba\u8a8d\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u300d\u3068\u51fa\u305f\u5834\u5408\u306f\u300c\u8a73\u7d30\u300d\u2192\u300c\uff08\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff09\u306b\u79fb\u52d5\u300d\u2192\u300c\u8a31\u53ef\u300d\u3068\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\r\n<p>\u30e1\u30fc\u30eb\u304c\u5c4a\u3051\u3070\u52d5\u4f5c\u78ba\u8a8d\u5b8c\u4e86\u3067\u3059\u3002<\/p>\r\n<h3 class=\"fz-ml\">9. \u30c8\u30ea\u30ac\u30fc\u3092\u8a2d\u5b9a\u3059\u308b<\/h3>\r\n<p>Apps Script \u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u6642\u8a08\u30a2\u30a4\u30b3\u30f3\u300c <b class=\"fw-600\">\u30c8\u30ea\u30ac\u30fc<\/b> \u300d\u2192\u300c <b class=\"fw-600\">\u30c8\u30ea\u30ac\u30fc\u3092\u8ffd\u52a0<\/b> \u300d\u304b\u3089\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\r\n<table class=\"table my-0.5r\">\r\n  <thead>\r\n    <tr class=\"rung\">\r\n      <th>\u9805\u76ee<\/th>\r\n      <td>\u8a2d\u5b9a\u5024<\/td>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr class=\"rung\">\r\n      <th>\u5b9f\u884c\u3059\u308b\u95a2\u6570<\/th>\r\n      <td><code>sendDailyReport<\/code><\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\u30a4\u30d9\u30f3\u30c8\u306e\u30bd\u30fc\u30b9<\/th>\r\n      <td>\u6642\u9593\u4e3b\u5c0e\u578b<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\u30bf\u30a4\u30de\u30fc\u306e\u7a2e\u985e<\/th>\r\n      <td>\u65e5\u4ed8\u30d9\u30fc\u30b9\u306e\u30bf\u30a4\u30de\u30fc<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\u6642\u523b<\/th>\r\n      <td>\u5348\u524d8\u6642\u301c9\u6642\uff08\u304a\u597d\u307f\u3067\uff09<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\u30a8\u30e9\u30fc\u901a\u77e5\u8a2d\u5b9a<\/th>\r\n      <td>\u4eca\u3059\u3050\u901a\u77e5\u3092\u53d7\u3051\u53d6\u308b<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n<blockquote>\r\n  <p>\u30a8\u30e9\u30fc\u901a\u77e5\u306f\u300c\u4eca\u3059\u3050\u300d\u306b\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u4ed5\u7d44\u307f\u306f\u7570\u5e38\u3092\u691c\u77e5\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u306a\u306e\u3067\u3001<b class=\"fw-600\">\u76e3\u8996\u5f79\u81ea\u8eab\u304c\u9ed9\u3063\u3066\u505c\u6b62\u3057\u3066\u3044\u308b<\/b>\u72b6\u614b\u304c\u6700\u3082\u56f0\u308a\u307e\u3059\u3002<\/p>\r\n  <p>\u307e\u305f\u3001\u30c8\u30ea\u30ac\u30fc\u4e00\u89a7\uff08\u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u6642\u8a08\u30a2\u30a4\u30b3\u30f3\uff09\u306f<b class=\"fw-600\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3054\u3068<\/b>\u306b\u898b\u3066\u304f\u3060\u3055\u3044\u3002Apps Script \u30c8\u30c3\u30d7\u306e\u300c\u30de\u30a4\u30c8\u30ea\u30ac\u30fc\u300d\u306f\u5168\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6a2a\u65ad\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u304c\u540c\u3058\u3060\u3068\u898b\u5206\u3051\u304c\u3064\u304d\u307e\u305b\u3093\u3002\u533a\u5225\u3067\u304d\u308b\u306e\u306f\u300c\u524d\u56de\u306e\u5b9f\u884c\u300d\u5217\u3060\u3051\u3067\u3059\u3002<\/p>\r\n<\/blockquote>\r\n<p>\u4fdd\u5b58\u3059\u308b\u3068\u30c8\u30ea\u30ac\u30fc\u4e00\u89a7\u306b\u8ffd\u52a0\u3055\u308c\u3001\u7fcc\u65e5\u304b\u3089\u81ea\u52d5\u9001\u4fe1\u3055\u308c\u307e\u3059\u3002<\/p>\r\n<p>\r\n  <picture class=\"bd-bounds\"><img decoding=\"async\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/FS-20260423-script.google.com_050.jpg?ver=20260717134838\" alt=\"\"><\/picture>\r\n<\/p>\r\n\r\n<hr class=\"separator mt-3r\">\r\n\r\n<h2 class=\"fz-xl\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u5bfe\u51e6\u6cd5<\/h2>\r\n<h3 class=\"fz-ml\"><code>ACCESS_TOKEN_SCOPE_INSUFFICIENT<\/code>\uff08403\u30a8\u30e9\u30fc\uff09<\/h3>\r\n<p><code>analytics.readonly<\/code> \u30b9\u30b3\u30fc\u30d7\u304c\u4ed8\u4e0e\u3055\u308c\u3066\u3044\u306a\u3044\u3068\u304d\u306b\u51fa\u307e\u3059\u3002\u539f\u56e0\u306f2\u30d1\u30bf\u30fc\u30f3\u3042\u308a\u307e\u3059\u3002<\/p>\r\n<p><b class=\"fw-600\">\u30d1\u30bf\u30fc\u30f31\uff1a<code>oauthScopes<\/code> \u3092\u8ffd\u52a0\u3059\u308b\u524d\u306b\u8a8d\u8a3c\u3057\u3066\u3057\u307e\u3063\u305f<\/b><\/p>\r\n<p>\u53e4\u3044\u6a29\u9650\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u307e\u307e\u306a\u306e\u3067\u3001<code>appsscript.json<\/code> \u3092\u76f4\u3057\u305f\u3060\u3051\u3067\u306f\u89e3\u6d88\u3057\u307e\u305b\u3093\u3002GAS \u30a8\u30c7\u30a3\u30bf\u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u300c\u6982\u8981\u300d\u2192\u300c<b class=\"fw-600\">\u6a29\u9650\u3092\u53d6\u308a\u6d88\u3059<\/b>\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u518d\u5ea6\u5b9f\u884c\u3057\u3001OAuth \u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u6539\u3081\u3066\u8a31\u53ef\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u300c\u6a29\u9650\u3092\u53d6\u308a\u6d88\u3059\u300d\u304c\u8868\u793a\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u3001<cite><a href=\"https:\/\/myaccount.google.com\/permissions\" target=\"_blank\" class=\"link\">myaccount.google.com\/permissions<\/a><\/cite> \u304b\u3089\u8a72\u5f53\u306e\u30a2\u30d7\u30ea\u3092\u524a\u9664\u3057\u3066\u304b\u3089\u518d\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\r\n<p><b class=\"fw-600\">\u30d1\u30bf\u30fc\u30f32\uff1a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u308a\u76f4\u3057\u305f<\/b><\/p>\r\n<p><code>appsscript.json<\/code> \u306f <code>\u30b3\u30fc\u30c9.gs<\/code> \u3068\u306f<b class=\"fw-600\">\u5225\u306e\u30d5\u30a1\u30a4\u30eb<\/b>\u3067\u3059\u3002\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b <code>\u30b3\u30fc\u30c9.gs<\/code> \u3092\u8cbc\u308a\u76f4\u3057\u3066\u3082\u3001<code>oauthScopes<\/code> \u306f\u7a7a\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u307e\u307e\u306a\u306e\u3067\u5fa9\u6d3b\u3057\u307e\u305b\u3093\u3002GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7\u306e\u7d10\u4ed8\u3051\u3082\u5916\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\r\n<p>\u3053\u306e\u5834\u5408\u306f\u3001\u5fc5\u305a<b class=\"fw-600\">\u6b21\u306e\u9806\u756a<\/b>\u3067\u9032\u3081\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\r\n<ol style=\"list-style-type:decimal;\" class=\"my-0.5r\">\r\n  <li><b class=\"fw-600\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a \u2192 GCP\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7\u3092\u5165\u529b \u2192\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u300d<\/b><\/li>\r\n  <li><b class=\"fw-600\"><code>appsscript.json<\/code> \u306b <code>oauthScopes<\/code> \u3092\u8ffd\u52a0\u3057\u3066\u4fdd\u5b58<\/b>\uff08\u624b\u98065\uff09<\/li>\r\n  <li><b class=\"fw-600\"><code>sendDailyReport<\/code> \u3092\u5b9f\u884c \u2192 OAuth \u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u8a31\u53ef<\/b><\/li>\r\n  <li><b class=\"fw-600\">\u30c8\u30ea\u30ac\u30fc\u3092\u518d\u767b\u9332<\/b>\uff08\u624b\u98069\uff09<\/li>\r\n<\/ol>\r\n<p>1 \u3092\u5b9f\u884c\u3057\u305f\u6642\u70b9\u3067\u53e4\u3044\u8a8d\u8a3c\u306f\u81ea\u52d5\u7684\u306b\u53d6\u308a\u6d88\u3055\u308c\u308b\u305f\u3081\u3001\u300c\u6a29\u9650\u3092\u53d6\u308a\u6d88\u3059\u300d\u306e\u624b\u52d5\u64cd\u4f5c\u306f\u4e0d\u8981\u3067\u3059\u3002\u9006\u306b <b class=\"fw-600\">2 \u3092\u98db\u3070\u3057\u3066 3 \u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u307e\u305f\u65e2\u5b9a\u30b9\u30b3\u30fc\u30d7\u306e\u307e\u307e\u8a8d\u8a3c\u304c\u56fa\u307e\u3063\u3066\u540c\u3058403\u306b\u623b\u308a\u307e\u3059\u3002<\/b><\/p>\r\n<p>\u306a\u304a\u3001Apps Script \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u4f53\u306f Google Drive \u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002\u6d88\u3048\u305f\u5834\u5408\u306f Drive \u306e\u30b4\u30df\u7bb1\uff08\u4fdd\u630130\u65e5\uff09\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5fa9\u5143\u3067\u304d\u308c\u3070\u3001\u30c8\u30ea\u30ac\u30fc\u3082GCP\u7d10\u4ed8\u3051\u3082\u305d\u306e\u307e\u307e\u623b\u308a\u307e\u3059\u3002\u65e5\u9803\u304b\u3089 <code>\u30b3\u30fc\u30c9.gs<\/code> \u3068 <b class=\"fw-600\"><code>appsscript.json<\/code> \u3092\u30bb\u30c3\u30c8\u3067<\/b>\u30ed\u30fc\u30ab\u30eb\u4fdd\u5b58\u3057\u3066\u304a\u304f\u3068\u3001\u5fa9\u65e7\u304c\u6570\u5206\u3067\u6e08\u307f\u307e\u3059\u3002<\/p>\r\n<h3 class=\"fz-ml\"><code>Bandwidth quota exceeded<\/code><\/h3>\r\n<p><b class=\"fw-600\">\u539f\u56e0\uff1a<\/b> \u77ed\u6642\u9593\u306b\u4f55\u5ea6\u3082\u624b\u52d5\u5b9f\u884c\u3057\u3066API\u306e\u547c\u3073\u51fa\u3057\u56de\u6570\u4e0a\u9650\u306b\u9054\u3057\u305f\u3002<\/p>\r\n<p><b class=\"fw-600\">\u5bfe\u51e6\uff1a<\/b> 20\u301c30\u5206\u5f85\u3063\u3066\u304b\u3089\u518d\u5b9f\u884c\u3059\u308b\u3002\u30c8\u30ea\u30ac\u30fc\u306b\u3088\u308b\u81ea\u52d5\u5b9f\u884c\u306f1\u65e51\u56de\u306e\u307f\u306a\u306e\u3067\u3001\u901a\u5e38\u904b\u7528\u3067\u306f\u767a\u751f\u3057\u306a\u3044\u3002<\/p>\r\n<h3 class=\"fz-ml\">\u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u3044<\/h3>\r\n<p><b class=\"fw-600\">\u539f\u56e0\uff1a<\/b> \u30c8\u30ea\u30ac\u30fc\u306e\u8a2d\u5b9a\u5f8c\u3059\u3050\u306b\u306f\u5b9f\u884c\u3055\u308c\u306a\u3044\u3002\u6b21\u306e\u6307\u5b9a\u6642\u523b\u307e\u3067\u5f85\u3064\u5fc5\u8981\u304c\u3042\u308b\u3002<\/p>\r\n<p><b class=\"fw-600\">\u78ba\u8a8d\u65b9\u6cd5\uff1a<\/b> \u30c8\u30ea\u30ac\u30fc\u4e00\u89a7\u306e\u300c\u524d\u56de\u306e\u5b9f\u884c\u300d\u5217\u306b\u65e5\u6642\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308c\u3070\u6b63\u5e38\u306b\u52d5\u3044\u3066\u3044\u308b\u3002\u300c\u30a8\u30e9\u30fc\u7387\u300d\u304c0%\u3067\u306a\u3051\u308c\u3070\u5b9f\u884c\u30ed\u30b0\u3092\u78ba\u8a8d\u3059\u308b\u3002<\/p>\r\n\r\n<hr class=\"separator mt-3r\">\r\n\r\n<h2 class=\"fz-xl\">\u30a2\u30e9\u30fc\u30c8\u95be\u5024\u306e\u76ee\u5b89<\/h2>\r\n<table class=\"table my-0.5r\">\r\n  <thead>\r\n    <tr class=\"rung\">\r\n      <th>ALERT_THRESHOLD \u5024<\/th>\r\n      <td>\u610f\u5473<\/td>\r\n      <td>\u5411\u3044\u3066\u3044\u308b\u30b5\u30a4\u30c8<\/td>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr class=\"rung\">\r\n      <th><code>0.3<\/code><\/th>\r\n      <td>30%\u6e1b\u3067\u767a\u706b\uff08\u654f\u611f\uff09<\/td>\r\n      <td>\u6d41\u91cf\u304c\u5b89\u5b9a\u3057\u3066\u3044\u3066\u65e5\u3005\u306e\u5909\u52d5\u304c\u5c11\u306a\u3044\u30b5\u30a4\u30c8<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th><code>0.4<\/code><\/th>\r\n      <td><b class=\"fw-600\">40%\u6e1b\u3067\u767a\u706b\uff08\u63a8\u5968\uff09<\/b><\/td>\r\n      <td>\u591a\u304f\u306e\u30b5\u30a4\u30c8\u3067\u8aa4\u691c\u77e5\u3068\u898b\u9003\u3057\u306e\u30d0\u30e9\u30f3\u30b9\u304c\u53d6\u308c\u308b<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th><code>0.5<\/code><\/th>\r\n      <td>50%\u6e1b\u3067\u767a\u706b\uff08\u920d\u611f\uff09<\/td>\r\n      <td>\u9031\u672b\u306b\u5927\u304d\u304f\u843d\u3061\u308b\u50be\u5411\u304c\u3042\u308b\u30b5\u30a4\u30c8<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n<p>\u5b9f\u969b\u306b1\u301c2\u9031\u9593\u5206\u306e\u30c7\u30fc\u30bf\u3067\u4f55\u65e5\u30a2\u30e9\u30fc\u30c8\u304c\u51fa\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304b\u3089\u95be\u5024\u3092\u8abf\u6574\u3059\u308b\u306e\u304c\u304a\u3059\u3059\u3081\u3067\u3059\u3002<\/p>\r\n\r\n<hr class=\"separator mt-3r\">\r\n\r\n<h2 class=\"fz-xl\">\u307e\u3068\u3081<\/h2>\r\n<p>GAS\u3067GA4\u30ec\u30dd\u30fc\u30c8\u3092\u81ea\u52d5\u914d\u4fe1\u3059\u308b\u4ed5\u7d44\u307f\u306f\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\uff08<code>CONFIG<\/code>\uff09\u30921\u304b\u6240\u66f8\u304d\u63db\u3048\u308b\u3060\u3051\u3067\u8907\u6570\u30b5\u30a4\u30c8\u306b\u5bfe\u5fdc\u3067\u304d\u3001\u7dad\u6301\u8cbb\u3082\u304b\u304b\u308a\u307e\u305b\u3093\u3002<\/p>\r\n<p>\u7279\u306b\u8907\u6570\u306eWordPress\u30b5\u30a4\u30c8\u3092GTM\u3067\u7ba1\u7406\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u5927\u5e45\u6539\u4fee\u306e\u969b\u306b\u30bf\u30b0\u304c\u8a2d\u7f6e\u6f0f\u308c\u306b\u306a\u3063\u3066\u3082\u3053\u306e\u4ed5\u7d44\u307f\u304c\u3042\u308c\u3070\u3059\u3050\u306b\u6c17\u3065\u3051\u307e\u3059\u3002\u300c\u524d\u65e5\u6bd4\u221240%\u4ee5\u4e0b\u3067\u30a2\u30e9\u30fc\u30c8\u300d\u3068\u3044\u3046\u5358\u7d14\u306a\u30eb\u30fc\u30eb\u3067\u3059\u304c\u3001\u5b9f\u969b\u306e\u8a08\u6e2c\u969c\u5bb3\u3084\u5e83\u544a\u505c\u6b62\u3092\u65e9\u671f\u767a\u898b\u3059\u308b\u306e\u306b\u5341\u5206\u5b9f\u7528\u7684\u3067\u3059\u3002<\/p>","protected":false},"excerpt":{"rendered":"Google Apps Script\uff08GAS\uff09\u3067GA4\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u30e6\u30fc\u30b6\u30fc\u6570\u30fbPV\u6570\u3092\u6bce\u671d\u81ea\u52d5\u30e1\u30fc\u30eb\u914d\u4fe1\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3002\u524d\u65e5\u6bd4\u30fb7\u65e5\u5e73\u5747\u6bd4\u3067\u30a2\u30af\u30bb\u30b9\u304c\u6025\u843d\u3057\u305f\u3068\u304d\u4ef6\u540d\u3067\u901a\u77e5\u3059\u308b\u7570\u5e38\u5024\u30a2\u30e9\u30fc\u30c8\u6a5f\u80fd\u4ed8\u304d\u3002\u8907\u6570\u30b5\u30a4\u30c8\u5bfe\u5fdc\u3002","protected":false},"author":1,"featured_media":13618,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","footnotes":"","vk-ltc-link":"","vk-ltc-target":"0"},"categories":[16],"tags":[853,852,851,850,849,848,847,364,206,148,149,102],"group":[],"pg":[],"class_list":["post-11808","post","type-post","status-publish","format-standard","has-post-thumbnail","category-analytic","tag-analytics-data-api","tag-852","tag-gtm","tag-850","tag-849","tag-google-apps-script","tag-gas","tag-364","tag-206","tag-google-analytics","tag-ga4","tag-wordpress"],"acf":[],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/posts\/11808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/comments?post=11808"}],"version-history":[{"count":0,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/posts\/11808\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media\/13618"}],"wp:attachment":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media?parent=11808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/categories?post=11808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/tags?post=11808"},{"taxonomy":"group","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/group?post=11808"},{"taxonomy":"pg","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pg?post=11808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}