
# SonarQube から Aikido への移行

Aikidoは、セキュリティ検出、コード品質チェック、PRゲートを1つのワークフローにまとめることで、SonarQubeとSonarCloudからの移行を支援します。

このガイドを使って、SonarのワークフローをAikidoにどう対応づけるかを判断し、開発者に驚きを与えずに切り替えましょう。

## 移行パスを選ぶ

すべてのリポジトリに同じ移行パスが必要なわけではありません。まずは、チームが現在Sonarにどの程度依存しているかに合ったパスから始めましょう。

| パス            | こんな場合に使用                                           | 実施内容                                                                            |
| ------------- | -------------------------------------------------- | ------------------------------------------------------------------------------- |
| Aikidoに直接移行する | 現在のSonar構成が、ほとんどAikidoの標準機能で対応できるワークフローをカバーしている場合。 | リポジトリをAikidoに接続し、ゲート設定とカスタムルールを構成してから、対応するSonarチェックを廃止します。                      |
| 一時的に両方を実行する   | 開発者のワークフローを変える前に、検出結果を比較したい場合。                     | まずAikidoを有効にし、短い検証期間はSonarをCIに残し、チームが慣れたら重複するSonarチェックを削除します。                   |
| 特殊なチェックを確認する  | ワークフロー上重要な、Sonar固有のチェックやメトリクスに依存している場合。            | SonarのワークフローをAikidoに移行してから、その特殊なチェックを私たちに共有してください。優先して代替を用意するか、別のワークフローを提案できます。 |

## Sonarの概念をAikidoに対応づける

このマップを使って、各SonarワークフローがAikidoのどこに当たるかを判断してください。

