Slide 1

Slide 1 text

25分で作るAndroid Lint Nozomi Takuma DroidKaigi 2021

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

今日伝えたいこと

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Android Lintで実装してみよう

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

まとめ

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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