Slide 1

Slide 1 text

KotlinのLinter まなびなおし2024 のホコウ After Kotlin Fest 2024 LT Night nyafunta9858

Slide 2

Slide 2 text

⼩林 慶弘 (Yoshihiro Kobayashi) a.k.a nyafunta9858 ● Android Engineer @ Yappli, Inc. ● 趣味:ガジェット集め、ゲーム、カメラ... ● 最近:ずっとかき氷⾷べてる

Slide 3

Slide 3 text

はじめに

Slide 4

Slide 4 text

はじめに

Slide 5

Slide 5 text

今⽇の内容は...

Slide 6

Slide 6 text

Konsistとは? ● Architectural Checks / Declarative Checks ● ユニットテスト環境で実⾏ ○ JUnit4、JUnit5、Kotestなどのテスティングフレームワーク上で実⾏可能 ● 標準ルールセットはなし

Slide 7

Slide 7 text

Konsistとは? ● Architectural Checks / Declarative Checks ● ユニットテスト環境で実⾏ ○ JUnit4、JUnit5、Kotestなどのテスティングフレームワーク上で実⾏可能 ● 標準ルールセットはなし

Slide 8

Slide 8 text

セットアップ

Slide 9

Slide 9 text

セットアップ

Slide 10

Slide 10 text

セットアップ -モジュール間の参照- :app ├AaaTest.kt ├BbbTest.kt └KonsistTest.kt implementation

Slide 11

Slide 11 text

セットアップ -モジュール間の参照- :app ├AaaTest.kt ├BbbTest.kt └KonsistTest.kt :feature1 ├CccTest.kt ├DddTest.kt └KonsistTest.kt :featureN ├YyyTest.kt ├ZzzTest.kt └KonsistTest.kt ︙ implementation implementation implementation

Slide 12

Slide 12 text

Isolate Konsist Tests Typically, it's advisable to consolidate all Konsist tests in a unified location. This approach is preferred because these tests are often designed to validate the structure of the entire project's codebase. There are three potential options for storing Konsist tests: https://docs.konsist.lemonappdev.com/

Slide 13

Slide 13 text

Isolate Konsist Tests

Slide 14

Slide 14 text

Isolate Konsist Tests

Slide 15

Slide 15 text

Isolate Konsist Tests

Slide 16

Slide 16 text

Isolate Konsist Tests :app ├AaaTest.kt ├BbbTest.kt └KonsistTest.kt :feature1 ├CccTest.kt ├DddTest.kt └KonsistTest.kt :featureN ├YyyTest.kt ├ZzzTest.kt └KonsistTest.kt ︙ implementation implementation implementation

Slide 17

Slide 17 text

Isolate Konsist Tests :app ├AaaTest.kt ├BbbTest.kt └KonsistTest.kt :feature1 ├CccTest.kt ├DddTest.kt └KonsistTest.kt :featureN ├YyyTest.kt ├ZzzTest.kt └KonsistTest.kt :konsistTest ︙ implementation implementation implementation implementation

Slide 18

Slide 18 text

Isolate Konsist Tests :app ├AaaTest.kt ├BbbTest.kt └KonsistTest.kt :feature1 ├CccTest.kt ├DddTest.kt └KonsistTest.kt :featureN ├YyyTest.kt ├ZzzTest.kt └KonsistTest.kt :konsistTest ︙ implementation implementation implementation implementation

Slide 19

Slide 19 text

Isolate Konsist Tests implementation implementation implementation implementation :konsistTest └KonsistTest.kt :app ├AaaTest.kt └BbbTest.kt :feature1 ├CccTest.kt └DddTest.kt :featureN ├YyyTest.kt └ZzzTest.kt ︙

Slide 20

Slide 20 text

Isolate Konsist Tests implementation implementation implementation implementation :app ├AaaTest.kt └BbbTest.kt :feature1 ├CccTest.kt └DddTest.kt :featureN ├YyyTest.kt └ZzzTest.kt ︙ :konsistTest └KonsistTest.kt

Slide 21

Slide 21 text

Isolate Konsist Tests :app ├AaaTest.kt └BbbTest.kt :feature1 ├CccTest.kt └DddTest.kt :featureN ├YyyTest.kt └ZzzTest.kt :konsistTest └KonsistTest.kt ︙ implementation

Slide 22

Slide 22 text

Isolate Konsist Tests :app ├AaaTest.kt └BbbTest.kt :feature1 ├CccTest.kt └DddTest.kt :featureN ├YyyTest.kt └ZzzTest.kt :konsistTest └KonsistTest.kt ︙ implementation Konsistのテストを分離できた👍

Slide 23

Slide 23 text

Konsistの実⾏

Slide 24

Slide 24 text

こう思うひともいるのでは? 🤔 どの機能モジュールにも 依存していないけど これで本当に動くの?

Slide 25

Slide 25 text

Konsistの仕組み Konsist on the other hand imports Kotlin code directly by reading and parsing Kotlin (text) files: This means that it is compatible regardless of the Kotlin Multiplatform compilation targets: https://proandroiddev.com/archunit-vs-konsist-why-did-we-need-another-linter-972c4ff2622d

Slide 26

Slide 26 text

Konsistの仕組み Konsist on the other hand imports Kotlin code directly by reading and parsing Kotlin (text) files: This means that it is compatible regardless of the Kotlin Multiplatform compilation targets: https://proandroiddev.com/archunit-vs-konsist-why-did-we-need-another-linter-972c4ff2622d

Slide 27

Slide 27 text

implementation :app ├AViewModel.kt └BViewModel.kt Konsistの仕組み :feature1 ├CUseCase.kt └DUseCase.kt :featureN ├YUseCase.kt └ZUseCase.kt :konsistTest └KonsistTest.kt ︙

Slide 28

Slide 28 text

:app ├AViewModel.kt └BViewModel.kt Konsistの仕組み :feature1 ├CUseCase.kt └DUseCase.kt :featureN ├YUseCase.kt └ZUseCase.kt :konsistTest └KonsistTest.kt ︙ implementation binary

Slide 29

Slide 29 text

:app ├AViewModel.kt └BViewModel.kt Konsistの仕組み :feature1 ├CUseCase.kt └DUseCase.kt :featureN ├YUseCase.kt └ZUseCase.kt :konsistTest └KonsistTest.kt ︙ implementation binary

Slide 30

Slide 30 text

:app ├AViewModel.kt └BViewModel.kt Konsistの仕組み :feature1 ├CUseCase.kt └DUseCase.kt :featureN ├YUseCase.kt └ZUseCase.kt :konsistTest └KonsistTest.kt ︙ implementation

Slide 31

Slide 31 text

Konsist 完全に理解した✌

Slide 32

Slide 32 text

まとめ ● KonsistはKotlinファイルを直接読み込んで検査 ● JVMに依らずKotlinを使った環境で利⽤可能(KMPサポート) ● 通常のテストと分離して管理‧実⾏がおすすめ ● 通常のテストコードから完全に分離することが可能

Slide 33

Slide 33 text

Thank you for listening!