4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

viteのdefineConfigにプラグイン(GoogleTagManagerを差し込むやつ)を追加してみる

Posted at

GoogleTagManager を入れるためだけに、サードライブラリをインストールするのめんどい

てなわけで、Viteを使ってサイトを構築してるときにアクセス数とかの管理のために、GoogleTagManagerをhtmlに記述するってよくあるよね(多分

ベースのindex.htmlに直接書いてもいいんだけど、出来れば本番環境にのみタグを入れたいとかもあるはず。
そんなときにタグを入れるだけのライブラリとかも合ったりしてソレを入れればいいじゃんって感じですが、どうせなら勉強がてらに作ってみればいいじゃんということで作ってみた。

やりたいこと

  • 本番環境にGoogleTagManagerをいれる
  • 開発・検証環境はrobotsのnoindexをいれる
index.html
<!doctype html>
<html lang="ja">

<head>
  <!-- Google Tag Manager ここをリプレイスする予定-->
  <gtm></gtm>
  <!-- End Google Tag Manager -->
  <meta charset="UTF-8">
  <meta http-equiv="Pragma" content="no-cache">
  <meta http-equiv="Cache-Control" content="no-cache">
  <link rel="icon" href="/favicon.ico" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>何かサンプルサイト</title>
  <meta property="og:locale" content="ja_JP">
  <meta property="og:site_name" content="何かサンプルサイト">
</head>

<body>
  <div id="app"></div>
  <script type="module" src="./main.js"></script>
</body>

</html>

HTMLには変換用のタグを用意します

vite.config.js
/** GoogleTagManager差し込み用プラグイン */
const gtmPlugin = () => {
  const isProduction = process.env.NODE_ENV === 'production';
  return {
    name: 'html-transform',
    transformIndexHtml(html) {
      return html.replace(
        /<gtm><\/gtm>/,
        (isProduction
          ? `<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','ここに何かIDを入れる');</script>`
          : `<meta name="robots" content="noindex">`)
      )
    },
  }
} 

export default defineConfig(() => ({
    // 省略
    plugins: [vue(), gtmPlugin()],
    // 省略
}));

transformIndexHtml で index.htmlが文字列として取得されるので、
ソレをprocess.env.NODE_ENVの値によって置換してるだけというシンプルなもの。

まとめ

公式だと、規約だとかなんだとかあるみたいですが、即席のプラグインだし試しにやってみただけなので、わかるようになってから守るようにしようかと。
※命名とかよりもその機能が使えるかどうかが自分としては重要

robots.txtとかsitemap.xmlとか生成するとかも今後作れたらいいね(ネタを作って締める

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?