dart-run-static-analysis について
Dart開発者向けの静的解析と自動修正のガイドです。解析設定、診断の抑制、MCPツールまたはDartコマンドを使った作業手順を説明します。
主な機能
- 01アナライザーと厳密な型検査の設定
- 02lintとフォーマッターのルール設定
- 03ファイル単位・行単位の診断抑制
- 04解析の実行と診断結果の確認
- 05自動修正のプレビューと適用
活用シーン
- 01Dartパッケージの解析オプション設定
- 02型の問題とコードスタイルの確認
- 03生成ファイルの診断除外
- 04アナライザーの指摘事項の修正
MCP 対応
ガイドでは、利用可能な場合に `analyze_files`、`dart_fix`、`dart_format` MCPツールで解析、修正、フォーマットを行う方法を示します。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dart-lang/ skills --skill dart-run-static-analysisインストール後、Claude Code で/dart-run-static-analysisを入力して読み込まれたか確認します。
詳細
Dart コードの分析と修正
目次
分析の設定
パッケージのルートにある analysis_options.yaml ファイルを使用して、Dart アナライザーを設定します。
- 基本設定:
include:ディレクティブを使用して、標準のルールセット(例:package:lints/recommended.yamlまたはpackage:flutter_lints/flutter.yaml)を必ず含めます。 - 厳密な型チェック: 暗黙的なダウンキャストや
dynamicの推論を防ぐため、analyzer: language:ノードで厳密な型チェックを有効にします。strict-casts: true、strict-inference: true、strict-raw-types: trueを設定します。 - リンターのルール:
linter: rules:ノードで、特定のルールを明示的に有効または無効にします。含めたルールを上書きする場合はキーと値のマップ(rule_name: true/false)を使用し、新しいセットを定義する場合はリスト(- rule_name)を使用します。同じrulesブロック内でリスト形式とマップ形式を混在させないでください。 - フォーマッターの設定:
formatter:ノードでdart formatの動作を設定します。page_width(デフォルトは 80)とtrailing_commas(automateまたはpreserve)を設定します。 - アナライザープラグイン:
analyzer: plugins:ノードにプラグインを追加して、カスタム診断を有効にします。プラグインパッケージがpubspec.yamlのdev_dependencyとして追加されていることを確認します。
診断の抑制
診断(リントまたは警告)が誤検出を起こす場合や、生成コードに適用される場合は、明示的に抑制します。
- ファイル単位の除外:
analysis_options.yamlのanalyzer: exclude:ノードで、グロブパターン(例:**/*.g.dart)を使用してファイルまたはディレクトリ全体を除外します。 - ファイル単位の抑制: Dart ファイルの先頭に
// ignore_for_file: <diagnostic_code>を追加すると、そのファイル全体で特定の診断を抑制できます。すべてのリンタールールを抑制するには、// ignore_for_file: type=lintを使用します。 - 行単位の抑制: 問題のあるコードの直前の行に
// ignore: <diagnostic_code>を追加するか、問題のある行の末尾に追加します。 - Pubspec での抑制:
pubspec.yamlファイルで、問題のある行の上に# ignore: <diagnostic_code>を追加します(例:# ignore: sort_pub_dependencies)。 - プラグインの診断: プラグイン固有の問題を抑制する場合は、診断コードの前にプラグイン名を付けます(例:
// ignore: some_plugin/some_code)。
ワークフロー:静的分析の実行
このワークフローを使用して、型に関するバグ、スタイル違反、潜在的な実行時エラーを特定します。
タスクの進行状況:
- 1. プロジェクトのルートに
analysis_options.yamlがあることを確認します。 - 2.
analyze_filesMCP ツール(利用可能な場合)または CLI コマンドdart analyze <target_directory>を使用してアナライザーを実行します。 - 3. 診断の出力を確認します。
- 4. 情報レベルの問題も失敗として扱う必要がある場合は、
--fatal-infosフラグを追加します。 - 5. 報告されたエラーを手動で解決するか、自動修正のワークフローに進みます。
ワークフロー:自動修正の適用
このワークフローを使用して、古くなった API の使用箇所を解決し、クイック修正を適用し、コードを移行します(例:Dart 3 への移行)。
タスクの進行状況:
- 1.
dart_fixMCP ツールまたは CLI コマンドdart fix --dry-runを使用してドライランを実行し、提案された変更を確認します。 - 2. 提案された修正が意図したアーキテクチャに沿っていることを確認します。
- 3. 追加の修正が必要な場合は、対応するリンタールールが
analysis_options.yamlで有効になっていることを確認します。 - 4.
dart_fixMCP ツールまたは CLI コマンドdart fix --applyを使用して修正を適用します。 - 5.
dart_formatMCP ツールまたは CLI コマンドdart format .を使用して、変更したコードをフォーマットします。 - 6. 静的分析のワークフローを実行して、すべての診断が解決されたことを確認します。
例
網羅的な analysis_options.yaml
include: package:flutter_lints/recommended.yaml
analyzer:
exclude:
- "**/*.g.dart"
- "lib/generated/**"
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
errors:
todo: ignore
invalid_assignment: warning
missing_return: error
linter:
rules:
avoid_shadowing_type_parameters: false
await_only_futures: true
use_super_parameters: true
formatter:
page_width: 100
trailing_commas: preserve
インラインでの診断の抑制
// Suppress for the entire file
// ignore_for_file: unused_local_variable, dead_code
void processData() {
// Suppress for a specific line
// ignore: invalid_assignment
int x = '';
const y = 10; // ignore: constant_identifier_names
}
コメント
Markdown 対応