コンテンツにスキップ

対応ツール

pyfltrが対応するformatter / linter / testerを言語・用途別に示す。 初めて使う場合ははじめにを参照。設定から実行までの導入手順を確認できる。

言語カテゴリ(Python / JS/TS / Rust / .NET)に属するツールはすべて既定で無効(opt-in)。 preset = "latest" + 言語カテゴリキー(python / javascript / rust / dotnet)のtrue指定だけで、 当該言語の推奨ツール一式がゲートを通過して有効化される。 追加ツールや個別の無効化が必要な場合のみ{command} = true / {command} = falseを書き足す。 詳細は設定項目を参照。

Python系

対応するPython系ツールはruff-format / uv-sort / pylint / mypy / ruff-check / pyright / ty / pytestの8種。 このうちtyのみpreset非収録のため、必要に応じてty = trueを個別指定する。 Python系ツール一式は本体依存に同梱されているため、uvx pyfltr単発で利用できる。

  • Formatters: ruff format / uv-sort(依存定義のソート)
  • Linters: pylint / mypy / ruff check / pyright / ty
  • Testers: pytest

JS/TS系

対象はprettier / tsc / eslint / biome / oxlint / vitestの6種(TypeScriptも同カテゴリ)。 js-runner設定で起動方式(pnpx / pnpm / npx等)を切り替える。

  • Formatters: prettier
  • Linters: tsc(型チェック。pass-filenames = falseでプロジェクト全体を対象)/ eslint / biome / oxlint
  • Testers: vitest

Rust系

推奨ツール一式はcargo-fmt / cargo-clippy / cargo-check / cargo-test / cargo-denyの5種。 プロジェクト全体(crate単位)を対象とし、{command}-runner既定値"bin-runner"に従い グローバルbin-runner既定"mise"によりmise経由で起動する。 PATH上のcargo等を直接実行したい場合はcargo-fmt-runner = "direct"等を設定する。

  • Formatters: cargo fmt
  • Linters: cargo clippy / cargo check / cargo deny(依存ライセンス・脆弱性チェック)
  • Testers: cargo test

.NET系

推奨ツール一式はdotnet-format / dotnet-build / dotnet-testの3種。 プロジェクト全体(solution単位)を対象とし、{command}-runner既定値"bin-runner"に従い グローバルbin-runner既定"mise"によりmise経由で起動する。 PATH上のdotnetを直接実行したい場合はdotnet-format-runner = "direct"等を設定する。 direct実行時は環境変数DOTNET_ROOT配下にdotnet実行ファイルがあれば優先採用する。

  • Formatters: dotnet format
  • Linters: dotnet build(ビルドエラーをlint段階で検出)
  • Testers: dotnet test

ドキュメント系

  • Linters: markdownlint-cli2 / textlint / designmd / lychee

pyfltrの設定キーとコマンド名はmarkdownlint(例: markdownlint = true--commands=markdownlint)だが、 実際に起動するのはmarkdownlint-cli2である。 これは設定キー名の簡潔さを優先した意図的な設計であり、利用者はこの対応関係を把握した上で設定・コマンド指定をする。

designmdの設定キーとコマンド名(例: designmd = true--commands=designmd)は 内部識別子であり、実際に起動するnpmパッケージは@google/design.mdである。 @google/design.mdはpyproject.tomlのドット区切りキーと衝突するため、pyfltrは内部識別子としてdesignmdを採用する。 対象ファイル名は仕様上DESIGN.md固定で、本リポジトリ内に該当ファイルがあれば自動的に対象となる。

lycheeはRust製のリンク切れチェッカーで、Markdown・HTML中の外部URL到達性を検証する。 bin-runner経由(既定はmise)で起動する。 ネットワーク到達失敗による判定変動を抑えたい場合はlychee-severity = "warning"で警告扱いに切り替えられる。

