DroidKaigi 2021 「25分で作るAndroid Lint」のスライドです。 P.20~21の間にライブコーディングを実施しています。ライブコーディングはYoutubeにアップされた動画を参照してください。 https://www.youtube.com/watch?v=WUJOqFJzPNY
25分で作るAndroid LintNozomi TakumaDroidKaigi 2021
View Slide
自己紹介● Nozomi Takuma● DeNA SWETグループ○ 兼務: Pococha事業部システム部● Androidとテストが好き
今日伝えたいこと
今日伝えたいこと● Android Lintの自作ルールが作れるとどのような場面で役に立つのか● Android Lintの自作ルールの作り方を紹介し、自分にもできそうと感じてもらう
なぜ自作のルールを作るのか?
Android Lint● Androidアプリ開発時に標準で組み込まれている静的コード解析ツール● 明示的に実行したときだけではなく、Android Studio上でも問題のあるコードを検出してくれる
Android Lintの特徴● 解析対象がソースコードに限らない○ Java&Kotlin, Gradle, Layout XML...● 多種多様なルールが実装されている○ 標準だけで約400、加えて依存ライブラリが実装するルールも利用できる■ androidxパッケージ等
なぜ自作のルールを作るのか?● 標準およびライブラリで実装されたルールは、どのプロジェクトにも適用できる汎用的なもの● プロジェクト固有の問題のあるコードのチェックはできない
なぜ自作のルールを作るのか?● 標準およびライブラリで実装されたルールは、どのプロジェクトにも適用できる汎用的なもの● プロジェクト固有の問題のあるコードのチェックはできない例えば、アーキテクチャを段階的に変更している場合
アーキテクチャ移行期間の課題● 新規に追加されるコードに修正対象となる実装が含まれないようにレビューで気を配る必要がある● 移行完了の進捗やゴールが見えにくい
アーキテクチャ移行期間の課題● 新規に追加されるコードに修正対象となる実装が含まれないようにレビューで気を配る必要がある● 移行完了の進捗やゴールが見えにくいLintはこれらの課題にアプローチできる
Android Lintで実装してみよう
Android Lintの登場人物● Detector● Issue● Scope● Scanner● UASTとPSI
Android Lintの登場人物● Detector● Issue● Scope● Scanner● UASTとPSIコードを解析し、問題のあるコードを検出する実装そのもの
Android Lintの登場人物● Detector● Issue● Scope● Scanner● UASTとPSIDetectorによってレポートされるコード上の問題
Android Lintの登場人物● Detector● Issue● Scope● Scanner● UASTとPSIDetectorが解析する対象のファイル
Android Lintの登場人物● Detector● Issue● Scope● Scanner● UASTとPSIファイルの解析をするファイル内の特定の要素を検出したときのコールバックをもっている
Android Lintの登場人物● Detector● Issue● Scope● Scanner● UASTとPSIソースコードの構造をツリー構造で表現したものソースコード内の要素を特定するのに利用する
今回実装するLintの要件● Activityの中でプロジェクト内の特定のクラスを参照していたら警告する● プロジェクト固有のチェックとして実装● Lint API 30.0+
Lintプロジェクトの設定● github.com/googlesamples/android-custom-lint-rules○ サンプルリポジトリを参考に行う
ハードルを下げるためのポイント
ハードルを下げるためのポイント①● Detectorが検出できる/できないのスコープを設定する○ スコープを広げれば、それだけ実装が大変になる可能性がある○ すべてのプロジェクトで適用できるものでなくてもいい
ハードルを下げるためのポイント②● 小さく実行&デバッグできる環境作りをしてトライ&エラーをしやすくする○ フィードバックサイクルを早くすれば、ストレスも少なくなる○ LintのAPIを触ってみると、自分のやりたいことを実現できるAPIの存在に気がつく
Detector実装の参考になるリソース● googlesamples/android-custom-lint-rules● googlesamples.github.io/android-custom-lint-rules/api-guide.html○ 実装前に一読するのがおすすめ● Android Code Search
Detector実装の参考になるリソース「lint/checks」「Detector」といったワードで検索
まとめ
まとめ● Lintのルールを自作できると、プロジェクト固有の問題も自動で検知できる● Android LintはDetectorを実装するための機能が充実しているので、小さく試せる環境を作ってトライ&エラーを楽しもう
ご清聴ありがとうございました!