はじめに
先日protocのpluginについて紹介したのですが、それに関連してデバッグについて書こうと思います。
また私は普段Riderを利用しているのでRider前提です。
概要
protocのpluginを作成するにあたって、デバッグしたいことはよくあると思います。ただprotocで直接C#のプロジェクトを指定することはできず、必ずビルド済の実行バイナリを指定しなければなりません。(もしかしたら迂回方法があるのかもしれませんが、私は知らないです...)
また厄介なのが標準出力をしてしまうとうまく動作しないので、例えばエラー情報などをまとめたデバッグ用ファイルを毎回出力するみたいな対応をしたりもします。ただ教えていただいてかなり良かったのがOpenTelemetryを活用する方法です。
そして更に嬉しいことに、JetBrains製のOpenTelemetryプラグインがRider 2025.2から利用可能になりました。以下の画像は実際に利用している様子です。


かなり使い心地が良いので、この記事では詳しく使い方を紹介していきます。
使い方
plugin側の対応
NuGetパッケージの導入
まずは以下のNuGetパッケージを導入します。
- Microsoft.Extensions.Logging
- OpenTelemetry.Exporter.OpenTelemetryProtocol
$ dotnet add package Microsoft.Extensions.Logging $ dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
コードの対応
Loggingの使い方は以下のとおりです。
// Logging using var loggerFactory = LoggerFactory.Create(builder => { builder.AddOpenTelemetry(options => { options.IncludeFormattedMessage = true; // このあたりかなり自信がなく、一旦RiderのOTLPエンドポイントを指定(後ほど修正するかもです) // OTEL_EXPORTER_OTLP_ENDPOINT = http://localhost:17011 options.AddOtlpExporter(opt => { opt.Endpoint = new Uri(" http://localhost:17011"); }); }); }); var logger = loggerFactory.CreateLogger<Program>(); logger.LogError("This is a sample {LogType} log message.", "error");
TracingとMetricsについては下記にサンプルがあります。ただしTraceに関してはまだ可視化できるViewerはないようです。(Automatic architecture visualizationでは利用しているみたい)
opentelemetry-dotnet/docs/trace/getting-started-console/Program.cs at main · open-telemetry/opentelemetry-dotnet · GitHub
opentelemetry-dotnet/docs/metrics/getting-started-console/Program.cs at main · open-telemetry/opentelemetry-dotnet · GitHub
Rider側の対応
OpenTelemetryプラグインの有効化
Riderを立ち上げ、設定(setting) => プラグイン(plugin)からOpenTelemetryを探してインストール、再起動すればOKです。

実行する
実際にprotocを実行してみます。
$ dotnet publish -o ./publish $ protoc --plugin=protoc-gen-myplugin=./publish/CustomProtocPlugin --myplugin_out=./output ./sample.proto
Riderのサービスを見る
RiderのサービスにOpenTelemetryがあるはずです。

そこにLogs・Metricsが出ているはずです。また構造化ログにも対応していますし、ログからコードに移動(Navigate to Code)も可能です。

実行/デバッグ構成から実行する
またRiderからprotocを実行することもできます。
Riderの右上のある実行/デバッグ構成から構成の編集...を選択し、左上の新規構成の追加からネイティブ実行可能ファイルを選択して項目を埋めればいけます。

Zero-setup auto-instrumentationの箇所によると環境変数などを自動でセットアップとかしてくれるみたいです?ちょっとこのあたりちゃんと理解できていないので、後ほど修正します。
blog.jetbrains.com