その他

  • Formatters: shfmt(既定で無効)/ taplo(TOML formatter、既定で無効)
  • Linters
    • 一般: typos(PyPI依存)/ actionlint / ec(editorconfig-checker、既定で無効)/ shellcheck(既定で無効)/ glab-ci-lint(既定で無効)
    • 日本語文体: colloquial-check(既定で無効)
    • YAML / Dockerfile / シークレット系: yamllint(既定で無効)/ hadolint(Dockerfile、既定で無効)
    • シークレット検出・SAST: gitleaks(既定で無効)/ semgrep(既定で無効)/ bandit(既定で無効)
    • SQL: sqlfluff(既定で無効)
    • 依存の脆弱性監査: uv-audit / pnpm-audit / npm-audit / yarn-audit(いずれも既定で無効)
  • 統合: pre-commit(.pre-commit-config.yamlのhookを統合実行)

既定で無効(opt-in)のツールは、利用時にpyproject.toml{command} = trueを設定する。 特記事項を以下に示す。

  • taplo: Rust製のTOMLフォーマッター/リンター。bin-runner経由で実行し、shfmtと同様の2段階実行(check→format)を行う
  • yamllint: Python製のYAMLリンター。PATH上またはyamllint-pathで指定した実行ファイルを直接呼び出す
  • hadolint: Dockerfileに特化したリンター。bin-runner経由で実行する
  • gitleaks: Goバイナリのシークレット検出ツール。gitleaks detectでリポジトリ全体を対象に実行する
  • semgrep: Python製の多言語SAST。ルールセット指定が必須のため既定で無効。 利用時はsemgrep-args = ["scan", "--json", "--error", "--config=auto"]等で実際のルールセットを指定する
  • sqlfluff: Python製のSQL専用linter。dialect指定が必須のため.sqlfluff配置を前提とする。 sqlfluff lintサブコマンドをlinterとして起動する(sqlfluff formatサブコマンドは対象外)
  • bandit: Python製のsource-level SAST。既定で無効(opt-in)。 検出された違反はtest_id(B101等)とseverity(LOW/MEDIUM/HIGH)で識別する。 起点cwd直下の設定ファイルを--configfile <絶対パス>形式でbanditへ渡す(bandit本体は自動読み込みしない)。 探索対象はpyproject.toml.bandit.yaml.bandit.toml.bandit(INI形式)はbandit本体の--recursive時自動探索に委ねる
  • glab-ci-lint: glab ci lint経由でGitLab CI設定を構文検証する。 GitLab API認証とネットワーク接続が必須なため、CIや初学者環境で誤って失敗しないよう既定で無効化している
  • uv-audit / pnpm-audit / npm-audit / yarn-audit: 依存パッケージの脆弱性を監査する。 それぞれパッケージマネージャーのauditサブコマンドを起動し、外部脆弱性データベースへの問い合わせを伴うため既定で無効
  • colloquial-check: LLMが頻繁に出力する口語的な日本語表現を検出する内蔵linter。 既定で無効(opt-in)。有効化時もcolloquial-check-severity = "warning"既定により CI/pre-commitを失敗させない。対象ファイルは全種別(*)とし、pyfltr既定のexclude・.gitignore尊重に従う。 辞書ファイル(denylist・allowlist)はpyfltrに同梱する

プリセット指定と言語カテゴリゲートによる有効化の詳細は設定項目を参照。

個別に有効化・無効化する方法やpython-runner/js-runner/bin-runnerなどの補助設定は 設定項目(ツール別)を参照。

検索・置換機能

pyfltrは横断検索(grep)と置換(replace)も内蔵する。 pyfltr設定のexclude/extend-exclude/respect-gitignoreを尊重するため、 node_modulesbuild配下のノイズが混入しない。 詳細は検索と置換を参照。

コンセプト

  • 各種ツールをまとめて並列で呼び出し、実行時間を短縮する
  • 各種ツールのバージョンには極力依存しない(各ツール固有の設定には対応しない)
  • excludeの指定方法が各ツールで異なる問題を、pyfltr側で解決してツールに渡すことで吸収する
  • formatterはファイルを修正しつつエラーとしても扱う(pyfltr ciではformatterによる変更も失敗と判定する)
  • 設定は極力pyproject.tomlに集約する