Sentry

Nuxt Sentryでユーザーフィードバックを受け取る

Sentryでは、エラーが発生した際に簡単にユーザーフォードバックを求めるダイアログを表示することができます。 Nuxt.jsでは、エラーが発生した際には`layouts/error.vue`へ遷移させることでエラーページを表示するので、このエラーコンポーネントにダイアログを表示させる処理を書いていきます。

Sentry では、エラーが発生した際に簡単にユーザーフォードバックを求めるダイアログを表示できます。

Nuxt.js では、エラーが発生した際には layouts/error.vue へ遷移させることでエラーページを表示するので、このエラーコンポーネントにダイアログを表示させる処理を書いていきます。

ライブラリをインストール

nuxt/sentry というモジュールがあるので基本はこれを使用しますが、おそらく?ユーザーフィードバックを求めるダイアログを表示させるメソッドは存在しないので、そのために、@sentry/vue もインストールします。

$ yarn add nuxt/sentry @sentry/vue

nuxt.config.jsを修正

Sentry の初期設定は nuxt.config.js に記述します。

modules: [ '@nuxtjs/sentry' ],
sentry: {
    dsn: process.env.SENTRY_DSN || '',
    disabled: process.env.NODE_ENV !== 'production',
    sourceMapStyle: 'hidden-source-map',
    config: {
      release: process.env.GIT_SHA
    }
  },

Sentry のイベントの送信先である dsn は .env ファイルの定義であります。 disabled の条件によって、本番環境以外においては Sentry は動作しなくなります。 sourceMapStylehidden-source-map に設定するとソースマップが非表示になります。 通常デフォルトで非表示となっていることが望ましいですが、後方互換性のためにデフォルトの設定では表示させるようにしているようです。 config.relaseprocess.env.GIT_SHA に設定すると、Git のコミットハッシュによってリリース回数を数えることができます。

設定するとその他のモジュールと同じように this.$sentry でアクセスできるようになります。

エラーコンポーネント

エラーコンポーネントを修正します。

import * as Sentry from '@sentry/vue'
 
export default {
  props: {
    error: {
      type: Object,
      default: null
    }
  },
  data() {
    return {
      eventId: ''
    }
  },
  created() {
    this.eventId = this.$sentry.captureException(this.error)
  },
  methods: {
    showReportDialog() {
      Sentry.showReportDialog({
        eventId: this.eventId,
        dsn: process.env.SENTRY_DSN,
        user: {
          name: this.user ? this.user.username : '',
          email: this.user ? this.user.email : ''
        }
      })
    }
  },
  computed() {
    user() {
      // 省略
    }
  }
}

created メソッドで、Sentry によりエラーを送信します。 this.$sentry.captureException は返り値として eventId を返しますが、これはダイアログを表示させるために必須オプションですので data プロパティとして保持しておきます。

前述したとおり、nuxt/sentry モジュールにはダイアログを表示させる機能がないため、'@sentry/vue'をインポートして使用します。 再度 sentry DSN を設定しなければいけないので注意してください。

eventIddsn は必須オプションです。 user.nameuser.email を設定するとダイアログのフォームに初期値として登録されるので入力の手間が省けて便利です。

後はボタン押下のなどのイベントによってこのメソッドを呼び出すようにすればよいでしょう。

実際に表示されるダイアログは以下のようになります。

user-feedback-dialog

ダイアログの文言もオプションを渡すことで自由に変更できます。 設定可能なすべてのオプションは以下を参照してください。

ユーザーフィードバックが送信された場合、Sentry から確認できます。

user-feed-back


Contributors

> GitHub で修正を提案する
この記事をシェアする
はてなブックマークに追加

関連記事