sentry-android-sdk について
KotlinまたはJavaのAndroidプロジェクトにSentryの監視機能を導入するための設定スキルです。プロジェクトを調査し、Gradleプラグインまたは手動設定でエラー監視、トレース、リプレイ、プロファイリング、ログなどを構成します。
主な機能
- 01Androidのビルドファイルと既存設定の調査
- 02Gradleプラグインまたは手動導入の案内
- 03エラー監視とトレースの設定
- 04リプレイ、プロファイリング、ログ、フィードバックへの対応
- 05プロジェクト構成に応じた設定確認
活用シーン
- 01KotlinまたはJavaのAndroidアプリへのSentry導入
- 02検出した依存関係に基づくインテグレーション選定
- 03既存AndroidプロジェクトでのSentry設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ getsentry/ sentry-for-ai --skill sentry-android-sdkインストール後、Claude Code で/sentry-android-sdkを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/crons.mderror-monitoring.mdintegrations.mdlogging.mdmetrics.mdprofiling.mdsession-replay.mdtracing.md詳細
すべてのスキル > SDK セットアップ > Android SDK
Sentry Android SDK
Android プロジェクトをスキャンし、エラー監視、トレーシング、プロファイリング、セッションリプレイ、ロギングなど、Sentry のセットアップを一通り案内する、方針を重視したウィザードです。
このスキルを使う場面
- ユーザーが Android アプリに「Sentry を追加」または「Sentry をセットアップ」したいと言った場合
- ユーザーが Android でエラー監視、クラッシュレポート、ANR 検出、トレーシング、プロファイリング、セッションリプレイ、ロギングを求めている場合
- ユーザーが
sentry-android、io.sentry:sentry-android、モバイルのクラッシュ追跡、または Kotlin/Java Android 向けの Sentry に言及した場合 - ユーザーがネイティブ(NDK)のクラッシュ、アプリケーション応答なし(ANR)イベント、またはアプリの起動パフォーマンスを監視したい場合
注: 以下の SDK バージョンと API は、執筆時点の最新の Sentry ドキュメント(
io.sentry:sentry-android:8.33.0、Gradle プラグイン6.1.0)に基づいています。 実装前に必ず docs.sentry.io/platforms/android/ で確認してください。
フェーズ 1:検出
推奨事項を提示する前に、以下のコマンドを実行してプロジェクトの状況を把握してください。
# Detect project structure and build system
ls build.gradle build.gradle.kts settings.gradle settings.gradle.kts 2>/dev/null
# Check AGP version and existing Sentry
grep -r '"com.android.application"' build.gradle* app/build.gradle* 2>/dev/null | head -3
grep -ri sentry build.gradle* app/build.gradle* 2>/dev/null | head -10
# Check app-level build file (Groovy vs KTS)
ls app/build.gradle app/build.gradle.kts 2>/dev/null
# Detect Gradle version catalog (libs.versions.toml) — modern AGP projects
ls gradle/libs.versions.toml 2>/dev/null
# Check for existing Sentry entries in the version catalog
grep -iE 'sentry|io\.sentry' gradle/libs.versions.toml 2>/dev/null | head -10
# Check if build files reference the catalog (alias/libs.* usage)
grep -E 'alias\(libs\.|libs\.[a-zA-Z]' build.gradle build.gradle.kts app/build.gradle app/build.gradle.kts 2>/dev/null | head -5
# Detect Kotlin vs Java
find app/src/main -name "*.kt" 2>/dev/null | head -3
find app/src/main -name "*.java" 2>/dev/null | head -3
# Check minSdk, targetSdk
grep -E 'minSdk|targetSdk|compileSdk|minSdkVersion|targetSdkVersion' app/build.gradle app/build.gradle.kts 2>/dev/null | head -6
# Detect Jetpack Compose
grep -E 'compose|androidx.compose' app/build.gradle app/build.gradle.kts 2>/dev/null | head -5
# Detect OkHttp (popular HTTP client — has dedicated integration)
grep -E 'okhttp|retrofit' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3
# Detect Room or SQLite
grep -E 'androidx.room|androidx.sqlite' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3
# Detect Timber (logging library)
grep -E 'timber' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3
# Detect Jetpack Navigation
grep -E 'androidx.navigation' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3
# Detect Apollo (GraphQL)
grep -E 'apollo' app/build.gradle app/build.gradle.kts 2>/dev/null | head -3
# Check existing Sentry initialization
grep -r "SentryAndroid.init\|io.sentry.Sentry" app/src/ 2>/dev/null | head -5
# Check Application class
find app/src/main -name "*.kt" -o -name "*.java" 2>/dev/null | xargs grep -l "Application()" 2>/dev/null | head -3
# Adjacent backend (for cross-linking)
ls ../backend ../server ../api 2>/dev/null
find .. -maxdepth 2 \( -name "go.mod" -o -name "requirements.txt" -o -name "Gemfile" \) 2>/dev/null | grep -v node_modules | head -5
確認事項:
| 質問 | 影響 |
|---|---|
build.gradle.kts があるか? | すべての例で Kotlin DSL 構文を使用します |
gradle/libs.versions.toml があるか? | Sentry をバージョンカタログに追加し、ビルドファイルでは libs.* から参照します |
カタログに sentry のエントリがすでにあるか? | 既存のバージョン参照を再利用し、重複やバージョンのハードコードを避けます |
minSdk < 26 か? | セッションリプレイには API 26 以降が必要で、それ未満では何も行われないことを伝えます |
| Compose が検出されたか? | sentry-compose-android と Compose 固有のマスキングを推奨します |
| OkHttp があるか? | sentry-okhttp インターセプター、または Gradle プラグインのバイトコード自動計測を推奨します |
| Room/SQLite があるか? | sentry-android-sqlite またはプラグインによるバイトコード計測を推奨します |
| Timber があるか? | sentry-android-timber との統合を推奨します |
| Jetpack Navigation を使用しているか? | 画面追跡には sentry-android-navigation を推奨します |
SentryAndroid.init() がすでにあるか? | インストールは省略し、機能設定に進みます |
| Application サブクラスがあるか? | そこに SentryAndroid.init() を追加します |
フェーズ 2:推奨
見つかった内容に基づいて、具体的な推奨事項を提示してください。漠然とした質問はせず、まず提案してください。
推奨(基本的なカバレッジ — 常にセットアップする項目):
- ✅ エラー監視 — 捕捉されなかった例外、ANR、ネイティブ NDK クラッシュを自動的に取得します
- ✅ トレーシング — Activity のライフサイクル、アプリの起動、HTTP リクエスト、データベースクエリを自動計測します
- ✅ セッションリプレイ — デバッグ用に画面キャプチャとユーザー操作を記録します(API 26 以降)
オプション(可観測性の強化):
- ⚡ プロファイリング — 継続的な UI プロファイリング(推奨)またはトランザクションベースのサンプリング
- ⚡ ロギング —
Sentry.logger()による構造化ログ。オプションで Timber ブリッジも利用できます - ⚡ ユーザーフィードバック — アプリ内からユーザーが送信するバグレポートを収集します
推奨の判断基準:
| 機能 | 次の場合に推奨 |
|---|---|
| エラー監視 | 常に — すべての Android アプリに欠かせない基本機能です |
| トレーシング | Android では常に — アプリの起動時間、Activity のライフサイクル、ネットワーク遅延が重要です |
| セッションリプレイ | API 26 以降のユーザー向け本番アプリ。ユーザーの問題を視覚的にデバッグする場合 |
| プロファイリング | パフォーマンスが重要なアプリ、起動時間の調査、本番環境でのパフォーマンス分析 |
| ロギング | アプリで構造化ロギングを使用している場合、または Sentry でログとトレースを関連付けたい場合 |
| ユーザーフィードバック | ベータ版または顧客向けアプリで、ユーザーからバグレポートを送信してもらいたい場合 |
提案例:「お使いの [Kotlin/Java] Android アプリ(minSdk X)には、エラー監視 + トレーシング + セッションリプレイのセットアップをおすすめします。プロファイリングとロギングも追加しますか?」
フェーズ 3:ガイド
セットアップ方法を選択する
| プロジェクトの種類 | 推奨されるセットアップ | 複雑さ |
|---|---|---|
| 新規プロジェクトで、既存の Sentry がない | Gradle プラグイン(推奨) | 低 — プラグインがほとんどの設定を処理します |
| 既存のプロジェクトで、Sentry がない | Gradle プラグインまたは手動初期化 | 中 — 依存関係と Application クラスを追加します |
| 手動で完全に制御する | Application で SentryAndroid.init() を実行 | 中 — 明示的に設定でき、最も柔軟です |
オプション 1:ウィザード(推奨)
ウィザードはご自身で実行する必要があります — ウィザードではログインのためにブラウザーが開き、 エージェントが処理できない対話形式の入力が必要です。 ターミナルにコピーして貼り付けてください:
npx @sentry/wizard@latest -i androidログイン、組織とプロジェクトの選択、Gradle プラグインの設定、依存関係の インストール、DSN の設定、ProGuard/R8 マッピングのアップロードを処理します。
完了したら、戻って検証に進んでください。
ウィザードをスキップする場合は、以下のオプション 2(手動セットアップ)に進みます。
オプション 2:手動セットアップ
Gradle Version Catalog(gradle/libs.versions.toml)を使用する
フェーズ 1 で gradle/libs.versions.toml が検出された場合は、まずカタログに Sentry を追加し、その後ビルドファイルから参照します。これにより、バージョンを一元管理でき、最新の AGP プロジェクト規約にも適合します。
手順 1 — gradle/libs.versions.toml にエントリーを追加する
[versions]
sentry = "8.33.0"
sentryGradlePlugin = "6.1.0"
[libraries]
sentry-android = { module = "io.sentry:sentry-android", version.ref = "sentry" }
sentry-bom = { module = "io.sentry:sentry-bom", version.ref = "sentry" }
# Optional integrations — add only the ones your project uses:
sentry-android-timber = { module = "io.sentry:sentry-android-timber" }
sentry-android-fragment = { module = "io.sentry:sentry-android-fragment" }
sentry-compose-android = { module = "io.sentry:sentry-compose-android" }
sentry-android-navigation = { module = "io.sentry:sentry-android-navigation" }
sentry-okhttp = { module = "io.sentry:sentry-okhttp" }
sentry-android-sqlite = { module = "io.sentry:sentry-android-sqlite" }
sentry-kotlin-extensions = { module = "io.sentry:sentry-kotlin-extensions" }
[plugins]
sentry-android-gradle = { id = "io.sentry.android.gradle", version.ref = "sentryGradlePlugin" }
注: オプションの連携エントリーでは
version.refを省略します。バージョンは解決時に BOM から取得されます。バージョン参照が必要なのはsentry-bomのみです。 カタログにすでにsentryのバージョンが定義されている場合は、重複したエントリーを追加せず、既存のものを再利用してください。
手順 2 — build.gradle[.kts] からカタログを参照する
プロジェクトレベルの build.gradle.kts:
plugins {
alias(libs.plugins.sentry.android.gradle) apply false
}
アプリレベルの app/build.gradle.kts:
plugins {
id("com.android.application")
alias(libs.plugins.sentry.android.gradle)
}
dependencies {
implementation(platform(libs.sentry.bom))
implementation(libs.sentry.android)
// implementation(libs.sentry.okhttp)
// implementation(libs.sentry.compose.android)
}
Groovy DSL(app/build.gradle)の場合:
plugins {
id "com.android.application"
alias libs.plugins.sentry.android.gradle
}
dependencies {
implementation platform(libs.sentry.bom)
implementation libs.sentry.android
}
続けて、以下のパス A の手順 2 にある sentry {} 設定ブロックを使用します。Application クラスの初期化、マニフェストへの登録、検証など、残りのセットアップは同じです。
パス A:Gradle プラグイン(推奨)
Sentry Gradle プラグインは、最も簡単なセットアップ方法です。次の処理を行います。
- リリースビルド時に ProGuard/R8 マッピングファイルを自動でアップロードします
- スタックフレームにソースコンテキストを挿入します
- バイトコード変換により、OkHttp、Room/SQLite、File I/O、Compose ナビゲーション、
android.util.Logをオプションで計測します(ソースの変更は不要です)
手順 1 — build.gradle[.kts](プロジェクトレベル)にプラグインを追加する
Groovy DSL(build.gradle):
plugins {
id "io.sentry.android.gradle" version "6.1.0" apply false
}
Kotlin DSL(build.gradle.kts):
plugins {
id("io.sentry.android.gradle") version "6.1.0" apply false
}
手順 2 — プラグインを適用し、app/build.gradle[.kts] に依存関係を追加する
Groovy DSL:
plugins {
id "com.android.application"
id "io.sentry.android.gradle"
}
android {
// ...
}
dependencies {
// Use BOM for consistent versions across sentry modules
implementation platform("io.sentry:sentry-bom:8.33.0")
implementation "io.sentry:sentry-android"
// Optional integrations (add what's relevant):
// implementation "io.sentry:sentry-android-timber" // Timber bridge
// implementation "io.sentry:sentry-android-fragment" // Fragment lifecycle tracing
// implementation "io.sentry:sentry-compose-android" // Jetpack Compose support
// implementation "io.sentry:sentry-android-navigation" // Jetpack Navigation
// implementation "io.sentry:sentry-okhttp" // OkHttp interceptor
// implementation "io.sentry:sentry-android-sqlite" // Room/SQLite tracing
// implementation "io.sentry:sentry-kotlin-extensions" // Coroutine context propagation
}
sentry {
org = "YOUR_ORG_SLUG"
projectName = "YOUR_PROJECT_SLUG"
authToken = System.getenv("SENTRY_AUTH_TOKEN")
// Enable auto-instrumentation via bytecode transforms (no source changes needed)
tracingInstrumentation {
enabled = true
features = [InstrumentationFeature.DATABASE, InstrumentationFeature.FILE_IO,
InstrumentationFeature.OKHTTP, InstrumentationFeature.COMPOSE]
}
// Upload ProGuard mapping and source context on release
autoUploadProguardMapping = true
includeSourceContext = true
}
Kotlin DSL(app/build.gradle.kts):
plugins {
id("com.android.application")
id("io.sentry.android.gradle")
}
dependencies {
implementation(platform("io.sentry:sentry-bom:8.33.0"))
implementation("io.sentry:sentry-android")
// Optional integrations:
// implementation("io.sentry:sentry-android-timber")
// implementation("io.sentry:sentry-android-fragment")
// implementation("io.sentry:sentry-compose-android")
// implementation("io.sentry:sentry-android-navigation")
// implementation("io.sentry:sentry-okhttp")
// implementation("io.sentry:sentry-android-sqlite")
// implementation("io.sentry:sentry-kotlin-extensions")
}
sentry {
org = "YOUR_ORG_SLUG"
projectName = "YOUR_PROJECT_SLUG"
authToken = System.getenv("SENTRY_AUTH_TOKEN")
tracingInstrumentation {
enabled = true
features = setOf(
InstrumentationFeature.DATABASE,
InstrumentationFeature.FILE_IO,
InstrumentationFeature.OKHTTP,
InstrumentationFeature.COMPOSE,
)
}
autoUploadProguardMapping = true
includeSourceContext = true
}
手順 3 — Application クラスで Sentry を初期化する
Application のサブクラスがない場合は、作成します。
// MyApplication.kt
import android.app.Application
import io.sentry.SentryLevel
import io.sentry.android.core.SentryAndroid
import io.sentry.android.replay.SentryReplayOptions
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
SentryAndroid.init(this) { options ->
options.dsn = "YOUR_SENTRY_DSN"
// Tracing — lower to 0.1–0.2 in high-traffic production
options.tracesSampleRate = 1.0
// Profiling — use continuous UI profiling (recommended, SDK ≥ 8.7.0)
options.profileSessionSampleRate = 1.0
// Session Replay (API 26+ only; silent no-op below API 26)
options.sessionReplay.sessionSampleRate = 0.1 // 10% of all sessions
options.sessionReplay.onErrorSampleRate = 1.0 // 100% on error
// Structured logging
options.logs.isEnabled = true
// Environment
options.environment = BuildConfig.BUILD_TYPE
}
}
}
Java の場合:
// MyApplication.java
import android.app.Application;
import io.sentry.android.core.SentryAndroid;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SentryAndroid.init(this, options -> {
options.setDsn("YOUR_SENTRY_DSN");
options.setTracesSampleRate(1.0);
options.setProfileSessionSampleRate(1.0);
options.getSessionReplay().setSessionSampleRate(0.1);
options.getSessionReplay().setOnErrorSampleRate(1.0);
options.getLogs().setEnabled(true);
options.setEnvironment(BuildConfig.BUILD_TYPE);
});
}
}
手順 4 — AndroidManifest.xml に Application を登録する
<application
android:name=".MyApplication"
... >
パス B:手動セットアップ(Gradle プラグインなし)
Gradle プラグインを使用できない場合(例:標準以外のビルド構成)はこちらを使用します。
手順 1 — app/build.gradle[.kts] に依存関係を追加する
dependencies {
implementation(platform("io.sentry:sentry-bom:8.33.0"))
implementation("io.sentry:sentry-android")
}
手順 2 — Application クラスで初期化する(パス A の手順 3 と同じ)
手順 3 — ProGuard/R8 を手動で設定する
Sentry SDK には ProGuard ルールファイルが自動で含まれています。マッピングを手動でアップロードするには、sentry-cli をインストールし、CI に次の内容を追加します。
sentry-cli releases files "[email protected]+42" upload-proguard \
--org YOUR_ORG --project YOUR_PROJECT \
app/build/outputs/mapping/release/mapping.txt
クイックリファレンス:機能をすべて備えた SentryAndroid.init()
SentryAndroid.init(this) { options ->
options.dsn = "YOUR_SENTRY_DSN"
// Environment and release
options.environment = BuildConfig.BUILD_TYPE // "debug", "release", etc.
options.release = "${BuildConfig.APPLICATION_ID}@${BuildConfig.VERSION_NAME}+${BuildConfig.VERSION_CODE}"
// Tracing — sample 100% in dev, lower to 10–20% in production
options.tracesSampleRate = 1.0
// Continuous UI profiling (recommended over transaction-based)
options.profileSessionSampleRate = 1.0
// Session Replay (API 26+; silent no-op on API 21–25)
options.sessionReplay.sessionSampleRate = 0.1
options.sessionReplay.onErrorSampleRate = 1.0
options.sessionReplay.maskAllText = true // mask text for privacy
options.sessionReplay.maskAllImages = true // mask images for privacy
// Structured logging
options.logs.isEnabled = true
// Error enrichment
options.isAttachScreenshot = true // capture screenshot on error
options.isAttachViewHierarchy = true // attach view hierarchy JSON
// ANR detection (5s default; watchdog + ApplicationExitInfo API 30+)
options.isAnrEnabled = true
// NDK native crash handling (enabled by default)
options.isEnableNdk = true
// Send PII: IP address, user data
options.sendDefaultPii = true
// Trace propagation (backend distributed tracing)
options.tracePropagationTargets = listOf("api.yourapp.com", ".*\\.yourapp\\.com")
// Verbose logging — disable in production
options.isDebug = BuildConfig.DEBUG
}
合意済みの各機能について
機能を1つずつ確認します。それぞれのリファレンスファイルを読み込み、記載された手順に従ってから、次に進む前に検証してください。
| 機能 | リファレンス | 読み込むタイミング |
|---|---|---|
| エラーモニタリング | ${SKILL_ROOT}/references/error-monitoring.md | 常時(基本設定) |
| トレーシングとパフォーマンス | ${SKILL_ROOT}/references/tracing.md | Android の場合は常時(Activity のライフサイクル、ネットワーク) |
| プロファイリング | ${SKILL_ROOT}/references/profiling.md | パフォーマンスが重要な本番アプリ |
| セッションリプレイ | ${SKILL_ROOT}/references/session-replay.md | ユーザー向けアプリ(API 26+) |
| ロギング | ${SKILL_ROOT}/references/logging.md | 構造化ロギング/ログとトレースの相関 |
| メトリクス | ${SKILL_ROOT}/references/metrics.md | カスタムメトリクスの追跡(SDK ≥ 8.30.0) |
| Cron | ${SKILL_ROOT}/references/crons.md | スケジュールされたジョブ、WorkManager のチェックイン |
| インテグレーションリファレンス | ${SKILL_ROOT}/references/integrations.md | 組み込み、オプション、Gradle バイトコードのインテグレーション |
各機能について、Read ${SKILL_ROOT}/references/<feature>.md を実行し、手順に正確に従って、動作することを確認してください。
設定リファレンス
コア SentryOptions(SentryAndroid.init 経由)
| オプション | 型 | デフォルト | 用途 |
|---|---|---|---|
dsn | String | — | 必須。 プロジェクトの DSN。空の場合、SDK は通知なしに無効になります |
environment | String | — | 例:"production"、"staging"。環境変数:SENTRY_ENVIRONMENT |
release | String | — | アプリのバージョン。例:"[email protected]+42"。環境変数:SENTRY_RELEASE |
dist | String | — | ビルドバリアント/配布識別子 |
sendDefaultPii | Boolean | false | PII(IP アドレス、ユーザーデータ)を含めます |
sampleRate | Double | 1.0 | エラーイベントのサンプリング(0.0–1.0) |
maxBreadcrumbs | Int | 100 | イベントごとのパンくずリストの最大数 |
isAttachStacktrace | Boolean | true | メッセージイベントにスタックトレースを自動添付します |
isAttachScreenshot | Boolean | false | エラー発生時にスクリーンショットをキャプチャします |
isAttachViewHierarchy | Boolean | false | JSON 形式のビュー階層を添付ファイルとして追加します |
isDebug | Boolean | false | 詳細な SDK 出力。本番環境では使用しないでください |
isEnabled | Boolean | true | SDK 全体を無効にします(例:テスト用) |
beforeSend | SentryOptions.BeforeSendCallback | — | 送信前にエラーイベントを変更または破棄します |
beforeBreadcrumb | SentryOptions.BeforeBreadcrumbCallback | — | 保存前にパンくずリストをフィルタリングします |
トレーシングオプション
| オプション | 型 | デフォルト | 用途 |
|---|---|---|---|
tracesSampleRate | Double | 0.0 | トランザクションのサンプリングレート(0–1)。開発環境では 1.0 を使用してください |
tracesSampler | TracesSamplerCallback | — | トランザクションごとのサンプリング。tracesSampleRate を上書きします |
tracePropagationTargets | List<String> | [".*"] | sentry-trace および baggage ヘッダーを受信するホスト/URL |
isEnableAutoActivityLifecycleTracing | Boolean | true | Activity のライフサイクルを自動計装します |
isEnableTimeToFullDisplayTracing | Boolean | false | TTFD スパン(Sentry.reportFullyDisplayed() が必要) |
isEnableUserInteractionTracing | Boolean | false | ユーザー操作をトランザクションとして自動計装します |
プロファイリングオプション
| オプション | 型 | デフォルト | 用途 |
|---|---|---|---|
profileSessionSampleRate | Double | 0.0 | 継続的プロファイリングのサンプリングレート(SDK ≥ 8.7.0、API 22+) |
profilesSampleRate | Double | 0.0 | 従来のトランザクションプロファイリングレート(継続的プロファイリングとは併用不可) |
isProfilingStartOnAppStart | Boolean | false | アプリ起動時にプロファイリングセッションを自動開始します |
ANR オプション
| オプション | 型 | デフォルト | 目的 |
|---|---|---|---|
isAnrEnabled | Boolean | true | ANR ウォッチドッグスレッドを有効にします |
anrTimeoutIntervalMillis | Long | 5000 | ANR の報告までのミリ秒数です |
isAnrReportInDebug | Boolean | false | デバッグビルドで ANR を報告します(デバッガー使用時はログが多くなります) |
NDK オプション
| オプション | 型 | デフォルト | 目的 |
|---|---|---|---|
isEnableNdk | Boolean | true | sentry-native によるネイティブクラッシュのキャプチャを有効にします |
isEnableScopeSync | Boolean | true | Java のスコープ(ユーザー、タグ)を NDK レイヤーに同期します |
isEnableTombstoneFetchJob | Boolean | true | エンリッチメント用に NDK のトゥームストーンファイルを取得します |
セッションリプレイのオプション(options.sessionReplay)
| オプション | 型 | デフォルト | 目的 |
|---|---|---|---|
sessionSampleRate | Double | 0.0 | 記録する全セッションの割合です |
onErrorSampleRate | Double | 0.0 | 記録するエラーセッションの割合です |
maskAllText | Boolean | true | リプレイ内のすべてのテキストをマスクします |
maskAllImages | Boolean | true | リプレイ内のすべての画像をマスクします |
quality | SentryReplayQuality | MEDIUM | 動画の品質です:LOW、MEDIUM、HIGH |
ロギングオプション(options.logs)
| オプション | 型 | デフォルト | 目的 |
|---|---|---|---|
isEnabled | Boolean | false | Sentry.logger() API を有効にします(SDK ≥ 8.12.0) |
setBeforeSend | BeforeSendLogCallback | — | 送信前にログエントリーをフィルタリング/変更します |
環境変数
| 変数 | 目的 | 備考 |
|---|---|---|
SENTRY_DSN | データソース名 | CI で設定します。SDK は初期化時に環境から読み取ります |
SENTRY_AUTH_TOKEN | ProGuard マッピングとソースコンテキストをアップロードします | コミットしないでください。CI/CD のシークレットを使用してください |
SENTRY_ORG | 組織のスラッグ | Gradle プラグインの sentry.org で使用されます |
SENTRY_PROJECT | プロジェクトのスラッグ | Gradle プラグインの sentry.projectName で使用されます |
SENTRY_RELEASE | リリース識別子 | options.release がフォールバックとして使われます |
SENTRY_ENVIRONMENT | 環境名 | options.environment がフォールバックとして使われます |
DSN や多くのオプションは、AndroidManifest.xml のメタデータからも設定できます。
<application>
<meta-data android:name="io.sentry.dsn" android:value="YOUR_DSN" />
<meta-data android:name="io.sentry.traces-sample-rate" android:value="1.0" />
<meta-data android:name="io.sentry.environment" android:value="production" />
<meta-data android:name="io.sentry.anr.enable" android:value="true" />
<meta-data android:name="io.sentry.attach-screenshot" android:value="true" />
<meta-data android:name="io.sentry.attach-view-hierarchy" android:value="true" />
</application>
⚠️ マニフェストのメタデータは便利な代替手段ですが、すべてのオプションには対応していません(session replay、profiling、hooks などの複雑な設定には、
SentryAndroid.init()を使用してください)。
検証
セットアップ後、Sentry がイベントを受信していることを確認します。
エラーキャプチャのテスト:
// In an Activity or Fragment
try {
throw RuntimeException("Sentry Android SDK test")
} catch (e: Exception) {
Sentry.captureException(e)
}
トレーシングのテスト:
val transaction = Sentry.startTransaction("test-task", "task")
val span = transaction.startChild("test-span", "description")
span.finish()
transaction.finish()
構造化ログのテスト(SDK ≥ 8.12.0):
Sentry.logger().info("Sentry logging test")
Sentry.logger().error("Error log test", Exception("test error"))
Sentry ダッシュボードを確認します:
- Issues → テスト例外が数秒以内に表示されます
- Traces → 子スパンを含む
test-taskトランザクションを探します - Replays → アプリを操作した後、セッション記録が表示されます(API 26 以上が必要です)
- Logs → Logs タブに構造化ログエントリーが表示されます
何も表示されない場合:
options.isDebug = trueを設定します。SDK のログが Logcat に出力されます- DSN が正しく、Sentry プロジェクトと一致していることを確認します
ApplicationクラスがAndroidManifest.xmlのandroid:nameとして登録されていることを確認します- デバイス/エミュレーターがインターネットに接続されていることを確認します
- NDK クラッシュの場合、
isEnableNdk = true(デフォルト)であり、NDK サポートを有効にしてビルドされていることを確認します
フェーズ 4:相互リンク
Android のセットアップが完了したら、Sentry のカバレッジが不足しているバックエンドまたは Web フロントエンドがないか確認します。
# Adjacent backend directories
ls ../backend ../server ../api 2>/dev/null
cat ../go.mod 2>/dev/null | head -3
cat ../requirements.txt ../pyproject.toml 2>/dev/null | head -5
cat ../Gemfile 2>/dev/null | head -3
ls ../backend/package.json ../server/package.json 2>/dev/null
# iOS counterpart app
ls ../ios ../YourApp-iOS 2>/dev/null
find .. -maxdepth 3 -name "*.xcodeproj" 2>/dev/null | head -3
Sentry が導入されていないバックエンドまたは関連プラットフォームが存在する場合、対応するスキルを提案します。
| 検出対象 | 提案するスキル |
|---|---|
Go バックエンド(go.mod) | sentry-go-sdk |
Python バックエンド(requirements.txt、pyproject.toml) | sentry-python-sdk |
Ruby バックエンド(Gemfile) | sentry-ruby-sdk |
| Node.js バックエンド | @sentry/node — docs.sentry.io/platforms/javascript/guides/express/ を参照 |
iOS アプリ(.xcodeproj) | sentry-cocoa-sdk |
React Native(react-native を含む package.json) | sentry-react-native-sdk |
| React / Next.js Web | sentry-react-sdk または sentry-nextjs-sdk |
分散トレーシングのセットアップ — バックエンドのスキルが追加されている場合、API にトレースコンテキストを伝播するよう Android で tracePropagationTargets を設定します。
options.tracePropagationTargets = listOf(
"api.yourapp.com",
".*\\.yourapp\\.com"
)
これにより、Sentry のウォーターフォールビューでモバイルのトランザクションとバックエンドのトレースがリンクされます。
トラブルシューティング
| 問題 | 解決方法 |
|---|---|
| Sentry にイベントが表示されない | isDebug = true に設定し、Logcat で SDK のエラーを確認します。DSN が正しく、プロジェクトと一致していることを確認します |
SentryAndroid.init() が呼び出されない | AndroidManifest.xml に android:name=".MyApplication" が設定されていることを確認します。Application クラスが抽象クラスではないことを確認します |
| Gradle プラグインが見つからない | まずプロジェクトレベルの build.gradle.kts にプラグインを追加し、その後 apply false を設定します。バージョンが 6.1.0 であることを確認します |
| ProGuard マッピングがアップロードされない | SENTRY_AUTH_TOKEN 環境変数を設定します。sentry {} ブロックで autoUploadProguardMapping = true になっていることを確認します |
| NDK クラッシュが捕捉されない | isEnableNdk = true(デフォルト)であることを確認します。プロジェクトの android.ndkVersion で NDK が設定されていることを確認します |
| デバッガーで ANR が報告される | isAnrReportInDebug = false(デフォルト)に設定します。デバッガーがスレッドを一時停止すると、ANR ウォッチドッグが作動します |
| セッションリプレイが記録されない | API 26 以降が必要です。sessionSampleRate > 0 または onErrorSampleRate > 0 であることを確認し、Logcat でリプレイのエラーを確認します |
| セッションリプレイの画面が空白になる | デフォルトの PixelCopy にはハードウェアアクセラレーションが必要です。SentryReplayOptions.screenshotQuality = CANVAS を試してください |
| リプレイのマスキング位置がずれる | translationX/Y または clipToPadding=false を設定したビューでは、マスクの位置がずれることがあります。github.com/getsentry/sentry-java に報告してください |
beforeSend が実行されない | beforeSend がインターセプトするのは、管理対象(Java/Kotlin)のイベントのみです。NDK ネイティブクラッシュはこれを経由しません |
| OkHttp のスパンが表示されない | SentryOkHttpInterceptor を OkHttpClient に追加するか、Gradle プラグインの OKHTTP バイトコード計測を使用します |
| スパンがトランザクションに紐付かない | トランザクションの開始時に TransactionOptions().setBindToScope(true) が設定されていることを確認します。子スパンはスコープのルートを参照します |
| トレーシングが記録されない | tracesSampleRate > 0 であることを確認します。Activity の計測には isEnableAutoActivityLifecycleTracing = true(デフォルト)が必要です |
| 継続的プロファイリングが動作しない | SDK ≥ 8.7.0 が必要です。API 22 以降が必要です。profileSessionSampleRate > 0 に設定し、profilesSampleRate も設定しないでください |
| 両方のプロファイリングモードが設定されている | profilesSampleRate と profileSessionSampleRate は相互排他的です。どちらか一方のみを使用してください |
| TTFD スパンが見つからない | isEnableTimeToFullDisplayTracing = true に設定し、画面の準備ができたときに Sentry.reportFullyDisplayed() を呼び出します |
| Kotlin コルーチンのスコープが失われる | sentry-kotlin-extensions 依存関係を追加します。Sentry.cloneMainContext() を使用してトレースコンテキストを伝播します |
| リリースビルドのスタックトレースが判読できない | ProGuard マッピングがアップロードされていません。Gradle プラグインの autoUploadProguardMapping = true と、認証トークンが設定されていることを確認します |
| Sentry にソースコンテキストが表示されない | sentry {} ブロックで includeSourceContext = true を有効にします(Gradle プラグインが必要です) |
| BOM のバージョンが競合する | implementation(platform("io.sentry:sentry-bom:8.33.0")) を使用し、他のすべての io.sentry:* エントリーからバージョンを省略します |
| バージョンカタログのエイリアスが解決されない | gradle/libs.versions.toml を編集した後、Gradle を同期します。エイリアス名には TOML では -、ビルドファイルでは . を使用します(例:sentry-android → libs.sentry.android) |
| カタログに Sentry のバージョンが重複している | 既存の [versions] sentry = "..." エントリーを再利用します。キーを追加せず、カタログを使用している場合は build.gradle にバージョンを直接記述しないでください |
SENTRY_AUTH_TOKEN が公開される | 認証トークンはビルド時にのみ使用します。SentryAndroid.init() に渡したり、APK に埋め込んだりしないでください |