8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

New Relic Browserのカスタム属性を永続化する第3引数「persist」の仕組みと使い分け

Last updated at Posted at 2026-01-14

New Relic Browser で「ユーザーID」「会員ランク」「ABテスト群」などを分析に使いたい時、setCustomAttribute を使う方は多いと思います。

しかし、
「画面遷移したら値が消える」
「F5 を押した瞬間に属性が飛ぶ」
という挙動に悩んだことはないでしょうか。

javascript
newrelic.setCustomAttribute('userRank', 'Gold');

標準的な実装(引数2つ)の場合、画面遷移やリロードをすると値が消えてしまうという課題があります。

これを解決するために sessionStorage などを自前で実装する方法もありますが、実は New Relic の標準機能だけで解決できる場合があります。

今回は、第3引数 persist オプションについて、その仕組みと正しい使い分けを解説します。

最新のアップデートの詳細はこちら
New Relic アップデート一覧

無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

第3引数「persist」とは?

setCustomAttribute には、オプションとなる3つ目の引数(boolean)が存在します。

javascript
// 第3引数を true にすると、永続化(Persist)モードになる
newrelic.setCustomAttribute('key', 'value', true);

これを true に設定すると、Browser Agent はカスタム属性の値をブラウザの LocalStorage に保存し、ページ遷移やリロードを行っても値を維持(復元)する ようになります。

※ persist: true は Cookie ではなく LocalStorage を利用したセッション管理 です。

通常(第3引数なし)の場合、カスタム属性はブラウザ上に一時的に保存されるだけです。そのため、ブラウザがページを読み込み直すタイミングでデータはすべて消えてしまいます。

しかし persist: true を設定すると、以下の表のように「リセットされるタイミング」でも値が維持されるようになります。

シチュエーション 第3引数なし(デフォルト) persist: true
MPA でのページ遷移 ❌ 消える 引き継がれる
SPA でのブラウザリロード ❌ 消える 引き継がれる

New Relic のデータで永続化を確認

では、実際に persist: true を設定した状態で、データがどのように New Relic に送られているかを確認してみましょう。

javascript
// 検証用コード:固定値をセット
newrelic.setCustomAttribute('testAttr', 'from_mpa_page1');

newrelic.setCustomAttribute('testAttr', 'from_spa_page1');

この状態で画面遷移を行い、遷移後の AjaxRequest や BrowserInteraction, PageView イベントにこの属性が含まれているかを確認します。

結果の確認には下記のNRQLを使用しています。

NRQL
SELECT appName,eventType(), targetUrl or pageUrl, category or actionName,browserInteractionName, testAttr
FROM PageView, `BrowserInteraction`, PageAction, AjaxRequest 
SINCE 30 minutes ago UNTIL now LIMIT MAX

ケース1:MPA でのページ遷移

MPAで、ページ1で属性をセットし、ページ2へリンク遷移した場合のデータです。
MPA-persist.png

通常(persist: false)であれば、/page2.html に遷移した時点でブラウザがリロードされ、属性値は null になってしまいます。 しかし、persist: true を有効にしているため、セッションが切れない限り、どのページに遷移しても属性が付いてきていることが分かります。

これにより、「コンバージョンしたユーザーは、最初のページで何の属性を持っていたか?」といった分析が途切れずに実現できます。

ケース2:SPA でのブラウザリロード

次に、SPA(React/Vue等)で persist: true が真価を発揮する「F5リロード」のケースです。

persist: false の場合
SPA-persist-false.png

persist: true の場合
SPA-persist-true.png

SPAでは、リロードを行うと JavaScript のメモリが全てクリアされるため、通常であれば属性は消失します。 しかし、persist: true の場合、New Relic Agent が初期化された直後(PageViewイベント発生時)に LocalStorage から値を吸い上げ、即座に属性をセットし直している 様子が見て取れます。

これにより、ユーザーが誤ってリロードしてしまっても「誰が操作しているか」というコンテキストを見失わずに計測を継続できます。

裏側の仕組み:30分ルールと有効期限

「永続化」といっても、LocalStorage に半永久的に残り続けるわけではありません。 New Relic Browser Agent は、セッション管理のために以下の 「有効期限ルール」 を持っています。

ルール 内容
アイドルタイムアウト 最後の操作から 30分 経過するとリセット
最大セッション時間 最初のアクセスから 4時間 経過するとリセット

つまり、persist: true にした属性は、「ユーザーがサイトを利用している間(セッション中)は維持されるが、離脱して30分経てばリセット」 という、分析において非常に都合の良い挙動をしてくれます。

実際に persist: true が正しく動作しているか、およびセッションの有効期限が設定されているかは、Chrome DevTools で裏側のデータを見ることで確認できます。

  1. Chrome DevTools を開き、Application タブを選択します
  2. 左メニューの Local Storage > [開いているドメイン] を選択します
  3. NRBA_SESSION というキーを探します

ここには、以下のようなデータが保存されています。

NRBA_SESSION
{
  "value": "7c9f3a85eeec3380",
  "inactiveAt": 1767398603882,
  "expiresAt": 1767410890360,
  "custom": {
    "testAttr": "from_mpa_page1"
  },
  // ...その他メタデータ
}

確認ポイント

