Skip to content

Latest commit

 

History

History
134 lines (100 loc) · 11.6 KB

File metadata and controls

134 lines (100 loc) · 11.6 KB

mille 開発 TODO

本リストは、spec.md に定義された仕様に基づく残タスクです。 完了済みのPRは削除済み(git履歴で参照可)。


実装状況サマリー

現在の mille check は以下を正常に動作させています:

  • ✅ 内部レイヤー依存チェック (dependency_mode)

  • ✅ 外部ライブラリ依存チェック (external_mode)

  • ✅ メソッド呼び出しチェック (allow_call_patterns) — 全レイヤーで定義可能

  • ✅ Rust / Go / TypeScript / JavaScript / Python / Java / Kotlin / PHP サポート

  • [resolve.typescript] tsconfig.json paths エイリアス解決

  • ✅ cargo / npm(WASM) / go install / pip パッケージ配布

  • ✅ リリース後のバージョン自動同期(update-version ジョブ)— mille --version がリリースタグと一致

  • --format terminal / json / github-actions 出力フォーマット切り替え(PR 10)

  • [ignore] セクション — paths / test_patterns 適用(PR 12)

  • mille init コマンド — プロジェクトスキャンして mille.toml 自動生成(PR 11)、必須フィールド external_mode の生成漏れ修正済み

  • mille analyze — 依存グラフ可視化 terminal / json / dot / svg(PR 13)

  • [severity] — 違反種別ごとの重大度設定 + --fail-on オプション(PR 14)

  • mille report external — 外部ライブラリ依存をレイヤーごとにテーブル/JSON出力(PR 15)

  • mille init 精度改善 — 異サブプロジェクトの同名ディレクトリ分離、.venv スキャン除外、Python サブモジュール external_allow マッチング修正(PR #55)

  • mille init Go+TypeScript 対応改善 — go.mod から module_name 自動検出・生成、Go external_allow に完全パス使用、TypeScript サブパス (vitest/configvitest) のマッチング修正(PR #56)

  • ✅ Java 言語サポート — .java ファイルのパース・Internal/External 分類、[resolve.java] module_name 設定、Maven/Gradle自動検出、main レイヤー対応、E2E テスト追加(PR #57)

  • mille init Java/Kotlin 対応 — パッケージ宣言ベースのレイヤー検出(depth 不問)、pom.xml/build.gradle から module_name 自動生成、**/layer/** glob 出力(PR #57)

  • ✅ Kotlin 言語サポート — .kt ファイルのパース(tree-sitter-kotlin)・[resolve.java] リゾルバー共用、flat/Gradle レイアウト対応、E2E テスト追加

  • mille init Python namespace パッケージ修正 — src/ レイアウトで from src.domain... を使うプロジェクトで srcpackage_names に自動追加されるよう修正(PR #62)

  • mille init Python namespace インポートスキャン修正 — from src.domain.entity import X がレイヤー内部依存として正しく検出されるよう修正(classify_py_import フルパス返し + resolve_to_known_dir プレフィックス照合)、src/main.py 等の浅い階層ファイルがスキップされずレイヤーとして登録されるよう修正(PR #62)

  • ✅ ネーミング規則チェック (name_deny / name_targets / name_allow / name_deny_ignore) — レイヤーごとに禁止キーワードを設定し、ファイル名・シンボル名・変数名・コメントに禁止キーワードが含まれる場合に NamingViolation を報告(大文字小文字区別なし・部分一致)。name_allow で false positive を抑制、name_deny_ignore でグロブパターンにマッチするファイルを除外可能。対応言語: Rust/TypeScript/Python/Go/Java/Kotlin/PHP。severity.naming_violation で重大度設定可(PR #65)

  • ParsedNames 構造体によるコンパイルタイムガード — Parser::parse_names の戻り値を ParsedNames に変更し、新しい NameKind 追加時に全パーサーでコンパイルエラーが発生するよう保証。PHP/Python に Variable 抽出を追加(PR #68)

  • ✅ C 言語サポート — .c/.h ファイルの #include パース、"..." → Internal / <stdlib> → Stdlib / <other> → External 分類、Symbol/Variable/Comment naming 抽出、E2E テスト追加(PR #69)

  • name_deny 文字列リテラルチェック — NameKind::StringLiteral / NameTarget::StringLiteral 追加、全8言語パーサーで文字列リテラル抽出、name_targets"string_literal" のオプトアウト可能(PR #71)

  • name_deny 識別子チェック — NameKind::Identifier / NameTarget::Identifier 追加、属性アクセスチェーン(cfg.gcp.bucketgcp)を全8言語パーサーで抽出、name_targets"identifier" のオプトアウト可能(PR #73)

  • ✅ PHP 言語サポート — .php ファイルの use 文パース(simple/aliased/grouped/function/const)・Internal/External/Stdlib 分類、[resolve.php] namespace 設定、composer.json autoload.psr-4 自動検出、PHP stdlib クラス(DateTime/PDO/Exception 等)の Stdlib 自動分類

  • ✅ PATH 位置引数 — 全サブコマンドに [PATH] 位置引数を追加(デフォルト .)。mille check ./other/project で任意ディレクトリを検査可能。CommonArgs + Command::common() exhaustive match で新コマンド追加時にコンパイルエラーで PATH 対応を強制(PR #75)

  • ✅ YAML 言語サポート — naming-only 言語として .yaml/.yml ファイルの name_deny チェックをサポート。マッピングキー→Symbol、スカラー値→StringLiteral、コメント→Comment として抽出。tree-sitter-yaml 0.6 使用(PR #76)

  • mille add コマンド — 既存の mille.toml にディレクトリをレイヤーとして追加。ターゲットをスキャンして [[layers]] を追記、重複時は --force で置換。--name でレイヤー名カスタマイズ可(PR #85)

以下は 設定ファイルにフィールドが存在しても、まだ動作していない 項目です(README に掲載しないよう修正済み): (現在なし)


フェーズ 3: 出力・CI連携(バズりやすい順)

PR 10: GitHub Actions アノテーション出力 (--format github-actions) ✅ 完了

バズりポイント: PRレビュー画面に ::error file=... が差し込まれるため、mille を使っているリポジトリのPRを見た人が「これ何?」となりやすい。CI を通じたパッシブな口コミ効果が最大。

  • CLI に --format オプションを追加(terminal / json / github-actions
  • GitHub Actions (::error file=<path>,line=<n>::<msg>) フォーマッターの実装
  • JSON フォーマッターの実装
  • CI ドキュメントに GitHub Actions 設定例を追記(docs/github-actions-usage.md

PR 11: mille init コマンド(インタラクティブ設定生成)✅ 完了

バズりポイント: 「mille init を叩くだけで始められる」というオンボーディング体験は口コミで広まりやすい。Time-to-first-value の短縮が採用数に直結する。

  • mille init サブコマンドの追加
  • 実際のインポート文を解析してレイヤーと依存関係を推論する(トポロジカルソート)
  • --output <path> / --force フラグのサポート
  • mille.toml 自動生成(副作用なし純粋関数 + E2E テスト)、external_allow も実インポートから生成
  • --depth N フラグ + 自動深度検出(深いネスト構造を正しくロールアップ)

PR 12: [ignore] セクションの実装 ✅ 完了

バズりポイント: テストファイルの除外は必須ユースケース。これがないと「mille 使えない」という評価につながる。採用の障壁を下げるために優先度高。

  • check_architecture::check()ignore.paths のグロブパターンを除外
  • check_architecture::check() でテストファイルに対して依存ルールを緩める(test_patterns
  • E2E テストの追加

PR 13: mille analyze コマンド(依存グラフ可視化)✅ 完了

バズりポイント: DOT/SVG グラフはスクリーンショットとして SNS に貼りやすく、「自分のプロジェクトのアーキテクチャが可視化された」という体験は Twitter/X やブログで紹介されやすい。

  • mille analyze サブコマンドの追加
  • DOT 形式での依存グラフ出力 (--format dot)
  • レイヤー間エッジの集計(ファイルレベルではなくレイヤーレベル)
  • SVG 形式での自己完結グラフ画像出力 (--format svg)
  • JSON 形式出力 (--format json)

PR 14: [severity] 設定の実装 ✅ 完了

バズりポイント: warning/error の区別は段階的導入を可能にし、「既存プロジェクトへの追加しやすさ」を向上させる。採用率に寄与。

  • ViolationDetectorSeverityConfig を渡すようにする(with_severity() コンストラクタ)
  • detect() / detect_external() / detect_call_patterns() で severity を設定値から取得する
  • detect_unknown()ImportCategory::Unknownunknown_import severity で報告
  • --fail-on warning オプションで warning でも exit code 1 にする
  • E2E テストの追加(tests/e2e_severity.rs

PR 15: mille report external コマンド ✅ 完了

  • mille report external サブコマンドの追加
  • 外部ライブラリ依存をレイヤーごとにテーブル形式で出力
  • --format json / --output <path> オプション対応

フェーズ 4: 言語・エコシステム拡張

PR 16: Java サポート ✅ 完了 (PR #57)

  • infrastructure::parser::java 実装 (tree-sitter-java)
  • infrastructure::resolver::java 実装(pom.xml/build.gradle から module_name 自動検出)
  • Java E2E テスト追加(flat/Maven/Gradle レイアウト、main レイヤー)
  • mille init Java/Kotlin 対応(パッケージ宣言ベース、depth 不問)
  • Kotlin サポート(別 PR)— infrastructure::parser::kotlin 実装 (tree-sitter-kotlin)、flat/Gradle レイアウト、E2E テスト

PHP サポート ✅ 完了

  • infrastructure::parser::php 実装 (tree-sitter-php 0.22) — use 文 (simple/aliased/grouped/function/const)・class/function 名・コメントのパース
  • infrastructure::resolver::php 実装 — Internal/External/Stdlib 分類、composer.json PSR-4 自動検出
  • [resolve.php] 設定セクション (namespace / composer_json) の追加
  • ext_to_language.php 追加(mille init で PHP プロジェクト自動検出)
  • README.md 更新(言語サポート表・[resolve.php] リファレンス・Laravel 設定例)

優先度の考え方(バズりやすい順)

順位 PR 理由
1 PR 10 (GitHub Actions) CI経由のパッシブ口コミ。PRレビュー画面への露出が最大
2 PR 11 (mille init) オンボーディング摩擦の除去。「試してみた」投稿が増える
3 PR 12 ([ignore]) 採用障壁の除去。テストファイル除外は必須
4 PR 13 (mille analyze) ビジュアルなデモ素材になる。SNS・ブログ投稿向き
5 PR 14 ([severity]) 既存プロジェクトへの段階的導入を可能にする
6 PR 15 (report external) 高度なユーザー向け
7 PR 16 (Java/Kotlin) エンタープライズ層への展開