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 は動作しなくなります。
sourceMapStyle
は hidden-source-map
に設定するとソースマップが非表示になります。
通常デフォルトで非表示となっていることが望ましいですが、後方互換性のためにデフォルトの設定では表示させるようにしているようです。
config.relase
を process.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 を設定しなければいけないので注意してください。
eventId
と dsn
は必須オプションです。
user.name
・user.email
を設定するとダイアログのフォームに初期値として登録されるので入力の手間が省けて便利です。
後はボタン押下のなどのイベントによってこのメソッドを呼び出すようにすればよいでしょう。
実際に表示されるダイアログは以下のようになります。
ダイアログの文言もオプションを渡すことで自由に変更できます。 設定可能なすべてのオプションは以下を参照してください。
ユーザーフィードバックが送信された場合、Sentry から確認できます。