Save 37% off PRO during our Black Friday Sale! »

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

7867fe52a9be4257508a516d4df61578?s=47 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

7867fe52a9be4257508a516d4df61578?s=128

tkmnzm

October 21, 2021
Tweet

Transcript

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

  2. 自己紹介 • Nozomi Takuma • DeNA SWETグループ ◦ 兼務: Pococha事業部システム部

    • Androidとテストが好き
  3. 今日伝えたいこと

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

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

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

  7. Android Lintの特徴 • 解析対象がソースコードに限らない ◦ Java&Kotlin, Gradle, Layout XML... •

    多種多様なルールが実装されている ◦ 標準だけで約400、加えて依存ライブラリが実 装するルールも利用できる ▪ androidxパッケージ等
  8. なぜ自作のルールを作るのか? • 標準およびライブラリで実装されたルール は、どのプロジェクトにも適用できる汎用 的なもの • プロジェクト固有の問題のあるコードの チェックはできない

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

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

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

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

  13. Android Lintの登場人物 • Detector • Issue • Scope • Scanner

    • UASTとPSI
  14. Android Lintの登場人物 • Detector • Issue • Scope • Scanner

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

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

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

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

    • UASTとPSI ソースコードの構造をツリー構造で 表現したもの ソースコード内の要素を特定するの に利用する
  19. 今回実装するLintの要件 • Activityの中でプロジェクト内の特定のク ラスを参照していたら警告する • プロジェクト固有のチェックとして実装 • Lint API 30.0+

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

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

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

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

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

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

  26. まとめ

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

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