>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Java

SonarQubeがコードベースの秩序保ちをどう支援するか、そして初心者が恐れる理由

Build Quality Gate Status AI Code Assurance

すべての開発者は、誰かのプルリクエストのレビューに何度も参加した経験があるはずです。うっかり忘れられたnullチェック、リソースリーク、コピペコードを見つけ出すのです。疲れますよね。人は疲弊しますし、重大な脆弱性を見逃したり、書式について議論してアーキテクチャの議論がおろそかになったりと、いいことがありません。

そこで静的解析の出番です。SonarSourceのプロジェクトであるSonarQubeは、この分野で長年にわたり主要な標準であり続けています。GitHubリポジトリは1万スター以上を獲得しており、世界中の何千ものチームのサーバーに導入されています。

このプロジェクトが内部でどのように動作するか、ローカルでどう実行するか、そしてREADMEでメンテナンス陣が新機能のプルリクエストを送らないよう明示的に求めている理由を 살펴みましょう。

SonarQubeできること

SonarQubeは、継続的なソースコード品質管理のためのサーバーアプリケーションです。アナライザーがコードベースをスキャンし、潜在的なバグ、セキュリティ脆弱性、重複コード、コードスメルを検出します。

作者たちの主要なアイデアは、Clean Codeの概念とQuality Gateメカニズムを中心に据えています。古いレガシーコードに何百万もの警告を 쏟ぎ込むのではなく、SonarQubeは新しいコードに焦点を当てます。タスクの一環として3つのファイルを変更すれば、パイプラインがその変更の品質を正確にチェックします。新しいコードが定義された品質基準(例えば、テストカバレッジが80%未満、または重大な脆弱性が発生した場合)を満たさない場合、ビルドは失敗します。

このツールは数十のプログラミング言語をサポートしています:Java、C#、C++、TypeScript、JavaScript、Python、Go、Kotlin、そしてその他多数。

システムの主な機能

このツールは、開発プロセスに統合されたときの実用的な課題に четыре つ対応します:

  1. 自動脆弱性検出(セキュリティホットスポットと脆弱性)。アナライザーはSQLインジェクション、安全でないデシリアライズ、ハードコードされたパスワードやトークンを検出します。疑わしい箇所は手動のセキュリティレビュー用にフラグが立てられます。
  2. 技術的負債とコードスメルの追跡。システムは、構造の悪いクラス、過度に複雑な関数、デッドコードを修正するのに必要な開発者の概算時間を推定します。
  3. コード重複とテストカバレッジの追跡。SonarQubeはカバージャー工具(JaCoCo、Coverage.py、lcovなど)からのレポートを解析し、カバレッジ率を新しいコード行数と関連付けます。
  4. 柔軟なルール設定(Quality Profiles)。各チームは重要サービスに対して厳格なチェックを有効にし、内部ユーティリティのルールを緩和できます。

プロジェクトリポジトリには、AI Code Assuranceバッジも表示されます。開発者はAI生成コード向けのルールを適応させており、典型的な幻覚や隠れたエラーをチェックしています。

リポジトリとビルドの構造

SonarQubeのソースコードを見ると、古典的なエンタープライズJavaプロジェクトであることがわかります。ローカルビルドにはJava 17とGitが必要です。

興味深い詳細として、Webインターフェースは別リポジトリ sonarqube-webapp に分離されています。標準的なバックエンドビルド中、完成したUIはMaven Centralから直接依存関係としてダウンロードされます。サーバー開発者は、変更がフロントエンドに影響しない限り、Node.jsに触れる必要はありません。

ローカルでのビルドと実行は、標準的なGradleコマンドで行います:

ビルドが完了すると、サーバーアーカイブは sonar-application/build/distributions/ フォルダーに配置されます。展開して、お使いのOS用の実行スクリプトを実行します:

インターフェースとバックエンドの両方に同時に変更を加える必要がある場合は、Web部分をクローンし、Yarnでビルドし、ビルダーへのビルドパスを渡す必要があります:

珍しいオープンソースのアプローチ

寄稿セクションで、作者たちは正直にコミュニティに警告しています:このプロジェクトは新機能のプルリクエストを必要としていません。

作成者たちはこれを率直に説明しています。SonarSourceには厳格な内部ロードマップと厳格なアーキテクチャ要件があります。外部の開発者は実質的にこれらの制約に適合できません。そのためメンテナンス陣は外部寄稿者からのタイポ修正と小さなcosmetic変更のみを受け入れ、新機能の提案はコミュニティフォーラムに誘導しています。

このような直接性は珍しいですが、大きなPRを送信したい開発者にとって много時間を節約できます。

実用的な使用シナリオ

チームが実際の業務でSonarQubeを実装する方法:

  • CI/CDパイプラインへの組み込み。スキャナーはGitLab CI、GitHub Actions、Jenkinsのビルド段階で実行されます。Quality Gateが失敗した場合、ブランチのマージは自動的にブロックされます。
  • レガシープロジェクトの整備。チームは古い技術的負債をベースラインとしてマークします。開発者は古いコードを書き換えるのに何ヶ月も費やす必要ありませんが、すべての新しいコミットは厳格な標準に従います。

誰が試してみるべきか

SonarQubeは成熟した、記念碑的なツールです。500行のペットプロジェクト用に自分のインスタンスをデプロイしても意味がありません:ローカルのリンターで十分です。

しかし、4人以上のチームで働き、複数の言語で書き、コードレビューからコードのクリーンネスに関する議論を排除したい場合は、SonarQubeのローカルまたはサーバーインスタンスを立ち上げることは優れた解決策になるでしょう。このツールはすぐにアーキテクチャ上の弱点を明らかにし、疑わしいコードが本番環境に混入することを防ぎます。

関連プロジェクト