Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How to get and use free PVS-Studio license. Part 3: working with report and warnings

2025年10月03日に「Dev.to」が公開したITニュース「How to get and use free PVS-Studio license. Part 3: working with report and warnings」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

PVS-Studioはコードのバグや脆弱性を検出する静的解析ツールだ。本記事では無料利用法として、解析レポートで警告を確認し、エラー内容を詳しく分析する方法を解説。誤検知の対処法や、大量の警告を効率的に管理するインターフェースの活用法も学ぶ。

ITニュース解説

PVS-Studioは、C、C++、C#、Javaといったプログラミング言語で書かれたコードに潜む、潜在的なバグやセキュリティ上の弱点を見つけ出すツールである。これはWindows、Linux、macOSで動作し、開発統合環境(IDE)のプラグインとして組み込むなど、様々な方法で利用できる。企業向けには有料で提供されているが、この記事シリーズでは無料ライセンスを使ってPVS-Studioを利用する方法を解説してきた。本記事はシリーズの第3部として、静的アナライザの主要な工程である「レポートの確認」と「エラーの分析」に焦点を当てて説明する。無料ライセンスの取得や初期設定については、シリーズの第1部と第2部で詳しく解説しているので、そちらも参照してほしい。

前回の記事で、オープンソースプロジェクト「osu!」のコード分析をPVS-Studioで行い、レポートを出力した。ツールの主要な仕事はここで終わりだと思われがちだが、ここからが最も重要な段階だ。アナライザが発見した問題をどう解釈し、どう修正するかは開発者の責任となる。アナライザはあくまで補助であり、主役は開発者自身なのだ。解析完了後、PVS-Studioがプロジェクトにどれだけ価値があるかを素早く評価するには、レポートインターフェースの「Best」機能が非常に役立つ。このボタンをクリックすると、アナライザが特に興味深いと判断した10個の警告メッセージだけが表示される。

この「Best」機能で表示される警告には、それぞれ「診断ルール番号」、具体的な「アナライザメッセージ」、そして「エラーが発生したファイル名」と「行番号」が示されている。これらの情報が、問題の原因を特定する上で重要な手がかりとなる。

では、実際に警告メッセージを詳しく見ていこう。「Best」に選ばれた警告の中から最初のメッセージを選択すると、潜在的なエラーがあるファイルが開き、疑わしいコードの箇所がハイライト表示される。例として、V3123という診断ルールによる警告が挙げられている。これは??(ヌル合体演算子)の優先順位が他の演算子よりも低いことが原因で、開発者の意図しない計算結果になる可能性があるという指摘だ。このエラーコードをクリックすると、PVS-Studioの診断ルールに関する詳細なドキュメントが、使用中の開発環境(IDE)内で直接開く。ドキュメントには問題の説明、エラーの具体的な例、そしてその修正方法が丁寧に書かれているため、非常に参考になる。

osu!プロジェクトの実際のコード例では、BASE_STARS + modRateAdjust?.SpeedChange.Value ?? 0という部分に警告が出ている。開発者はBASE_STARSという定数に、modRateAdjust?.SpeedChange.Value(もしmodRateAdjustがヌルでなければその値、ヌルなら0)を加算することを期待していると推測される。しかし、??演算子の優先順位が低いと、BASE_STARS + modRateAdjust?.SpeedChange.Valueの計算結果がヌルになった場合、式全体が0になってしまう可能性がある。コードの他の部分を見るとBASE_STARSが定数であることがわかるため、modRateAdjust?.SpeedChange.Valueがヌルの場合にBASE_STARSの値まで0にすることは、通常は意図しないだろう。このように、アナライザの指摘だけでなく、その周辺のコードの文脈も確認することが、エラーの真の原因を特定する上で非常に重要となる。プロジェクトに精通した開発者であれば、このような問題の修正はより簡単だろう。

