Sentryでエラーをモダンに確認しよう！

## Sentryとは？
Sentryはエラーモニタリングツールになります！

アプリケーションのエラーや例外をリアルタイムで検出し、
詳細な情報を収集・表示するためのツールです。

## Sentryを導入するといいこと
Sentryを導入することで、以下の利点があります：

:::note info
### Sentryの利点
- リアルタイムなエラー検知：エラー発生後通知を受け取り、早期対応が可能
- エラーレポート可視化：スタックトレース等、エラーが発生した状況をすぐに把握可能
- 頻度やユーザー影響の確認：エラーの回数、どのユーザーに影響があったのかを確認することができ、優先度を決めやすくなります！
:::

## Sentryの導入方法(Spring Boot)
今回はSpring Bootのプロジェクトを例に、導入をしてみます。



### 1. Sentryの新規登録
下記からSentryの公式から新規登録をしてください！
個人開発レベルであれば、課金は不要かと個人的に思います。

https://sentry.io/signup/

#### 新規登録

公式ページにアクセスすると下記のような画面が表示されるので、
各種入力をしましょう。

![スクリーンショット 2024-11-09 17.37.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/7439c9a2-5d44-94a7-b200-b24cbee32be1.png)

#### Install
登録が終わったら早速「Install Sentry」からStartしましょう！

![スクリーンショット 2024-11-09 15.25.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/87cdc79d-70a9-2481-3467-130424813b75.png)

#### SDKを入れる
今回はJavaを例に説明していますが、色々SDKが用意されてます！

![スクリーンショット 2024-11-09 15.25.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/6c0b2962-f82c-a3df-09e7-3fde25816097.png)

### 2. 依存関係を追加
gradleとmavenで記載方法は異なりますが、
バージョンは導入時の内容に合わせてください！

#### mavenの場合

```pom.xml
<dependency>
    <groupId>io.sentry</groupId>
    <artifactId>sentry-spring-boot-starter-jakarta</artifactId>
    <version>6.19.1</version>
</dependency>
<dependency>
    <groupId>io.sentry</groupId>
    <artifactId>sentry-logback</artifactId>
    <version>6.19.1</version>
</dependency>

```

#### gradleの場合

```
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'io.sentry:sentry-spring-boot-starter-jakarta:6.19.1'
    implementation 'io.sentry:sentry-logback:6.19.1'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
```

### 3. SentryのDSNを設定
次にapplication.propertiesにSentryの
DSN（プロジェクトの識別子）を追加します!
```application.properties
# DSNはSentryを導入時に
sentry.dsn=https://<YOUR_SENTRY_DSN>@sentry.io/<PROJECT_ID>

# 環境を指定（production, stagingなど）
sentry.environment=development
```

:::note info
DSNを設定する必要がありますが、DSNの説明は以下になるので
こちらはご確認ください！

https://docs.sentry.io/concepts/key-terms/dsn-explainer/
:::

### 4. Springの方でエラーを発生させる
Springの方でSentryに意図的なエラーを発生させましょう！

```sampleController.java
@Controller
public class ErrorController {
    
    @GetMapping("/a")
    public String generateError() {
        try {
            throw new Exception("This is Test.");
        } catch (Exception e) {
            Sentry.captureException(e);
        }
    }
}
```

アプリケーションを起動し、
「/a」 にアクセスしてエラーがSentryに表示されるか確認します。
(「/a」は今思うと少し適当でしたが・・w)

### 5. エラーをSentryで見てみよう！

キターーーーーーー！

![スクリーンショット 2024-11-09 17.45.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/57e8ee44-c474-b6da-628c-578c7c526635.png)

少々見づらいので、拡大。
「This is Test.」のメッセージがしっかり送信されてますね！

![スクリーンショット 2024-11-09 17.46.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/547147dc-f911-8f3e-0ff1-1573494ae648.png)


## どんな情報が見れるの？

下記ページにアクセスしてみましょう。

![スクリーンショット 2024-11-09 17.46.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/547147dc-f911-8f3e-0ff1-1573494ae648.png)

### エラーが出た箇所

エラーレベルやエラーが出たURL等が出てますね！
後はGETメソッド等などの情報もありそうです。

![スクリーンショット 2024-11-09 17.52.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/34f7bc80-3514-6e99-82a3-80720681d20c.png)

### スタックトレース

スタックトレース等もみれます。

![スクリーンショット 2024-11-09 17.54.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/2e320b95-33e6-534e-9af9-06e59bbeea8d.png)

### 発生頻度

後はエラーの回数や頻度が分かります。
今回は手動で1度エラーを発生しただけですが、
- 優先度
- 頻度
- ユーザ数

まで画面から把握ができそうですね！

![スクリーンショット 2024-11-09 17.53.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/b0239d13-910d-44d5-2d3b-3e175fc9876a.png)



### Slack通知

左側メニューから、Settings > Integrations で
様々な連携ができることがわかります！

![スクリーンショット 2024-11-09 17.56.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/0a839fc8-0419-2da2-f2fd-af6fded81ae9.png)

:::note warn
※連携を行うにはteamPlan以上が必要です。
:::

通知はこちらの記事で詳しく確認できます！

https://zenn.dev/a_ichi1/articles/0ffcadd00de3e5

## 料金プラン

無課金ですと1人のみの使用で、単純なエラーや通知程度ならできそうです！
Slack等の通知や複数の開発者が使用できるには、「Team」プラン以上が必要みたいです。

- Team：1ヶ月26ドル
- Business：1ヶ月80ドル
- Enterprise：必要な機能だけ選択するプラン？(ご存知の方教えていただけると！)

![スクリーンショット 2024-11-09 18.01.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/8e4aebd6-71e7-20eb-ba29-f6047c850100.png)


## まとめ
構築お疲れ様でした！
今回はJavaを例にしましたが、他言語でも結構簡単に
エラーが見えるようになります。

情報も多いので、個人開発にも現場にも役に立てるかと
思います！