custom: ここに setCustomAttribute(key, val, true) でセットした値が格納されます。画面遷移後にここを確認し、値が残っていれば永続化は成功しています。

inactiveAt: アイドルタイムアウト時刻(最終操作 + 30分)です。

expiresAt: セッション最大有効期限(開始 + 4時間)です。

このように、データの実体を見ることで、New Relic Agent が「属性」と「有効期限」をセットで管理している様子がはっきりと分かります。

使い分け戦略

便利な persist 機能ですが、実務では「すべてのデータを永続化すれば良い」わけではありません。 データの 「寿命(スコープ)」 に合わせて、MPAとSPAそれぞれで適切な実装方法を選択する必要があります。

特に 「特定のページだけで保持したい情報」 の扱いにおいて、両者の実装方法は大きく異なります。

ケース1:継続的な状態(User Context)の場合

会員ランク、ユーザーID、ログイン状態など、セッションを通じて変わらない情報については、アーキテクチャに関わらず 「永続化(persist: true)」 一択です。

  • MPA: 画面遷移(リロード)での消失を防ぐため

  • SPA: 誤操作によるリロード(F5)での消失を防ぐため

ここはシンプルに「セッション中ずっと維持したいものは true」と考えればOKです。

javascript
// MPA / SPA 共通:重要なユーザー情報は永続化する
newrelic.setCustomAttribute('userPlan', 'Premium', true);

ケース2:特定のページだけの情報(Page Context)の場合

記事のカテゴリー、著者名、その画面の商品IDなど 「ページを移動したら消えてほしい情報」 の扱いは、MPAとSPAで実装方法が分かれます。

MPAの場合:オプション無効(persist: false)を利用する

MPAは画面遷移のたびにメモリがリセットされる仕組みです。これを利用しない手はありません。

  • 推奨実装: newrelic.setCustomAttribute('category', 'tech'); (第3引数なし)

  • 理由: 次のページに遷移すればブラウザが勝手にデータを消してくれます。「消し忘れ(データ汚染)」のリスクがないため、最も安全かつ簡単な方法です

SPAの場合:PageAction を利用する

ここが最大のポイントです。SPAでMPAと同じように setCustomAttribute を使ってしまうと、画面遷移(ルート変更)しても値が残り続けます。 これを防ぐために「画面遷移時に null をセットして消す」という実装も可能ですが、ルーターのイベント監視やコンポーネントの破棄処理(cleanup)ですべての属性を管理するのは実装難易度が高く、バグ(データ汚染)の温床になります。

そのため、SPAにおけるページ固有情報は、「状態(Attribute)」として持たせず、「イベント(PageAction)」として記録するのが実装難易度が低いです。

  • 推奨実装: newrelic.addPageAction('viewContent', { category: 'tech' });

  • 理由:

    • PageActionはその瞬間のイベントとして記録されるため、「次の画面に値が残る」という概念自体がありません
    • 面倒なライフサイクル管理から解放され、実装コストを大幅に下げられます

注意点:LocalStorage だからこその挙動

persist: true は非常に便利ですが、裏側で LocalStorage を使っているがゆえの挙動も理解しておく必要があります。

1. 複数タブでの共有

LocalStorage は「オリジン(ドメイン)」単位で共有されます。 ユーザーがブラウザのタブを2つ開いている場合、タブAでセットした属性は、タブBにも即座に(あるいは次の再読み込み時に)反映されます。

  • メリット: 「カートに商品を入れた」などのステータスがタブ間で同期される

  • デメリット: タブごとに異なるコンテキストを持ちたい場合(例:タブAで商品A、タブBで商品Bを見ている時の商品IDなど)に persist: true を使うと、後から操作した方で上書きされてしまいます

こうした「タブ(画面)固有の情報」についても、やはり前述の「MPAなら persist: false」「SPAなら PageAction」という使い分けが有効です。

2. プライバシーとセキュリティ

persist: true で保存されたデータは、ブラウザの LocalStorage に保存されます。 New Relic への送信データ同様、クレジットカード番号、パスワード、個人特定性の高い機微情報は絶対にセットしない ようにしてください。誰でも DevTools から見ることができてしまいます。

まとめ

最後に、今回解説した persist オプションと PageAction の使い分けをマトリクスで整理します。

「このデータはいつまで残ってほしいのか?」というデータの寿命を軸に選定するのが正解への近道です。

データの種類 具体例 MPA (SSR/PHP/Rails等) SPA (React/Vue等)
ユーザー属性(セッション中維持) 会員ランク/ログインID/ABテスト群 setCustomAttribute (persist: true) setCustomAttribute (persist: true)
ページ属性(移動したら消える) カテゴリ名/記事ID/商品ID setCustomAttribute (persist: false) addPageAction(イベントとして送信)

New Relic Browser の setCustomAttribute は、第3引数 persist を使いこなすことで、自前で Cookie や Storage 管理コードを書くことなく、堅牢なセッション分析基盤を作ることができます。

  • セッションを通して追いたいなら true
  • そのページだけでいいなら false (SPAなら PageAction)

このルールさえ覚えておけば、データ分析の精度は格段に上がり、実装工数は下がります。

New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!

New Relic株式会社のX(旧Twitter)Qiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。

無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

image.png

8
3
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
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?