Lint: 基本、Androidプロジェクトのための静的アナライザー

著者: IT Sectr 公開日: 2026-02-13 読了時間: 10 分

Android Lint — Android StudioおよびGradleに組み込まれた静的コードアナライザーで、Googleの推奨事項に従ってソースファイルをチェックします。Lintはコンパイル前に潜在的なエラーを検出します:未使用のリソース、パフォーマンス問題、メモリリーク、APIの非互換性。このツールはXML、Java、Kotlinファイルを解析します。詳細はAndroid Lint Guideをご覧ください。

重要なポイント

  • Android Lint — コードチェックのためにAndroid StudioおよびGradleに組み込まれた静的アナライザー
  • Lintチェック — アプリのコンパイル前にXML、Java、Kotlinのエラーを解析
  • lint.xml — AndroidプロジェクトでLintルールをカスタマイズするための設定ファイル
  • Lint baseline — 段階的導入のために既存の警告を固定する仕組み
  • CI統合 — 自動コード品質管理のためのビルドサーバーでのLint実行

Lintとは — 静的コードアナライザー

Android Lintは、Android SDKおよびAndroid Studioに含まれる静的解析ツールです。Lintはアプリケーションのソースコードを実行せずにスキャンし、コンパイラが見逃す問題を検出します:未使用のリソース、不適切なローカライゼーション、潜在的なメモリリーク、minSdkVersionとのAPI非互換性、Googleのパフォーマンス推奨事項の違反。

静的解析は、実際のコード実行を必要としないソフトウェア検証手法です。構文と型のみをチェックするコンパイラとは異なり、静的アナライザーは論理エラー、アンチパターン、ベストプラクティスからの逸脱を探します。Lintはカテゴリ別に200以上の組み込みチェックを実行します:correctness、performance、security、accessibility、usability、I18N。

Lintは複数のレベルで動作します:XML解析はレイアウト、リソース(strings、colors、dimens)、マニフェスト、設定ファイルをチェックします。Java/Kotlin解析はソースコードを調べて、非推奨API呼び出し、スレッド問題、コンテキストリークを検出します。Gradle解析はビルド設定のバージョン互換性をチェックします。

LintがAndroidプロジェクトのコードをチェックする方法

LintチェックはAndroid Studio(Analyze > Inspect Code)またはGradleコマンドで起動します:./gradlew lint。結果はbuild/reports/lint-results.htmlフォルダのHTMLレポートとCIシステム用のXMLレポートです。Lintは各ファイルを独立して解析し、一連のルール(Issue)を適用します。各ルールには一意のID、説明、カテゴリ、重大度レベルがあります。

Lintの重大度レベル:Error(エラー — ビルドをブロック)、Warning(警告 — 品質に影響)、Informational(情報 — 参考用)、Ignore(デフォルトで無視)。レベルはlint.xmlで設定します。LintエラーはlintOptions.abortOnError trueでGradleビルドを失敗させるように設定できます。

groovy
android {
    lintOptions {
        abortOnError true
        checkAllWarnings true
        baselineFile file("lint-baseline.xml")
        htmlReport true
        xmlReport true
        lintConfig file("lint.xml")
    }
}

Lint baseline — 現在の警告を許容可能としてマークするファイル。lint --baseline baseline.xmlコマンドで作成します。プロジェクトにbaselineを追加すると、Lintは新しい問題のみを報告します。これは数百の警告がある古いプロジェクトにLintを導入するのに便利です — チームは徐々にエラーを修正します。

設定ファイルでのLintルールの構成

lint.xml — Lintルールをカスタマイズするためのプロジェクトルートの設定ファイル。無視するルール、重大度レベル、特定のファイルやディレクトリの例外を指定します。ファイルは手動で作成され、プロジェクトのすべてのモジュールにグローバルに適用されます。lint.xmlがない場合、すべてのルールはデフォルト設定で動作します。

xml
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- 未使用リソースのチェックを無効にする -->
    <issue id="UnusedResources" severity="ignore" />

    <!-- コンテキストリークの重大度を上げる -->
    <issue id="StaticFieldLeak" severity="error" />

    <!-- 生成ファイルでは無視する -->
    <issue id="MissingTranslation" severity="ignore">
        <ignore path="build/generated" />
    </issue>
</lint>

@SuppressLint — Java/KotlinでメソッドまたはクラスレベルでLintを無効にするアノテーション。例:@SuppressLint("SetTextI18n")はTextViewに動的にテキストを設定するメソッドに使用します。@RequiresApiアノテーションはメソッドの最小APIレベルを指定します — minSdkが指定値を超える場合、Lintは警告を発行しません。

CI/CDパイプラインでのLintチェックの実行

LintのCI統合はAndroid開発における標準的なプラクティスです。./gradlew lintコマンドですべてのモジュールの解析を実行し、レポートを生成します。CI/CD設定(Jenkins、GitLab CI、GitHub Actions)では、Lintは各プルリクエストで実行されます。エラーが見つかるとビルドは失敗し、開発者はLint HTMLレポートの通知を受け取ります。

yaml
lint-check:
  script:
    - ./gradlew lint
  artifacts:
    paths:
      - app/build/reports/lint-results.html
    when: always