| Sonarの概念                          | Aikidoでの対応                                                                                                                                                                                                                                                                     | 注意事項                                                                        |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- |
| セキュリティルールと脆弱性                     | [SASTとIaCのスキャン](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/sast-by-aikido-supported-languages-and-security-focus)                                                                                                                                                           | Aikidoはセキュリティ検出に重点を置き、SASTから非セキュリティのスタイル系ノイズを取り除きます。                        |
| 依存関係の検出                           | [オープンソース依存関係スキャン](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/support-for-dependency-scanning-by-language)                                                                                                                                                                   | Aikidoは到達可能性と悪用インテリジェンスも使って、重要なものの優先順位付けを支援します。                             |
| Secrets                           | [リアルタイムシークレット検出](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/live-secret-detection)                                                                                                                                                                                          | Aikidoは漏えいしたシークレットが実際に有効かどうかを確認し、リスクに応じて重大度を調整します。                          |
| IaCルール                            | [SASTとIaCのスキャン](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/sast-by-aikido-supported-languages-and-security-focus)                                                                                                                                                           | AikidoはTerraform、CloudFormation、Docker、Pulumi、その他のIaCファイルをスキャンします。          |
| 品質ゲート                             | [PRゲーティング](https://help.aikido.dev/docs/docs-ja/pr-and-release-gating/aikido-ci-gating-functionality) と [リリースのゲート制御](https://help.aikido.dev/docs/docs-ja/pr-and-release-gating/cli-for-pr-and-release-gating/aikido-cli-release-and-pr-gating)                                                                                  | Aikidoは、新しい問題や重大度のしきい値に基づいて、プルリクエストやリリースチェックを失敗させることができます。                  |
| コードカバレッジ                          | [コードカバレッジ](https://help.aikido.dev/docs/docs-ja/code-quality/code-coverage) と [コードカバレッジのPRゲーティング](https://help.aikido.dev/docs/docs-ja/code-quality/code-coverage/pr-gating-on-code-coverage)                                                                                                                                            | CIからカバレッジレポートをアップロードし、Aikidoでカバレッジを確認します。カバレッジがしきい値を下回った場合はプルリクエストを失敗させます。  |
| プルリクエストの装飾                        | [インラインPRコメントとAutoFix提案](https://help.aikido.dev/docs/docs-ja/pr-and-release-gating/aikido-ci-gating-functionality/autofix-suggestions-and-inline-commenting-for-pr-checks)                                                                                                                              | Aikidoはプルリクエストにコメントし、開発者を関連するスキャン結果へ誘導します。                                  |
| 品質プロファイル                          | [カスタムSASTおよびIaCルール](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/add-custom-sast-iac-rules) と [カスタムコードルール](https://help.aikido.dev/docs/docs-ja/code-quality/add-custom-code-rules)                                                                                                                        | まだ有用なルールだけを移行してください。Aikidoはすでに多くのノイズの少ないチェックを除外しています。                       |
| コードの臭いと保守性                        | [コード品質](https://help.aikido.dev/docs/docs-ja/code-quality/code-quality-overview)                                                                                                                                                                                                                            | Aikido Code Qualityは、PRチェック、リポジトリスキャン、チーム独自の標準をカバーします。                      |
| False Positive、Won't Fix、Accepted | [問題を無視する](https://help.aikido.dev/docs/docs-ja/getting-started/core-functionalities/ignore-issues-to-remove-issues-from-main-feed) と [問題をスヌーズする](https://help.aikido.dev/docs/docs-ja/getting-started/core-functionalities/snooze-issues-for-later)                                                                                  | 受容済みリスクや誤検知には無視を使います。後で見直したい問題にはスヌーズを使います。                                  |
| `//NOSONAR` 抑制                    | [`NOAIKIDO` コメント](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/excluding-sast-findings-using-comments) と [`.aikido` ファイル](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/ignore-via-code-with-aikido-files)                                                                    | レビュー可能な判断には、UIでの無視を優先してください。 `NOAIKIDO` 例外をリポジトリ内に置くべき場合は                   |
| セキュリティホットスポット                     | [SAST](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/sast-by-aikido-supported-languages-and-security-focus), [SAST自動トリアージ](https://help.aikido.dev/docs/docs-ja/aikido-agent/sast-autotriage)、および [到達可能性分析](https://help.aikido.dev/docs/docs-ja/getting-started/reachability-analysis/introduction-to-reachability-analysis) | これは1対1の対応ではありません。Aikidoは実行可能なセキュリティ検出に重点を置き、トリアージ信号を使って低リスク結果の手動レビューを減らします。 |
| レポートとダッシュボード                      | [セキュリティ監査レポート](https://help.aikido.dev/docs/docs-ja/compliance-and-reporting/reports/security-audit-report) と [時系列トレンドレポート](https://help.aikido.dev/docs/docs-ja/compliance-and-reporting/reports/trends-over-time-report)                                                                                                       | Aikidoのレポートは、セキュリティレビュー、コンプライアンス証跡、傾向追跡に利用できます。                             |
| 修正ガイダンス                           | [AutoFix](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/overview-aikido-autofix)                                                                                                                                                                                                                 | Aikidoは、オープンソース依存関係、SAST、IaC、コンテナに対する修正案を作成できます。                            |

## 移行チェックリスト

{% stepper %}
{% step %}

### リポジトリを接続する

まず、ソースコード管理（SCM）連携を通じてAikidoにスキャンさせたいリポジトリを接続します。通常、最初に各リポジトリへスキャナー設定ファイルを追加する必要はありません。AikidoをSCMに接続すると、push時、毎日の再スキャン、プルリクエスト時のアクティビティでスキャンできます。

SCMのセットアップガイドを使用してください：

* [GitHub](https://help.aikido.dev/docs/docs-ja/code-scanning/connect-your-source-code/connect-github-account-to-aikido)
* [GitLab](https://help.aikido.dev/docs/docs-ja/code-scanning/connect-your-source-code/connect-gitlab-account-to-aikido)
* [Bitbucket](https://help.aikido.dev/docs/docs-ja/code-scanning/connect-your-source-code/connect-bitbucket-account-to-aikido)
* [Azure DevOps](https://help.aikido.dev/docs/docs-ja/code-scanning/connect-your-source-code/connect-azure-devops-projects-to-aikido)

参照 [ソースコードを接続する](https://help.aikido.dev/docs/docs-ja/code-scanning/connect-your-source-code) すべてのセットアップオプションについて。
{% endstep %}

{% step %}

### Sonarのワークフローを合わせる

現在Sonarがそのリポジトリで行っている内容に合うAikidoのワークフローを有効にします：

* コードとインフラのセキュリティ向けSASTとIaCスキャン
* CVEとライセンスリスク向けのオープンソース依存関係スキャン
* 有効性チェック付きのシークレットスキャン
* 保守性とチーム固有の標準向けコード品質
* CIからのテストカバレッジレポート向けコードカバレッジ。しきい値を下回ると失敗するチェックを含みます。
* プルリクエストをブロックするためのPRゲート

IDEでSonarを使っている場合は、 [Aikido IDEプラグイン](https://help.aikido.dev/docs/docs-ja/ai-and-dev-tools/ide-plugins-overview) を確認し、開発者がコミット前に問題を見つけられるようにします。
{% endstep %}

{% step %}

### 有用なカスタムルールを移行する

Sonar Quality Profileのルールをすべてそのままコピーしないでください。まず、そのリスクやパターンをAikidoがすでにカバーしているか確認します。Aikidoは標準でより広くカバーしていることが多いため、多くのSonarルールにはカスタムの置き換えが不要です。

環境固有のセキュリティ、アーキテクチャ、チーム標準の判断を表すルールなど、まだ価値を生むルールだけを移行します。

使用 [カスタムSASTおよびIaCルール](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/add-custom-sast-iac-rules) セキュリティパターンとインフラチェック向けに。 [カスタムコードルール](https://help.aikido.dev/docs/docs-ja/code-quality/add-custom-code-rules) チーム固有のコード品質要件向けに使用します。
{% endstep %}

{% step %}

### 受容済みリスクの判断を移行する

False Positive、Won't Fix、AcceptedとしてマークされたSonarの問題を確認します。今も同意できる判断は、Aikidoで再作成します。

使用 [問題を無視する](https://help.aikido.dev/docs/docs-ja/getting-started/core-functionalities/ignore-issues-to-remove-issues-from-main-feed) UIベースの判断には [`.aikido` ファイル](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/ignore-via-code-with-aikido-files) または [`NOAIKIDO` コメント](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/excluding-sast-findings-using-comments) を使用してください。例外をリポジトリ内に置くべき場合は
{% endstep %}

{% step %}

### PRとリリースのゲートを構成する

新しいセキュリティおよびコード品質の問題に対しては、SonarのQuality GateチェックをAikidoのPRゲートまたはリリースゲートに置き換えます。

Aikidoでは、重大度のしきい値を設定し、どのスキャン種別がチェックを失敗させるかを選べます。また、マージをブロックする前に可視化だけしたい場合は、最初は常にグリーンの設定で始めることもできます。 [PRゲーティング概要](https://help.aikido.dev/docs/docs-ja/pr-and-release-gating/aikido-ci-gating-functionality) と [Aikido CLI: リリースゲーティング](https://help.aikido.dev/docs/docs-ja/pr-and-release-gating/cli-for-pr-and-release-gating/aikido-cli-release-and-pr-gating).
{% endstep %}

{% step %}

### CIとブランチ保護を更新する

リポジトリ向けにAikidoを構成したら、CIから対応するSonarのスキャナジョブを削除し、代わりにAikidoチェックを必須にするようブランチ保護ルールを更新します。

リポジトリがAikidoの設定外にある特殊なチェックに依存している場合は、それを私たちに共有してください。代替を優先対応するか、別のワークフローを提案できます。
{% endstep %}

{% step %}

### レポートと所有者を確認する

セキュリティ、エンジニアリング、コンプライアンスの各チームが、Aikidoで新しいビューをどこで確認できるかを把握していることを確認します。

日常的なトリアージにはメインフィードを、開発者ワークフローにはPRスキャン結果を、監査や傾向確認にはレポートを使います。検出結果をJira、Linear、Slack、Microsoft Teamsへ流している場合は、古いSonar通知を削除する前にそれらのワークフローを接続してください。
{% endstep %}
{% endstepper %}

## 切り替えチェックリスト

リポジトリからSonarを削除する前に、次の点を確認してください：

* Aikidoがそのリポジトリと正しいブランチをスキャンしている。
* Sonarのカバレッジを使っていた場合はカバレッジレポートがAikidoにアップロードされ、カバレッジチェックが希望のしきい値を使っている。
* PRゲートが、チームの希望する重大度しきい値で構成されている。
* 必須のブランチ保護チェックがAikidoを指している。
* 重要なカスタムルールが再作成されているか、意図的に削除されている。
* 受容済みリスクの判断がAikidoで確認済みである。
* チームがまだ必要としている場合は、専用のCIチェックが残っている。
* 開発者が、検出結果の確認場所、無視の依頼方法、AutoFixの使い方を知っている。

## ヘルプが必要ですか？

Sonarからの移行は、セキュリティ、エンジニアリング、コンプライアンスの各ワークフローに影響する可能性があります。Sonarのルール、ゲート、レポートをAikidoにどう対応づけるか分からない場合は、 **Intercomチャット** が右下隅に表示されます。私たちのチームがお手伝いします。
