コンテンツにスキップ
  • 上級者向け

ロードマップ

バージョンテーマ完了と言える条件
v0.1DSL + 検査 + konsist { }大規模なプロジェクトを表現でき、検査が通る
v0.2Gradle plugin + ドキュメント生成 + テンプレート + baseline(+ IDE プラグイン、実験的)./gradlew katachiDocs でドキュメントが出る。既存の違反を baseline で許容した状態で、新しい違反と、直したのに baseline のファイルに残っている項目でだけテストが落ちる
v0.3 以降declarations { } / レポート出力 / 語彙数の計測既存プロジェクトに入れやすくなる。v0.1 で書いた konsist { } の大半を declarations { } で置き換えられる

v0.3 以降 — 既存プロジェクトへの導入と declarations { }

Section titled “v0.3 以降 — 既存プロジェクトへの導入と declarations { }”

既存プロジェクトに入れやすくするのが v0.3 以降の主題です。今ある違反をとりあえず許容し、新しい違反だけをエラーにする baseline だけは、実験的な機能として v0.2 に先に入りました。

機能 何ができるか
dependsOnlyOn 依存してよい先を許可リストで書く。禁止リスト方式は、書き漏れがあっても検査を通ってしまう。v0.2 の計画から移した
レポート出力 JSON / SARIF で出し、GitHub の PR にアノテーションとして載せる
pairedWith 「すべての Screen に対応する Preview がある」のような網羅性を検査する
語彙数の計測 Role の数と、Role ごとのファイル数を数値で出す
Gradle のモデルに基づくモジュールの解決 projectDir を変えたモジュールや、source set の実際の場所に追従する

この段階の仕様はまだほとんど決まっていません。バージョン番号の割り当ても「v0.3 以降」とひとまとまりです。

declarations { } — konsist { } からの昇格

Section titled “declarations { } — konsist { } からの昇格”

v0.1 の konsist { } は、言ってしまえば逃げ道です。「*UseCase interface と Default*UseCase class だけを置く」のように、ほとんどの Role が言いたいことでも、毎回 Konsist の式で書き下すことになります。

"interface と Default 実装だけを置くこと".konsist {
files.must { file ->
val decls = file.declarations(includeNested = false, includeLocal = false)
decls.size == 2 &&
decls.any { it is KoInterfaceDeclaration && it.name.endsWith("UseCase") } &&
decls.any { it is KoClassDeclaration && it.name.startsWith("Default") }
}
}

同じ規則を、次のように読める形で書けるようにすべきでしょう。v0.3 以降で実現する予定です。

"UseCase" {
declarations {
`interface`("*UseCase")
`class`("Default*UseCase")
}
}

列挙していない top-level 宣言は書けません。layout { } が配置の allow list であるのと同じ意味で、このブロックが中身の allow list になります。

まだ API の設計段階ですが、v0.3 以降で高い確率で実装されるでしょう。