SlideShare a Scribd company logo
1 of 21
React.jsと
GoogleAnalytics
黒澤 直樹 (Bizer Inc.)
Twitter @naoki_kurosawa
自己紹介
黒澤 直樹 (Bizer株式会社)
スモールビジネス向け
クラウド・バックオフィスサービス
「Bizer」
オンライン
顧問 税理士・社労士・弁理士・行政書士・司法書士
React.jsアプリケーションのアクセス解析について
1. react-ga とか react-google-analytics イマイチじゃね?
2. Reactアプリ内からsend pageviewするには、reduxより
react-routerから
お話ししたいこと まとめ
1. GoogleAnalyticsの組み込み方
どうする?
1. 従来通り headerにscriptタグを仕込む
2. react-ga コンポーネントを使う
3. react-google-analytics コンポーネントを使う
analytics.jsをどう読み込むか
<script type=“text/javascirpt>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject …
</script>
• どちらもGAの薄いwrapper
 GAのAPIそのまま
react-ga
react-google-analytics とは
• ネットワークアクセス回数は減らない
 webpackやgulpでbundleしても、結局scriptタグが
appendChildされてjsがダウンロードされる動き
• 初期化タイミングが遅くなる
 そのうえ、初期化直後はまだAPIを呼べない
• Reactアプリ外からsendしたいときに対応できない
ポイント
1. 従来通り headerにscriptタグを仕込む
結論:GAの組み込み方
<script type=“text/javascirpt>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject …
</script>
コンポーネントを使っても別に良いことがない
2. アプリ内のどこでGAに
pageviewをsendしたらいい?
1. コンストラクタ?
2. componentWillMount? componentDidMount?
どこにsendするコードを書く?
画面表示用コンポーネントに
書いたらダメ
例えばこんな画面遷移
なぜか?
path: /projects/1/tasks/12
/projects/1/tasks/13
↓
「同じ画面を別データで表示しなおし」
起こるイベント
まったく同じコンポーネント
インスタンスが再利用される
1. componentWillReceiveProps
2. componentWillUpdate
3. render
4. componentDidUpdate
同じインスタンスにプロパティが再設定され、
renderingされるだけ
正解:routingポイント
つまりreact-routerとか
描画されるコンポーネント側ではなく、
URLの変化に応じてコンポーネントを描画する側
• react-router-redux の readme
小さな罠
react-router-reduxをlistenしてGAにsendするといいよ
と言わんばかり
別に悪ではないですが…
react-router-reduxのlistener
location: {
$searchBase: { search: "", searchBase: "" },
action: "POP"
hash: ""
key: "05036w"
pathname: "/projects/1/tasks/12"
query: { }
search: "”
state: null
}
GAに渡す?
function listener( location )
GAのレポート
本来同じ画面のhit
URLにIDが入ってしまい
ばらけてよく分からない
こんなに画面数ないのに
react-routerのonEnterフック
nextState: {
location: { react-router-reduxと同じlocation構造 }
params: { projectId: "1", taskId: "12" }
routes: [
{ component: App, ... path: "/" },
{ indexRoute: ... path: "projects/" },
{ ... path: ":projectId/" },
{ indexRoute: ... path: ”tasks/" },
{component: TaskDetail, ... path: ":taskId" }
]
}
function onEnter( nextState, replace, callback? )
ルーティング定義ツリーのう
ち、マッチする物がルートか
ら順に配列になっている
routesのpathを連結すると
result = nextState.routes.map( e => e.path ).join( "" );
“/projects/:projectId/tasks/:taskId”
これをパスとしてGAにsendするとレポートがいい感じに
1. GAの組み込みはコンポーネント使うより従来の方法がい
いのでは
2. Reactアプリ内からsend pageviewするには、reduxより
react-routerからやった方がレポートがいい感じに作れる
お話ししたこと まとめ
• Facebookピクセルはどうする?
 GAと大体同じ
• Google Tag Manager使える?
 使えない(たぶん)
• ネット広告のコンバージョントラッキングどうする?
 独自Tag Manager作る(そしてjQueryが必要…)
関連トピック
ご興味あったら懇親会の時にでも話しかけてください
ご静聴ありがとうございました

More Related Content

What's hot

ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれからReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれからYusuke Murata
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころAyumi Goto
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化Kon Yuichi
 
One Time Binding & Digest Loop
One Time Binding & Digest LoopOne Time Binding & Digest Loop
One Time Binding & Digest LoopKon Yuichi
 
AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話Yosuke Onoue
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介しますnkazuki
 
SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」Naoyuki Kataoka
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示するregret raym
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会VOYAGE GROUP
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with BrowserifyMuyuu Fujita
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかYoichi Toyota
 
簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)Takahiro Maki
 
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscalaビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscalatakezoe
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたItaru Kitagawa
 
