ロードマップ
| バージョン | テーマ | 完了と言える条件 |
|---|---|---|
| v0.1 | DSL + 検査 + konsist { } | 大規模なプロジェクトを表現でき、検査が通る |
| v0.2 | Gradle 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 以降で高い確率で実装されるでしょう。