Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ご清聴ありがとうございました!