LoginSignup
4
0

開発者による非機能要件の実現を効率的にしよう

Last updated at Posted at 2023-10-31

概要

どの企業においてもデジタルがビジネスの中核になりつつありますが、ビジネスニーズにスピーディ応えつつ、システムの問題によってビジネスの成長を阻害することを避けるためには、高い品質のコードを素早くリリースしていくことが求められています。

そのためにはソフトウェア開発ライフサイクルの早い段階でバグやパフォーマンスなどの品質問題を刈り取ること、および問題が発生してしまった時に早急に修正して解決できるようにすることが重要になってきます。つまりは、開発者自身がバグやパフォーマンスの問題にすぐに気付けるような環境を作り上げていく必要があります。

オブザーバビリティプラットフォームであるNew Relicは、システム全体を観測し問題の発見と解決の迅速化を可能にする機能群を提供していますが、その中に開発者向けの機能の一つとして CodeStream というものがあります。

CodeStreamは、開発者が利用しているVisual StudioやIntelliJなどの統合開発環境(IDE)のプラグインとして動作し、開発者がコードを書きながらそのコードレベルで品質(エラー率やレスポンスタイムなど)を把握することを可能にし、上述の通り、ライフサイクル上流での品質刈り取りや問題発生時の状況把握の迅速化を実現するものになります。

本記事では、Javaのサンプルアプリを使ってCodeStreamでどのような情報が見えるか試したいと思います。

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

前提

New Relic のアカウント作成

CodeStreamを動作させる場合、New Relicのアカウントが必要になります。まだNew Relicのアカウントをお持ち出ない方は、サインアップフォームからフリーのアカウントを作成してくダサい。

IDEへのCodeStreamのインストール

IDEのプラグインとして動作するCodeStreamを導入しておきます。例えば、Visual Studio CodeでCodeStreamと検索すると以下の画像のようなプラグインが見えるはずです。本記事では導入手順は割愛しますので公式ドキュメントを参考にインストールしてください。

Install-CodeStream.png

アプリの用意

今回はサンプルアプリケーションとしてJavaのspring-petclinicを利用してみます。

git clone https://github.com/spring-projects/spring-petclinic.git

APMエージェントの設定

IDEのプラグインとしてインストールしたCodeStreamに、アプリケーションのエラーやレイテンシーなどの情報を連携するために、アプリケーションにAPMエージェントを導入します。

APMエージェント導入手順の確認

エージェントの導入手順は言語ごとに異なりますが、New Relicの画面上 [+ Add Data] メニューから対象言語を選ぶだけで簡単に確認できます。

Javaエージェント.png

pomの設定

参考までにAPMエージェントを起動するためのMavenの設定も記します。もちろんMaven以外の方法で導入しても構いません。

<dependency>
    <groupId>com.newrelic.agent.java</groupId>
    <artifactId>newrelic-java</artifactId>
    <version>8.7.0</version> <!-- 適宜最新に合わせる -->
    <scope>provided</scope>
    <type>zip</type>
</dependency>
<!-- New Relicのエージェントを取得して/targetに配置 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <execution>
        <id>unpack-newrelic</id>
        <phase>package</phase>
        <goals>
            <goal>unpack-dependencies</goal>
        </goals>
        <configuration>
            <includeGroupIds>com.newrelic.agent.java</includeGroupIds>
            <includeArtifactIds>newrelic-java</includeArtifactIds>
            <!-- you can optionally exclude files -->
            <!-- <excludes>**/newrelic.yml</excludes> -->
            <overWriteReleases>false</overWriteReleases>
            <overWriteSnapshots>false</overWriteSnapshots>
            <overWriteIfNewer>true</overWriteIfNewer>
            <outputDirectory>${project.build.directory}</outputDirectory>
        </configuration>
        </execution>
    </executions>
</plugin>

アプリケーション、エージェントを起動

アプリケーションを起動します。正しく設定されていればエージェントも合わせて起動され、エラーやパフォーマンスに関するデータが収集されます。

java -javaagent:target/newrelic/newrelic.jar -jar target/*.jar

無事アプリケーションが起動しました。色々な画面にアクセスしてみます。

petclinic-home.png

APMのデータを確認

アプリケーションが起動するとすぐにAPMでもパフォーマンスデータが確認できます。

apm.png

IDEでのパフォーマンスデータの確認

いよいよ本題です。IDEにプラグインとして導入したCodeStreamでエラーやパフォーマンスデータがみられるかを確認してみます。今回は、Visual Studio Codeを利用します。
CodeStream側のアカウントが作成されていない場合は以下のような画面が表示されますが、必要事項を記入してログインできるようにします。

codestream-signup.png

アプリケーションの品質指標を俯瞰

CodeStreamのペインでは、アプリケーションの各種品質指標を俯瞰できます。例えば、アプリケーション全体やメソッド単位のエラーレートやレスポンスタイム、スループットなどのゴールデンメトリクスや、発生しているエラーの情報、検出された脆弱性などです。

これらが開発環境で把握できるので、開発者が対応すべき問題を即座に把握していくことが可能になります。

codestream-summary.png

コードレベル メトリクスの確認

また、各コードの中のメソッド単位でレスポンスやエラーレートがインライン表示されます。そしてクリックするとその詳細情報を時系列で確認することができます。これにより、例えば機能テストや負荷テストの際に品質影響のある問題コードを即座に特定することが可能です。

codeleve-metrics.png

エラーの詳細確認

バグ等が起因でアプリケーションにエラーが発生している場合は、エラー発生時のスタックトレースやメッセージも確認できます。スタックトレースはクリッカブルになっており、該当のメソッド名をクリックすると対応するソースコードを自動的に画面上に表示してくれます。

開発中の環境と、テストや本番で動いている環境のコードのバージョンが異なっていても、エラーが発生した環境で動いているバージョンに対応したソースコードを自動的に表示してくれるため、いちいち別環境をクローンする必要などもありません。
なお、コードのバージョンを紐づけるにはエージェントの環境変数(NEW_RELIC_METADATA_COMMIT)でコミットハッシュを渡す必要があります。詳細は公式ドキュメントを参照してください。

codestream-error.png

ちなみに、該当のエラーのソースコードはIDE上からだけでなく、New Relicの画面上からもシームレスにジャンプすることが可能です。APMのエラー画面にて[Open in IDE] ボタンを押下するとIDE上で該当のエラーとソースコードを簡単に確認することができます。

open-in-ide.png

まとめ

本記事ではNew RelicのCodeStreamというIDEのプラグインを利用することで、開発者が普段使う時間の長い統合開発環境にてアプリケーションの品質指標を即座に確認できることを試してみました。

本番環境に限らず、ステージング環境や性能評価環境、テスト環境などにAPMを導入し、開発者がライフサイクルの早い段階から問題に気づいて修正できる状況を作り出しておくことにより、後工程で問題が発覚して手戻りが発生した場合の工数肥大化を防いだり、問題の把握と修正のスピードアップを実現することが可能になります。

New Relic APMと同様にCodeStreamも多様なアプリケーションの言語に対応していますので是非お試しください。

余談

ちなみに、執筆時点(2023年10月31日)でPublic Preview中である、生成AIによるオブザーバビリティアシスタントであるNew Relic GrokもCodeStreamに組み込まれ、エラーの原因分析やコードの修正、テストケースの作成などを支援してくれるようになっています。こちらも是非ご利用ください。

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

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

4
0
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
4
0