Regex-LE について
Regex-LEは、開発者やコーディングエージェント向けに、コード内の正規表現を抽出・テストし、ReDoSリスクを調べます。エディター拡張、CLI、MCPサーバーとして利用でき、検出したリスクの再現入力も示します。
主な機能
- 01対応言語の正規表現を抽出
- 02一致位置とキャプチャグループを表示
- 03構文エラーとReDoSリスクを検査
- 04検出時の再現入力を提示
- 05フォルダーやワークスペースをスキャン
活用シーン
- 01ソースファイル内の正規表現の確認
- 02壊滅的バックトラッキングを起こす入力の特定
- 03ワークスペースやCIで正規表現を検査
- 04Agentによるファイル内パターンの抽出と評価
MCP 対応
`regex-le-mcp`はstdio経由で`extract_patterns`ツールを提供し、渡された内容からパターン、フラグ、位置、ReDoS判定を返します。ファイル読み込みやネットワークリクエストは行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| format | string | いいえ | ドキュメントの言語を指定します。その言語固有の表記のみを検索します:javascript、typescript、python、rust、go、java、ruby、php、csharp。一般的な拡張子とエイリアスも使用できます。省略可能です。言語を指定しない場合はすべての表記を検索するため、見つかるパターンは増えますが、パスをパターンと誤認する可能性も高くなります。 |
| content | string | はい | スキャンするソーステキスト。 |
| filename | string | いいえ | `format` がない場合に言語を推測するためのファイル名。例:"validate.py"。 |
| maxResults | integer | いいえ | 返されるパターン数の上限(デフォルトは 500)。meta.truncated は省略されたものがあるかどうかを示します。 |
詳細
Regex-LE:手間なく正規表現を抽出・検証
現在のファイル内の正規表現パターンを検索、テスト、検証
リテラルパターン、RegExp コンストラクター、ReDoS スクリーニング
役に立ちましたか? スターや評価を付けると、ほかの開発者に見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace
できること
任意のファイルを開き、3つのコマンドのいずれかを実行します。Extract はドキュメント内で見つかったすべての正規表現パターンを一覧表示します。Test は、見つかったパターンまたは手動で入力したパターンをファイルの内容に対して実行し、実際の行・列位置とキャプチャグループ(名前付きグループを含む)を示して、一致箇所を報告します。Validate は、見つかったすべてのパターンの構文エラーをチェックし、壊滅的なバックトラッキングの可能性をスクリーニングして、それを引き起こす入力を報告します。VS Code、および Cursor や VSCodium などの VS Code ベースのエディターで動作します(Open VSX からインストールできます)。
インストール
| 場所 | 入手できるもの | インストール |
|---|---|---|
| VS Code | エディター内のリンターとテスター | Marketplace |
| Cursor、VSCodium、Windsurf | 同じ拡張機能 | Open VSX |
| ターミナルまたは CI ステップ | ディレクトリーツリー全体に対する同じ実行と終了コード | cargo install regex-le · crates.io |
| Node 経由のターミナル | Rust 版とバイト単位で完全に一致する同じコマンドライン | npx regex-le · npm |
| Node 経由の任意の MCP エージェント | stdio 経由の extract_patterns | npx regex-le-mcp · npm |
AI エージェントから使用する
同じエンジンがMCPサーバーとして動作するため、コマンドを自分で実行しなくても、エージェントから直接呼び出せます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストールは不要です — 拡張機能がエージェントモードで extract_patterns を登録します |
| Claude Code | claude mcp add regex-le -- npx -y regex-le-mcp |
| Cursor、Windsurf、その他 | npx regex-le-mcp を指定します |
extract_patterns(content, format?, filename?, maxResults?)
すべてのパターンについて、フラグ、1始まりの位置、ReDoS 判定を返すため、「このファイル内に危険な正規表現はありますか?」という確認を、2回ではなく1回の呼び出しで行えます。爆発的な処理を報告する判定には、その原因となった witness が含まれるため、エージェントは結果を鵜呑みにせず、検出内容を確認できます。
サーバーはコンテンツを受け取ってデータを返すだけです。ファイルの読み込みや、独自のネットワークリクエストは行いません。npm の regex-le-mcp として、またMCP レジストリの io.github.nolindnaidoo/regex-le として公開されています。
手動で設定する — MCP 設定ファイルを使用する任意のホスト
多くのホストは JSON 設定を読み込みます。次のエントリを1つ追加してください。
{
"mcpServers": {
"regex-le": {
"command": "npx",
"args": ["-y", "regex-le-mcp"]
}
}
}
初回実行時に -y を指定すると、インストール確認を省略できます。リリースを追跡したくない場合は、[email protected] のようにバージョンを固定してください。
起動のたびに npx を使いたくない場合は、一度インストールしてバイナリを指定してください。
npm install -g regex-le-mcp
{
"mcpServers": {
"regex-le": { "command": "regex-le-mcp" }
}
}
このサーバーは stdio 経由で MCP を使用し、環境変数、API キー、独自の設定は必要ありません。何かに接続する前に確認するには、次のコマンドを実行してください。
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y regex-le-mcp
ツールの一覧が出力されて終了します。extract_patterns が表示されれば、サーバーは動作しています。
ドキュメント全体をスキャンするため、複数行に分かれたコンストラクターも見つかります。ドキュメントの言語に応じて、検索する表記が選ばれます。
| 言語 | 形式 | 例 |
|---|---|---|
| JavaScript、TypeScript、Ruby | リテラル | /[a-z]+/gi |
| JavaScript、TypeScript | コンストラクター | new RegExp('\\d{4}-\\d{2}', 'g') — 複数行も含みます |
| JavaScript、TypeScript | コンストラクターの直接呼び出し | RegExp("x|y", "i") |
| Python | re.compile など | re.compile(r'(a+)+') |
| Rust | Regex::new、RegexBuilder::new | Regex::new(r"(a+)+") |
| Go | regexp.MustCompile、regexp.Compile | regexp.MustCompile(`(a+)+`) |
| Java | Pattern.compile、Pattern.matches | Pattern.compile("(a+)+") |
| Ruby | Regexp.new | Regexp.new('(a+)+') |
| PHP | preg_match など | preg_match('/(a+)+/i', $s) |
| C# | new Regex(…)、Regex.IsMatch など | new Regex(@"(a+)+") |
認識されない言語であることは、処理が拒否されるという意味ではありません。上記のすべての表記が検索されます。言語を指定すると精度が上がります。Python ファイルでは /…/ の裸の表記を検索しないため、#!/usr/bin/env python がパターンとして読み取られることはありません。
意図的に抽出しないもの:
- 除算、日付、ファイルシステムのパス(
a / b、10/29/2025、/usr/local/bin):識別子、数値、)、]、.、または別の/の直後にある/は、正規表現として扱われません。ただし、returnなどのキーワードの後では扱われます。この判定を行うのは、/…/の裸の表記が有効な場合だけです。 - これらの言語のいずれかで正しい形式の正規表現にならない候補、または無効なフラグや重複したフラグを含む候補。他言語の表記は構文エラーとは見なされません。
re.compile(r'(?P<word>\w+)+@')は記述どおりに報告され、引き続きフラグが付けられます。 - パターン引数が変数であるコンストラクター呼び出し、または
${…}による置換を含むテンプレートリテラル。文字列リテラル、静的テンプレートリテラル、およびString.raw`…`は読み取られます。 - JavaScript のリテラルまたはコンストラクター以外に指定されたフラグ。他のすべての言語では、フラグは文字列引数ではなく、定数、ビルダーメソッド、またはインラインの
(?i)で設定されます。 - コメントや文字列の中に書かれたものはすべて。 危険性を説明する JSDoc ブロック、コメントアウトされた行、例を含む Python のドキュメント文字列は、いずれもコードではありません。文章に対して報告を行うとビルドが失敗します。このルールは候補がどこから始まるかを基準にするため、
re.compile(r"(a+)+b")では引用符で囲まれた引数も保持されますが、その行全体を含むドキュメント文字列は文章として扱われます。これは言語が判明している場合に限ります。どの言語も認識されないドキュメントは、記述どおりにスキャンされます。誤った文法をもとにコメントのルールを推測すると、実在しないパターンではなく、本物のパターンを除外してしまうためです。
パターンとフラグの組み合わせが重複している場合は、1 回だけリストされます。これはヒューリスティックによる字句解析であり、9 つの言語に対応するパーサーではありません。文字列内のスラッシュも、文脈が式のように見える場合は検出されることがあります。
ReDoS のスクリーニング
Validate(および、危険なパターンを実行する前の Test)は、入力によって壊滅的なバックトラッキングが確実に発生することが判明した場合に限り、そのパターンを報告します。さらに、その入力を witness として併記します。
パターンが実行されることはありません。パターンをオートマトンにコンパイルし、バックトラッキングエンジンがたどるのと同じ方法でそのオートマトンを探索します。深さ優先で、すべてのエッジを順番にたどり、行き止まりになったら記録せずに巻き戻しながら、ステップ数を数えます。攻撃文字列を構築し、2 つの長さで繰り返し、ステップ予算に対して測定します。そのため、検出結果は反証可能です。witness を実行して確かめてください。
パターンの 形状 に基づいて報告することはありません。形状は、どちらの方向でも予測材料として不十分です。^[a-z0-9]+(?:-[a-z0-9]+)*$ は危険そうに見えますが、各反復で内側の文字クラスが生成できない - を必ず消費するため、安全です。一方、(.*a){20} は上限があるように見えますが、安全ではありません。区切り文字によって分割が強制されるかどうかは文字列に関する事実なので、構文を調べるだけでは判定できません。
検出されないことは、安全の保証ではありません。 バックリファレンスや先読み・後読みなど、このツールで解釈できない構文を含むパターンは、安全とは判定されず、not decided: <reason> として返されます。
レポートには、入力サイズに対する実行時間に基づく大まかなパフォーマンススコアも含まれます。ベンチマークではなく、参考情報として扱ってください(メモリは測定されません)。
フォルダーまたはワークスペース全体を対象にする
Extract と Validate は、開いているドキュメントを読み取ります。どちらにも、ディスク上の複数のファイルを読み取って 1 つのレポートを出力する形式があります。
- ワークスペース全体:コマンドパレットから
Regex-LE: Extract Patterns from WorkspaceまたはRegex-LE: Validate Patterns in Workspaceを実行します。 - 1 つのフォルダー:エクスプローラーでフォルダーを右クリックし、
Extract Patterns from FolderまたはValidate Patterns in Folderを選択します。コマンドパレットから同じ 2 つのコマンドを実行すると、フォルダーの選択を求められます。
Extract
プロジェクト内では同じパターンが複数の場所に記述されるため、レポートには重複を除いたパターンと、それぞれの記述場所が、使用箇所が多い順に表示されます。
# Regex-LE workspace report
`my-project` · 3 file(s) read · 3 distinct pattern(s) in 3 file(s)
| Pattern | Files |
|---|---|
| `/\d+/g` | 2 |
| `/\d+/` | 1 |
| `/^x$/` | 1 |
## `/\d+/g` (2)
- `src/a.ts` · **1:11**
- `src/b.ts` · **1:11**
## `/\d+/` (1)
- `src/c.py` · **2:5**
## `/^x$/` (1)
- `src/a.ts` · **2:11**
テキストとフラグが同じ場合、2 つのパターンは同一とみなされます。そのため、/\d+/g と /\d+/ は別々に一覧表示されます。パターンは、各ファイル内で最初に記述された箇所について、ファイルごとに 1 回だけ数えられます。
Validate
レポートの冒頭には、確認が必要なものを含むファイルの表が表示され、その後に、停止する可能性のあるパターンが一覧表示されます。
# Regex-LE workspace report
`my-project` · 3 file(s) read · 5 pattern(s), 1 can hang, 1 not checked
| File | Patterns | Can hang | Not checked |
|---|---|---|---|
| `src/a.ts` | 2 | 1 | 0 |
| `src/b.py` | 2 | 0 | 1 |
> 1 other file(s) hold only patterns with no finding.
## `src/a.ts` (1)
- **2:14** · `/(a+)+$/` · can hang (high): exponential backtracking: 2000000 steps on 41 characters, against 229328 on 20 · complexity 0/100
停止する可能性ありとは、入力によってパターンにバックトラッキングが発生することが判明したという意味です。これは、ReDoS のスクリーニングで説明したものと同じ検査です。未チェックとは、バックリファレンスや先読み・後読みを使用しているため、パターンの安全性を検査で判定できなかったという意味です。これはパターンに対する判定ではなく、レポートにはその理由が示されます。
別の言語のエンジン向けに記述されたパターンも、拒否されずに読み取られます。Python の (?P<year>\d{4})、アトミックグループ、所有量指定子も、ほかのパターンと同様に検査されます。
一覧に表示されるのは、停止する可能性のあるパターンだけです。それ以外はファイルごとに数えられます。regex-le.workspace.scanIncludePassing を有効にすると、検出された内容とともにすべてのパターンが一覧表示されます。regex-le.workspace.scanProblemsEnabled を有効にすると、停止する可能性のあるパターンが問題パネルにも表示され、各項目をクリックして該当箇所に移動できます。
スキャン対象。 抽出機能が認識する 9 つの言語(JavaScript、TypeScript、Python、Rust、Go、Java、Ruby、PHP、C#)のソースファイルが対象です。それ以外のファイルでは、すべてのパターン表記を一度に検索するため、README 内のパスは 1 つのパスとして読み取られます。scanPatterns を指定すると、対象を拡張できます。ファイルはディスクから読み取られるため、保存されていない編集内容は反映されません。安全上のサイズ制限を超えるファイルや、UTF-8 テキストではないファイルは読み取り対象外になります。最大 5,000 ファイル、または一覧表示されるパターン数が 10,000 件に達すると処理を停止します。レポートの末尾には、対象外にした項目がそれぞれ 1 行ずつ記載されるため、短いレポートをプロジェクトに問題がない証拠と誤解することはありません。
スキップされる対象と変更方法。 既定では 3 つのスイッチがオンになっています。Settings でそれぞれ個別にオフにできます。
| スイッチ | スキップするもの |
|---|---|
scanUseDefaultExcludes | 依存関係フォルダー、ビルド出力、ツールキャッシュ、ロックファイル。全リストは下記を参照してください |
scanRespectGitignore | プロジェクトの .gitignore ファイルでスキップされるもの |
scanSkipBinaryFiles | 画像、フォント、アーカイブなどのテキストではないファイル |
スイッチをオフにせずに結果を調整するリストが 2 つあります。さらに除外するには、パターンを scanExcludes に追加します。スイッチによってスキップされるものを読み取るには、scanAlwaysInclude に追加します。
{
// Also skip the test fixtures.
"regex-le.workspace.scanExcludes": ["**/fixtures/**"],
// Read the vendored code, though the built-in list skips it.
"regex-le.workspace.scanAlwaysInclude": ["**/vendor/**"]
}
Regex-LE: Open Settings を開くと、これらすべてが設定エディターに表示されます。
組み込みリスト
場所を問わず除外されるフォルダー:
.git、.hg、.svn、node_modules、bower_components、jspm_packages、.pnpm-store、.yarn、vendor、site-packages、Pods、Carthage、dist、build、out、target、_build、_site、dist-newstyle、zig-out、storybook-static、cdk.out、DerivedData、CMakeFiles、.next、.nuxt、.output、.svelte-kit、.angular、.astro、.docusaurus、.vuepress、.expo、.turbo、.parcel-cache、.cache、.sass-cache、.jekyll-cache、.dart_tool、.pub-cache、.gradle、.kotlin、.cxx、.externalNativeBuild、captures、ephemeral、.symlinks、.swiftpm、.build、.bundle、.stack-work、.zig-cache、.godot、elm-stuff、.vercel、.netlify、.serverless、.aws-sam、.terraform、.venv、venv、__pycache__、.tox、.nox、.mypy_cache、.pytest_cache、.ruff_cache、.ipynb_checkpoints、.eggs、coverage、htmlcov、.nyc_output、.vscode-test、.idea、.vs、xcuserdata、*.egg-info
場所を問わず除外されるファイル:
*.min.js、*.min.css、*.map、*.snap、*.lock、package-lock.json、pnpm-lock.yaml、npm-shrinkwrap.json、go.sum、*.pbxproj、*.iml、local.properties、output-metadata.json、.flutter-plugins、.flutter-plugins-dependencies、.packages、Generated.xcconfig、flutter_export_environment.sh、GeneratedPluginRegistrant.*、fastlane/report.xml、fastlane/test_output/**、doc/api/**
多くのプロジェクトで通常のフォルダーとして使われるため、リストに含まれていないもの:bin、obj、tmp、logs、public、generated。これらを生成するプロジェクトでは Git で無視され、スキャン時に .gitignore が読み取られます。
スキャンの動作を決める設定は、Settings にあります。位置設定は、単一ファイルのコマンドと同様に適用されます。
CLI
同じリンターをターミナルまたはシェルパイプラインから実行できます。Rust CLI は
crate/ にあり、拡張機能と同じコーパス
crate/fixtures/ を共有しているため、両者が同じ
ドキュメントを異なる方法で読み取ることはありません。同じコマンドラインは
npm からも regex-le として提供されており、Rust がなく Node がある
マシンでも使えます。また、CI では 3 つのオペレーティングシステムで
クレートとバイト単位で一致することを確認しています。
regex-le . # every vulnerable pattern; JSON on stdout when piped
regex-le --severity high src/ # only the exponential shapes
regex-le --all src/ # every pattern, vulnerable or not
regex-le mcp # the same lint over MCP on stdio
npm(regex-le)または crates.io(regex-le)からインストールできます。どちらも同じ regex-le コマンドをインストールします。
npm install -g regex-le # or run it once: npx regex-le
cargo install regex-le
終了コード:脆弱性がない場合は 0、検出結果が 1 つ以上ある場合は 1、質問の形式が不正な場合は 2 です。そのため、regex-le . || exit 1 を CI のゲートとして使えます。
移植されているのはリンター部分であり、テスターではありません。 JavaScript のセマンティクスでパターンをテキストに対して実行するには JavaScript エンジンが必要です。また、ほぼ同じ動作を実現するだけでは、同じパターンに対して 2 つのフロントエンドが異なる一致結果を報告することになりかねません。テストはエディターで行う作業なので、ここで行ってください。リンターにはエンジンが一切必要ありません。ReDoS の判定では、パターンテキストから構築したオートマトンをステップ予算内でたどります。そのため、低コストで決定論的な CI ステップとして実行できます。
この拡張機能でのスクリーニングとまったく同じように、実証できる内容を報告し、読み取れないものは拒否します。
コマンド
| コマンド | 説明 |
|---|---|
Regex-LE: Test Regex | 見つかったパターンまたは入力したパターンをファイルに対してテストします |
Regex-LE: Extract Patterns | ドキュメント内で見つかったすべての正規表現パターンを一覧表示します |
Regex-LE: Extract Patterns from Workspace | ワークスペース内のすべてのソースファイルにある重複のないパターンと、それぞれを含むファイルを一覧表示します |
Regex-LE: Extract Patterns from Folder | 1 つのフォルダーについて同様に一覧表示します。エクスプローラーでフォルダーを選択したときにも使えます |
Regex-LE: Validate Regex | 見つかったすべてのパターンについて、構文と ReDoS のレポートを表示します |
Regex-LE: Validate Patterns in Workspace | ワークスペース内のすべてのソースファイルにある各パターンと、ハングする可能性があるパターンを表示します |
Regex-LE: Validate Patterns in Folder | 1 つのフォルダーについて同様に表示します。エクスプローラーでフォルダーを選択したときにも使えます |
Regex-LE: Open Settings | Regex-LE の設定を開きます |
Regex-LE: Help & Troubleshooting | 組み込みドキュメントを開きます |
既定では、どのコマンドにもキーは割り当てられていません。エディターの キーボードショートカット で、任意のコマンドにキーを割り当ててください。
設定
| 設定 | デフォルト | 説明 |
|---|---|---|
regex-le.openResultsSideBySide | true | 結果を現在のエディターの横に開きます |
regex-le.showPositions | true | 各パターンと一致箇所の行番号と列番号を表示します |
regex-le.copyToClipboardEnabled | false | 結果をクリップボードにもコピーします |
regex-le.clipboardIncludesPositions | true | コピーに行番号と列番号を含めます |
regex-le.notificationsLevel | silent | all = すべての通知、important = 警告とエラー、silent = エラーのみ |
regex-le.safety.enabled | true | 非常に大きなファイルや出力に対するガードレール |
regex-le.safety.fileSizeWarnBytes | 1000000 | このファイルサイズを超える場合は処理を拒否します |
regex-le.safety.largeOutputLinesThreshold | 50000 | この行数を超える結果ドキュメントは拒否します |
regex-le.statusBar.enabled | true | ステータスバー項目を表示します |
regex-le.telemetryEnabled | false | ローカルのみのイベントログ(プライバシーを参照) |
regex-le.regex.redosDetectionEnabled | true | テスト/検証時に ReDoS をスクリーニングします |
regex-le.regex.maxMatchLimit | 1000 | テストごとに収集する一致箇所の上限(10~10000) |
regex-le.workspace.scanPatterns | 9 つの言語のソースファイル | フォルダーまたはワークスペースのスキャンで読み取るファイル |
regex-le.workspace.scanUseDefaultExcludes | true | 依存関係フォルダー、ビルド出力、キャッシュ、ロックファイルをスキップします |
regex-le.workspace.scanRespectGitignore | true | プロジェクトの .gitignore ファイルで除外されるものをスキップします |
regex-le.workspace.scanSkipBinaryFiles | true | 画像、フォント、アーカイブなどのテキスト以外のファイルをスキップします |
regex-le.workspace.scanExcludes | [] | glob パターンで、スキップするファイルを追加します |
regex-le.workspace.scanAlwaysInclude | [] | 上記 3 つのいずれかでスキップされる場合でも読み取るファイル |
regex-le.workspace.scanMaxFiles | 5000 | 1 回のスキャンで読み取るファイルの上限 |
regex-le.workspace.scanMaxResults | 10000 | 読み取りを停止するまでにスキャンで一覧表示するパターンの上限 |
regex-le.workspace.scanIncludePassing | false | 検証スキャンで、ハングする可能性があるものだけでなくすべてのパターンを一覧表示します |
regex-le.workspace.scanProblemsEnabled | false | 検証スキャンで、ハングする可能性があるパターンも「問題」パネルに表示します |
言語
英語以外の 12 言語:
ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)
両方の部分に対応しています。マニフェスト(コマンドタイトル、設定名と説明)と、 拡張機能の実行中に表示されるすべてのもの(通知、ステータスバー、クイックピック、 プロンプト)です。拡張機能は VS Code の表示言語に従うため、エディターに すでに設定されている言語に合わせて表示されます。独自の設定はありません。
プライバシーとセキュリティ
- ネットワークアクセスはありません。 この拡張機能はデータをどこにも送信しません。
telemetryEnabled設定では、確認可能なローカルの出力チャンネル(Regex-LE Telemetry)にイベントを書き込むだけです。 - ReDoS 画面で重大度が高いと判定されたパターンをテストする際は、事前に確認を求めます。
- MCP サーバーも同じ方針を守ります。 引数としてコンテンツを受け取り、データを返します。ファイルシステムへのアクセス、ネットワーク呼び出し、テレメトリーはありません。エージェントにはすでにファイル読み取りツールがあるため、サーバー内で重複させても、機能が増えないままパストラバーサルの攻撃対象が増えるだけです。サーバーがいずれかに到達しうるものをインポートすると、
check:mcp-bundleがビルドを失敗させます。 - エラー通知では、ホームディレクトリと認証情報のような形式の文字列を伏せます。
- 評価の案内は最大2回だけです。 3回目の正常な使用時に、評価していただけるかどうかを一度尋ねます。後でを選んだ場合、または案内を閉じた場合は、20回目にもう一度だけ尋ねます。今後表示しないを選ぶと、案内は終了します。
notificationsLevelをご自身でimportantまたはsilentに設定すると、案内は無効になります。回数は VS Code の拡張機能ストレージに保存され、データがどこかに送信されることはありません。評価するを選ぶと、インストール元(VS Code Marketplace または Open VSX)の掲載ページがブラウザーで開きます。
ドキュメント
| 内容 | 場所 |
|---|---|
| ツールが応答できる内容 — 範囲、出力仕様、拒否、対象外 | crate/SPEC.md |
| 拡張機能の構築と仕組み — アーキテクチャ、不変条件、ツールチェーン、リリース | AGENTS.md |
| CLI の構築と仕組み | crate/AGENTS.md |
| 変更内容 | CHANGELOG.md · crate/CHANGELOG.md |
| このツールのページと、ほかの15個 | letools.dev/tools/regex-le |
パフォーマンス
| 入力 | サイズ | 検出数 | 時間 | 速度 | スキャン速度 |
|---|---|---|---|---|---|
| リテラルを含む JS | 1.12 MB | 25,000 | 44.19 ms | 565,679/sec | 25.4 MB/s |
| コンストラクターを含む JS | 1.27 MB | 25,000 | 41.86 ms | 597,268/sec | 30.3 MB/s |
| 正規表現を含まないソース | 1.24 MB | 0 | 18.75 ms | — | 66 MB/s |
ウォームアップ後に7回実行した際の中央値です。Apple M5 Pro、RAM 24 GB、Node 24.3.0 で測定しました。入力はチェックインされているのではなく、scripts/benchmark.ts によって生成されるため、上記のサイズは実際に測定された値です。bun run benchmark で再現できます。
これらの値はマシン固有であり、CI ではアサートされません。ビルドを左右するベンチマークでは、ランナーがどれほどビジーだったかしかわかりません。
テスト
| 指標 | カバレッジ |
|---|---|
| ステートメント | 84.57% |
| 分岐 | 74.84% |
| 関数 | 85.10% |
| 行 | 87.25% |
28ファイルにわたる401件のテストケースに加え、実際の VS Code 拡張機能ホストで実行する統合テストスイートと、ビルド済みの .vsix をクリーンなプロファイルにインストールするエンドツーエンドテストがあります。
実際の実行結果である coverage/coverage-summary.json と coverage/test-results.json から scripts/coverage-readme.js が生成します。このセクションに差異があると CI は失敗します。bun run test:coverage で再現できます。ケース数は vitest が出力する値です。
LE ファミリーのその他のツール
あらゆるモデルが直面する作業に対応する、単機能ツールが16個あります。それぞれに Rust CLI と MCP サーバーが付属します。詳細はこちら:letools.dev
取り出す
- String-LE — コードベース内のすべての文字列を抽出し、人が読めるようにします
- Numbers-LE — コードベース内のすべてのハードコードされた数値を抽出し、人が確認できるようにします
- Units-LE — 単位付きの数量をすべて抽出して正規化し、曖昧なものは名前を示して対象外にします
- Dates-LE — すべての日付とタイムスタンプ、およびそれぞれが解決される正確な時点を抽出します
- IDs-LE — UUID、ULID、NanoID、ObjectId、Snowflakeをすべて抽出し、内部に含まれる時刻をデコードします
- IPs-LE — IPアドレス、CIDRブロック、MACアドレスをすべて抽出し、正規化してスコープ別に分類します
- URLs-LE — コードベース内のすべてのURLを、プロトコルと正確な位置情報とともに抽出します
- Paths-LE — コードベース内のすべてのファイルパスを抽出し、現在も何かを指しているかどうかを示します
- Colors-LE — コードベース内のすべての色を抽出し、パレットにない色を示します
チェックする
- Regex-LE — コードベース内のすべての正規表現を検出し、壊滅的なバックトラッキングを引き起こす可能性があるものを報告します
- Versions-LE — リポジトリ内のマニフェスト間で、同じ依存関係のバージョン制約が異なる箇所を検出します
- i18n-LE — プロジェクトで使用している i18n ライブラリを特定し、そのライブラリのルールに基づいてカタログを監査します
- Scrape-LE — スクレイパーを書く前にページをスクレイピングできるか確認し、判定できない場合はその旨を示します
保護する
- Secrets-LE — コードベース内のハードコードされた認証情報を検出し、レポートに表示することはありません
- EnvSync-LE — ディレクトリツリー内の dotenv ファイルを比較し、どのファイルにどのキーがないかを示します
- Unicode-LE — 意味を隠す Unicode を検出します。双方向制御文字、不可視文字、ホモグリフ、混在スクリプトが対象です
それぞれが独立しています。共有クレートも、公開されたコアもありません。2つのツールが同じ答えにたどり着くとすれば、それはその答えが2度正しかったからです。
お問い合わせ — nolindnaidoo.com · GitHub · LinkedIn
nolindnaidoo によるその他のプロジェクト
Rust — pixelcoords と pixelactions は一連のループを構成します。pixelcoords が 場所 に答え、pixelactions がそこで 操作 します。それぞれ独自のツールと独自の方針を持ち、LE ファミリーには属しません。
- pixelcoords — 画面を固定し、領域を指定して、ピクセル単位で正確な座標と切り抜きを取得します pixelcoords.dev · crates.io · docs.rs
- pixelactions — 人が検証した座標を受け取り、操作を実行して、反映されたことを確認します pixelactions.dev · crates.io · docs.rs
ライセンス
MIT © nolindnaidoo
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。