しかし、アナライザの指摘が常に正しいとは限らない。時には「誤検知(False Positive)」、つまり実際には問題のないコードに対して警告を発することもある。このような場合、開発者はアナライザの指摘が本当に問題なのかを検証する必要がある。別のV3123警告の例では、GroupInterval / Previous?.GroupInterval ?? 1.0dというコードに警告が出ている。このコードには「Previousがない場合、この値は1になる」というコメントが付随している。このコメントから、開発者はPrevious?.GroupIntervalがヌルであった場合に、式全体の結果が1.0dになることを意図していたと理解できる。つまり、このケースではアナライザの指摘は誤検知であり、コードに問題はないのだ。

誤検知は静的解析技術において完全に避けられない部分であり、技術の特性の一つである。重要なのは、誤検知と真の警告を見分け、適切に対処することだ。PVS-Studioでは、誤検知された警告を簡単に抑制できる。警告メッセージを右クリックし、メニューから「falseとしてマーク」を選択すれば、その警告はレポートから隠され、以降は表示されなくなる。これにより、本当に修正すべき警告に集中できる。抑制された警告も、後から設定を変更することで再び表示させることが可能だ。

「Best」の10個の警告を全て確認し、修正や誤検知の抑制を終えたら、次にどう進むべきだろうか。小規模なプロジェクトや新しく始まったプロジェクトであれば、残りの警告も引き続き確認していくのが良い。しかし、大規模で歴史の長いプロジェクトの場合、数えきれないほどの警告が表示されることがある。このような状況で全ての警告に対処するのは現実的ではない。

PVS-Studioには、このようなケースのために「一括抑制」という特別なメカニズムが用意されている。この機能を使うと、既存の全ての警告を一度に隠すことができる。これにより、アナライザは新しく書かれたコードや修正されたコードに対してのみ警告を発するようになるため、過去の負債に圧倒されることなく、今日からコード品質の向上に取り組むことが可能だ。一括抑制された警告も、完全に失われるわけではなく、必要に応じて後から再検討できる。

PVS-Studioのレポートインターフェースには、さらに多くの便利な機能が備わっている。「Best」機能による警告の絞り込みに加え、アナライザのメッセージは「High」「Medium」「Low」の3段階の「確実性レベル」で分類されている。確実性レベルが高いほど、その警告が本物のエラーである可能性が高い。通常は「Low」レベルの警告を無効にすることで、より重要な問題に集中できる。また、最適化ルールやセキュリティルールなど、特定の診断グループを直接有効/無効に切り替えることもできる。特定の診断ルール番号やファイル名でメッセージをフィルタリングする「クイックフィルタリング」機能を使えば、大量の警告の中から目的のものを素早く見つけ出すことができるだろう。

気になる警告を「お気に入り」としてマークする機能もあり、後からそれらの警告だけを絞り込んで表示することが可能だ。他にも、警告を誤検知としてマークする、特定のディレクトリのファイルをチェックから除外する、レポート内の全てのメッセージを抑制する、抑制されたメッセージを表示するといった、多数の便利な機能が用意されている。

個々のアナライザメッセージを右クリックすると表示されるコンテキストメニューからは、警告の誤検知マークの追加や解除、メッセージの抑制、同じ診断ルール番号を持つメッセージの一括非表示、ファイルやディレクトリからの警告除外、ID、プロジェクト、SAST、CWEといった追加情報の表示、フルファイルパスの表示、メッセージのコピー、お気に入りマークの追加、TODOコメントの追加、IDによる別メッセージへの移動など、多岐にわたる操作を行うことができる。PVS-StudioのVisual Studioプラグインに関する詳細な情報やレポート操作については、公式ドキュメントを参照することを推奨する。

これまで3回にわたる記事を通して、PVS-Studioという静的アナライザを無料ライセンスで利用するための基本的な機能や、レポートの確認、エラー分析、誤検知への対処、大規模プロジェクトでの活用法まで、システムエンジニアを目指す初心者が知っておくべき内容を解説してきた。この一連の解説が、皆さんの開発学習やコード品質向上の一助となれば幸いだ。

関連コンテンツ

関連IT用語

関連ITニュース