Deslop: AI生成TypeScriptのためのOxlintルール

概要

Deslopは、Oxlintエコシステム向けの専門的なプラグインであり、十分な根拠を欠いたコード、安全でない型アサーションへの依存、あるいは不適切なAPI使用など、LLMによって生成されがちな「AIスロップ(AI-slop)」と呼ばれるコードパターンを特定・拒否するための独自のルールセットを提供します。DeslopはTypeScriptコードに対してより厳格な制約を課すことで、AI支援による機能開発を統合する際のコードベースの整合性を維持する手助けをします。

主要な機能とルール

Deslopは、そのルールを型安全性、コード品質、テスト基準という3つの主要な領域に分類しています。このプラグインは、もともと anti-slop プロジェクトで開発されたルールを基盤としており、deslop/* 名前空間の下で追加のカスタムルールによって拡張されています。

型安全性と根拠

これらのルールは、TypeScriptの型システムを安全でないアサーションで回避しようとするAIの一般的な傾向を防ぐように設計されています。主なルールは以下の通りです。

  • no-chained-type-assertions: 型の根拠を捏造するような、ネストされた as や山括弧によるアサーションを拒否します。
  • no-unknown-parameters および no-unknown-returns: 関数シグネチャや戻り値のコントラクトにおける unknown の使用を禁止し、明示的な型定義を強制します。
  • require-safety-comment-for-type-assertion: const アサーション以外に対して不変の正当化を義務付け、開発者がなぜそのアサーションが必要なのかを文書化することを保証します。

コード品質とAPIの使用

過度に複雑なコードや慣用的でないコードの生成を防ぐため、DeslopはLLMが頻繁に使用する特定のAPIパターンを対象としています。

  • no-reflect-apply および no-reflect-get: Claudeのようなモデルによって過剰に使用されがちな、グローバルな Reflect メソッドの使用を制限します。
  • no-array-filter-map: 非効率な隣接する先行評価の配列操作を防ぎ、よりパフォーマンスの高いイテレータパイプラインを推奨します。

テスト基準

Deslopには、AI生成コードに依存する際に不可欠となるテストスイートの信頼性を向上させるためのルールが含まれています。これには以下が含まれます。

  • no-module-mocking: より良い依存関係の注入を促進するため、VitestやJestのモジュールモックの使用を拒否します。
  • no-poor-substring-tests: 検証のために弱い部分文字列マッチングに依存しているテストにフラグを立てます。

開発者の反応とユースケース

Deslopや類似のツールを採用した初期ユーザーは、AI支援開発をスケールさせるためには積極的なリンティングが前提条件であると強調しています。開発者は、こうしたガードレールがなければ、AIの関与度が高いコードベースを維持管理することは困難になると指摘しています。

"私は最近、AI支援による機能開発に大きく舵を切ったプロジェクトで働いていますが、非常に防御的で攻撃的なlint設定と約80%に近いテストカバレッジがなければ、これらの開発のほとんどは到底不可能だったでしょう。" — @SSchick

ユーザーはまた、異なる言語やLLMの出力全体でコード品質を確保するために、Oxlintを他のASTベースのツールと組み合わせることの重要性を強調しました。ast-grep-essentials のようなプロジェクトは、AI生成コードのためのカスタム検証パイプラインを構築するチームにとって、補完的なツールとして頻繁に挙げられています。

インストールと使用方法

Deslopはnpmパッケージとして配布されており、Bun、Deno、Node.jsを含むあらゆるOxlint JavaScriptプラグインランタイムと互換性があります。統合するには、ユーザーは oxlint 設定ファイルにプラグインを追加します。

import { defineConfig } from "oxlint";
import { configs as deslopConfigs } from "ai-deslop";

export default defineConfig({
  jsPlugins: ["ai-deslop"],
  options: deslopConfigs.recommended.options,
  rules: deslopConfigs.recommended.rules
});

より詳細な制御を必要とするチーム向けに、このプラグインは no-duplicate-types や Tailwind CSS v4 用の canonical-class-names など、特定のプロジェクトのニーズに基づいて有効化できる一連のオプトインルールも提供しています。

Sources