CakePHP 3 で効率的に Google Analytics を導入するアイディア紹介
はじめに
CakePHP3 はWebシステムを構築するのにとても便利なフレームワークです。システム開発を行う際には、開発と本番で環境を分けると思います。さらに、テストやリハーサルの環境を別に設ける場合もありますね。
ところで、Webサイトには Google Analytics を導入することも多いと思います。これは本番環境だけに設置するもので、開発環境などには入れたくありません。
対応策として、本番に上げる際に追記するという方法も考えられますが、これは手間がかかります。また誤って無効のまま公開するリスクもあります。
そこで、今日はCakePHP3で、そういった手間やリスクを軽減する、効率的に Google Analytics を導入するアイディアをご紹介します。
1. トラッキングIDを調べる
Google Analytics のトラッキングコードの中で、下記の「●●●」の部分がIDになります。
(Google Analytics の画面でも確認できます。そちらでの確認方法は割愛します)
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=●●●"></script>
2. app.php に ID を追加
/config/app.phpの return [ ~ ]; の中に、下記のようにトラッキングIDを追加。
/config/app.default.phpにも 'gatid' => '', を追記しておくといいと思います。
return [
/**
* Google Analytics Tracking ID
*/
'gatid' => '●●●',
3. AppController で ID を View に渡す
/src/Controller/AppController.php の上部に、下記のように use Cake\Core\Configure; を追加。
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Core\Configure; // ← これを追加
use Cake\Event\Event;
そして、class AppController extends Controller { ~ } の中に、下記関数を追加。
既に beforeRender() 関数がある場合は、その中のどこかに、下記関数の中身2行を追記してください。
/**
* Called before the view is rendered.
*
* @param Event $event
* @return void
*/
public function beforeRender(Event $event)
{
$gatid = Configure::read('gatid');
$this->set(compact('gatid'));
}
4. default.ctp にトラッキングコード追加
/src/Template/Layout/default.ctp の <head> の直後に、下記を追記。
<?php if ($gatid !== '') : ?>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=<?= $gatid ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<?= $gatid ?>');
</script>
<?php endif; ?>
あとは Google Analytics の画面で、動作を確認すれば完了です。