Lint HTMLレポートには、カテゴリ、ルールID、ファイル、行、説明とともに見つかったすべての問題の表が含まれます。レポートはCIサーバーで利用可能か、ビルド成果物として公開されます。XMLレポート(lint-results.xml)はコード解析システム(SonarQube、CodeClimate)との統合や、トラッカー(Jira、YouTrack)での自動タスク作成に使用されます。

プルリクエストでのLint — MR/PR作成時にLintが自動的に実行されるようにGitHub ActionsまたはGitLab CIを設定します。Lintがエラーを見つけた場合、CIは失敗ステータスを返し、マージはブロックされます。これにより問題のあるコードがメインブランチに入るのを防ぎ、コードベースの品質を維持します。

AndroidのLintルールの主要カテゴリ

LintカテゴリはAndroid開発のすべての側面をカバーしています。Googleはルールを12のカテゴリに分類しており、各カテゴリは特定の種類の問題を担当します。最も重要なカテゴリはCorrectness、Performance、Security、Accessibilityです。開発者はLintを効果的に使用するために、各カテゴリの主要なチェックを理解する必要があります。

カテゴリ説明ルール例
Correctnessアプリケーション機能に影響するエラーMissingPermission, WrongConstant
Performanceパフォーマンスとメモリの問題UnusedResources, ViewHolder, DrawAllocation
Security脆弱性とセキュリティ違反ExportedContentProvider, WorldReadableFiles
Accessibilityユーザー向けアクセシビリティ問題ContentDescription, TouchTargetSize
Usabilityユーザビリティとユーザー体験NotSibling, BackButton, HardcodedText
I18N国際化とローカライゼーションMissingTranslation, ExtraTranslation

パフォーマンスルールは実際に最も役立ちます。UnusedResourcesはXMLで宣言されているがコードで使用されていないリソースを検出します。ViewHolderはRecyclerViewアダプターでViewHolderパターンが使用されているかをチェックします。DrawAllocationはonDrawメソッドでのオブジェクト作成について警告します。これらの問題を修正するとAPKサイズが減少し、アプリケーションが高速化します。

セキュリティルールは公開アプリケーションに必須です。ExportedContentProviderはContentProviderが保護なしでエクスポートされているかをチェックします。WorldReadableFilesはすべてのアプリケーションがアクセス可能なファイルの作成について警告します。AllowBackupはマニフェストのallowBackupフラグをチェックします — データセキュリティのために無効にすることを推奨します。

よくある質問

Lintとコンパイラの違いは何ですか?

コンパイラは構文と型をチェックし、コードを実行用のバイトコードに変換します。Lintはコンパイルなしでコードを解析し、コンパイラが見逃す論理的問題を検出します:未使用の変数、リソースリーク、ローカライゼーション問題、パフォーマンス違反、minSdkVersionとのAPI非互換性。Lintはコンパイラを補完しますが、置き換えるものではありません。

コード内の特定のLint警告を無効にするには?

XMLファイルでは、ルールIDとともにtools:ignore属性を使用します:tools:ignore="UnusedResources"。Java/Kotlinでは、メソッドまたはクラスに@SuppressLintアノテーションを追加します:@SuppressLint("SetTextI18n")。ディレクトリ全体の場合は、issueノードとseverity="ignore"を指定してlint.xmlを設定します。プロジェクト全体の場合は、モジュールルートでlint.xmlを設定します。

Lint baselineとは何ですか?どう使うのですか?

Lint baselineは現在のLint警告を許容可能としてマークするXMLファイルです。./gradlew lint -Pbaselineコマンドまたはbuild.gradleのlintOptions.baselineFileで作成します。baselineを追加すると、Lintは新しい問題のみを報告します。これはレガシーコードのあるプロジェクトにLintを導入するのに便利です — チームは反復的にエラーを修正します。

カスタムLintルールを作成するには?

com.android.tools.lintライブラリからlint-apiおよびlint-checksへの依存関係を持つ新しいJava/Kotlinモジュールを作成します。問題を検出するためのDetectorクラスと、問題を説明するためのIssueクラスを実装します。モジュールをJARにビルドし、AndroidプロジェクトのlintLibsフォルダに配置します。Android Studioが自動的にカスタムルールを認識します。

AndroidプロジェクトでLintチェックが必須な理由は?

Lintはコンパイラが見えない問題を検出します:コンテキストリーク(Activity、Fragment)、minSdkVersionとのAPI非互換性、Gradle設定問題、大きすぎるPNGアイコン、異なる言語や画面設定向けの代替リソースの欠如。Google Playは公開前にLintを推奨しています。Lintがないと、アプリは古いデバイスでクラッシュする可能性があります。

まとめ

  • Android Lint — Android SDKおよびAndroid Studioに組み込まれた静的コードアナライザー
  • Lintチェック — アプリコンパイル前にXML、Java、Kotlinの潜在的なエラーを解析
  • lint.xml — AndroidプロジェクトでLintルールをカスタマイズする設定ファイル
  • Lint baseline — 段階的導入のために既存の警告を固定する仕組み
  • CI統合 — ビルドサーバーでのLint実行が重大なエラーのPRをブロック
  • Lintカテゴリ — Correctness、Performance、Security、Accessibility、I18N
  • @SuppressLint — メソッドまたはクラスレベルでLintを無効にするアノテーション

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください