$30 off During Our Annual Pro Sale. View Details »

25分で作るAndroid Lint / Android Lint made in 25 minutes

tkmnzm
October 21, 2021

25分で作るAndroid Lint / Android Lint made in 25 minutes

DroidKaigi 2021 「25分で作るAndroid Lint」のスライドです。
P.20~21の間にライブコーディングを実施しています。ライブコーディングはYoutubeにアップされた動画を参照してください。
https://www.youtube.com/watch?v=WUJOqFJzPNY

tkmnzm

October 21, 2021
Tweet

More Decks by tkmnzm

Other Decks in Programming

Transcript

  1. 25分で作るAndroid Lint
    Nozomi Takuma
    DroidKaigi 2021

    View Slide

  2. 自己紹介
    ● Nozomi Takuma
    ● DeNA SWETグループ
    ○ 兼務: Pococha事業部システム部
    ● Androidとテストが好き

    View Slide

  3. 今日伝えたいこと

    View Slide

  4. 今日伝えたいこと
    ● Android Lintの自作ルールが作れると
    どのような場面で役に立つのか
    ● Android Lintの自作ルールの作り方を紹介
    し、自分にもできそうと感じてもらう

    View Slide

  5. なぜ自作のルールを作るのか?

    View Slide

  6. Android Lint
    ● Androidアプリ開発時に標準で組み込まれ
    ている静的コード解析ツール
    ● 明示的に実行したときだけではなく、
    Android Studio上でも問題のあるコードを
    検出してくれる

    View Slide

  7. Android Lintの特徴
    ● 解析対象がソースコードに限らない
    ○ Java&Kotlin, Gradle, Layout XML...
    ● 多種多様なルールが実装されている
    ○ 標準だけで約400、加えて依存ライブラリが実
    装するルールも利用できる
    ■ androidxパッケージ等

    View Slide

  8. なぜ自作のルールを作るのか?
    ● 標準およびライブラリで実装されたルール
    は、どのプロジェクトにも適用できる汎用
    的なもの
    ● プロジェクト固有の問題のあるコードの
    チェックはできない

    View Slide

  9. なぜ自作のルールを作るのか?
    ● 標準およびライブラリで実装されたルール
    は、どのプロジェクトにも適用できる汎用
    的なもの
    ● プロジェクト固有の問題のあるコードの
    チェックはできない
    例えば、アーキテクチャを段階的に
    変更している場合

    View Slide

  10. アーキテクチャ移行期間の課題
    ● 新規に追加されるコードに修正対象となる
    実装が含まれないようにレビューで気を配
    る必要がある
    ● 移行完了の進捗やゴールが見えにくい

    View Slide

  11. アーキテクチャ移行期間の課題
    ● 新規に追加されるコードに修正対象となる
    実装が含まれないようにレビューで気を配
    る必要がある
    ● 移行完了の進捗やゴールが見えにくい
    Lintはこれらの課題にアプローチできる

    View Slide

  12. Android Lintで実装してみよう

    View Slide

  13. Android Lintの登場人物
    ● Detector
    ● Issue
    ● Scope
    ● Scanner
    ● UASTとPSI

    View Slide

  14. Android Lintの登場人物
    ● Detector
    ● Issue
    ● Scope
    ● Scanner
    ● UASTとPSI
    コードを解析し、問題のあるコード
    を検出する実装そのもの

    View Slide

  15. Android Lintの登場人物
    ● Detector
    ● Issue
    ● Scope
    ● Scanner
    ● UASTとPSI
    Detectorによってレポートされる
    コード上の問題

    View Slide

  16. Android Lintの登場人物
    ● Detector
    ● Issue
    ● Scope
    ● Scanner
    ● UASTとPSI
    Detectorが解析する対象のファイル

    View Slide

  17. Android Lintの登場人物
    ● Detector
    ● Issue
    ● Scope
    ● Scanner
    ● UASTとPSI
    ファイルの解析をする
    ファイル内の特定の要素を検出した
    ときのコールバックをもっている

    View Slide

  18. Android Lintの登場人物
    ● Detector
    ● Issue
    ● Scope
    ● Scanner
    ● UASTとPSI
    ソースコードの構造をツリー構造で
    表現したもの
    ソースコード内の要素を特定するの
    に利用する

    View Slide

  19. 今回実装するLintの要件
    ● Activityの中でプロジェクト内の特定のク
    ラスを参照していたら警告する
    ● プロジェクト固有のチェックとして実装
    ● Lint API 30.0+

    View Slide

  20. Lintプロジェクトの設定
    ● github.com/googlesamples/android-custom-lint
    -rules
    ○ サンプルリポジトリを参考に行う

    View Slide

  21. ハードルを下げるためのポイント

    View Slide

  22. ハードルを下げるためのポイント①
    ● Detectorが検出できる/できないのスコー
    プを設定する
    ○ スコープを広げれば、それだけ実装が大変に
    なる可能性がある
    ○ すべてのプロジェクトで適用できるものでな
    くてもいい

    View Slide

  23. ハードルを下げるためのポイント②
    ● 小さく実行&デバッグできる環境作りをし
    てトライ&エラーをしやすくする
    ○ フィードバックサイクルを早くすれば、スト
    レスも少なくなる
    ○ LintのAPIを触ってみると、自分のやりたいこ
    とを実現できるAPIの存在に気がつく

    View Slide

  24. Detector実装の参考になるリソース
    ● googlesamples/android-custom-lint-rules
    ● googlesamples.github.io/android-custom-
    lint-rules/api-guide.html
    ○ 実装前に一読するのがおすすめ
    ● Android Code Search

    View Slide

  25. Detector実装の参考になるリソース
    「lint/checks」「Detector」
    といったワードで検索

    View Slide

  26. まとめ

    View Slide

  27. まとめ
    ● Lintのルールを自作できると、プロジェク
    ト固有の問題も自動で検知できる
    ● Android LintはDetectorを実装するための
    機能が充実しているので、小さく試せる環
    境を作ってトライ&エラーを楽しもう

    View Slide

  28. ご清聴ありがとうございました!

    View Slide