3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular jsShin Adachi
 

What's hot (20)

ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれからReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
React Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリングReact Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリング
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 
AngularJSの高速化
AngularJSの高速化AngularJSの高速化
AngularJSの高速化
 
One Time Binding & Digest Loop
One Time Binding & Digest LoopOne Time Binding & Digest Loop
One Time Binding & Digest Loop
 
AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介します
 
SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」SIROK技術勉強会 #1 「Reactってなんだ?」
SIROK技術勉強会 #1 「Reactってなんだ?」
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with Browserify
 
Swagger 入門
Swagger 入門Swagger 入門
Swagger 入門
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
React meetup 3_eight
React meetup 3_eightReact meetup 3_eight
React meetup 3_eight
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
 
簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)
 
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscalaビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular js
 

Similar to 20160927 reactmeetup

Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleciJesse Katsumata
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Shotaro Suzuki
 
react-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのかreact-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのか暁 三宅
 
TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介
TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介
TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介QlikPresalesJapan
 
第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjax第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjaxKensaku Komatsu
 
タグ管理のススメ
タグ管理のススメタグ管理のススメ
タグ管理のススメMakoto Shimizu
 
React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話GIG inc.
 
Migrating tocloudnativeapplicationwithusingelasticapm
Migrating tocloudnativeapplicationwithusingelasticapmMigrating tocloudnativeapplicationwithusingelasticapm
Migrating tocloudnativeapplicationwithusingelasticapmShotaro Suzuki
 
Learn, build, and scale with elastic - realizing great programming experience...
Learn, build, and scale with elastic - realizing great programming experience...Learn, build, and scale with elastic - realizing great programming experience...
Learn, build, and scale with elastic - realizing great programming experience...Shotaro Suzuki
 
Testing react-native with storybook on web
Testing react-native with storybook on webTesting react-native with storybook on web
Testing react-native with storybook on webJesse Katsumata
 
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】WESEEKWESEEK
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
Om Next ~React.jsを超えて
Om Next ~React.jsを超えてOm Next ~React.jsを超えて
Om Next ~React.jsを超えてKazuki Tsutsumi
 
20160421 react勉強会
20160421 react勉強会20160421 react勉強会
20160421 react勉強会Naoki Kurosawa
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Toshiro Shimizu
 
ITを使った今時の聖地巡礼ユーザー分析 in 沼津
ITを使った今時の聖地巡礼ユーザー分析 in 沼津ITを使った今時の聖地巡礼ユーザー分析 in 沼津
ITを使った今時の聖地巡礼ユーザー分析 in 沼津Junichi Noda
 
React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門Kazuhiro Yoshimoto
 

Similar to 20160927 reactmeetup (20)

React and-rx
React and-rxReact and-rx
React and-rx
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleci
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
 
react-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのかreact-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのか
 
TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介
TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介
TECH TALK 2021/08/31 Qlik Sense Extension開発 第2弾 - プログラミング可能な汎用エクステンションのご紹介
 
第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjax第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjax
 
タグ管理のススメ
タグ管理のススメタグ管理のススメ
タグ管理のススメ
 
React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話
 
GraphQL with React
GraphQL with ReactGraphQL with React
GraphQL with React
 
Migrating tocloudnativeapplicationwithusingelasticapm
Migrating tocloudnativeapplicationwithusingelasticapmMigrating tocloudnativeapplicationwithusingelasticapm
Migrating tocloudnativeapplicationwithusingelasticapm
 
Learn, build, and scale with elastic - realizing great programming experience...
Learn, build, and scale with elastic - realizing great programming experience...Learn, build, and scale with elastic - realizing great programming experience...
Learn, build, and scale with elastic - realizing great programming experience...
 
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
 
Testing react-native with storybook on web
Testing react-native with storybook on webTesting react-native with storybook on web
Testing react-native with storybook on web
 
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
Om Next ~React.jsを超えて
Om Next ~React.jsを超えてOm Next ~React.jsを超えて
Om Next ~React.jsを超えて
 
20160421 react勉強会
20160421 react勉強会20160421 react勉強会
20160421 react勉強会
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
 
ITを使った今時の聖地巡礼ユーザー分析 in 沼津
ITを使った今時の聖地巡礼ユーザー分析 in 沼津ITを使った今時の聖地巡礼ユーザー分析 in 沼津
ITを使った今時の聖地巡礼ユーザー分析 in 沼津
 
React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門
 

20160927 reactmeetup