Units-LE について
Units-LE は、設定や文書、コード内の数量を比較したい開発者向けの抽出ツールです。時間、バイト、パーセント、周波数を基準単位に変換し、曖昧な値は推測や書き換えをせず理由とともに報告します。
主な機能
- 01時間、バイト、パーセント、周波数の抽出
- 02基準単位への変換
- 03位置情報と形式ごとのキー経路の表示
- 04曖昧な数量を拒否する理由の説明
- 05一般的な構造化形式の解析とテキスト走査
活用シーン
- 01移行前のタイムアウトとメモリー制限の比較
- 02単位が曖昧な設定変更のレビュー
- 03運用手順書と設定の制限値の照合
- 04プロジェクト内の数量の走査と集計
MCP 対応
MCP サーバーは `extract_units` ツールを公開し、エージェントが入力テキストの数量を読み取って、基準単位の値と拒否理由を取得できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| format | enum | いいえ | ドキュメント形式。任意です。形式が認識できない場合、または指定されていない場合は、テキストを直接スキャンします。json | jsonc | yaml | csv | tsv | toml | ini | env |
| content | string | はい | スキャンするドキュメントのテキスト。 |
| filename | string | いいえ | `format` が未指定の場合に形式を推定するためのファイル名。例:"config.toml"。 |
| dimension | enum | いいえ | 1 つの次元のみを報告します。次元が指定されていない拒否結果は、要求された次元に該当する可能性があるため、常に含めます。duration | bytes | percent | frequency |
| maxResults | integer | いいえ | 返される数量の上限(デフォルトは 500)。meta.truncated は、破棄された数量があるかどうかを示します。 |
詳細
Units-LE:1つの数量に、1つの単位を
ドキュメント内のあらゆる数量(期間、サイズ、パーセンテージ、頻度など)を、1つの基本単位での値とともに検出し、曖昧なものは名前を示して判定を保留します
YAML · TOML · JSON · INI · dotenv · CSV · その他あらゆる形式をテキストとしてスキャン
役に立ちましたか? 星を付けたり評価したりすると、ほかの開発者にも見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace
機能
あるサービスのtimeout: 30sと別のサービスのtimeout: 30000は、どちらもミリ秒にすると同じ数値ですが、テキストからはそれが分かりません。memory: 1GBとmemory: 1GiBは7%異なるのに、ひと目では同じように見えます。
Units-LE: Extract Quantitiesを実行すると、アクティブなドキュメント内のすべての数量(数値と単位が結び付いたもの)が、エディターの横にあるレポートに表示されます。ドキュメントに記載された表記のまま、2つの値を比較できるように1つの基本単位に換算し、行、列、キーのパスも表示します。曖昧さなく読み取れない数量も行は残し、推測する代わりに理由を示します。VS Codeのほか、CursorやVSCodiumなどのVS Codeベースのエディターでも動作します(Open VSXからインストール可能)。
- 移行の前に — 値ファイル内のすべてのタイムアウトとメモリ上限を、ミリ秒とバイトで確認
- 設定変更のレビュー時に — 読み手によって分とミリコアのどちらにも解釈できる
500mを確認 - 運用手順書や保持ポリシーとの照合に — ドキュメントに記載された上限を、設定ファイルの上限と照らし合わせて確認
- プロジェクト全体を対象に — 数量を含むすべてのファイルと、それぞれの数量を1つのテーブルで確認
ドキュメントを書き換えることも、推測することもありません。
インストール
| 場所 | 得られるもの | インストール |
|---|---|---|
| VS Code | エディター内で、キーを押すだけでレポートを確認できます | Marketplace |
| Cursor, VSCodium, Windsurf | 同じ拡張機能です | Open VSX |
| ターミナルまたは CI のステップ | 終了コード付きで、ツリー全体を確認できます | cargo install units-le · crates.io |
| ターミナル、Node 経由 | Rust 版とバイト単位で完全に一致する同じコマンドラインです | npx units-le · npm |
| Node 経由のあらゆる MCP エージェント | stdio 経由の extract_units | npx units-le-mcp · npm |
拒否も検出結果です
これが製品のすべてです。どのツールでも 30s に千を掛けることはできますが、
レビューでこのツールを使えるものにしているのは、わかったふりをしないことです。
| 検出対象 | 理由 | 返される内容 |
|---|---|---|
500m、10M、5k、1y、100Mb | ambiguous_unit | 基準値なし — m は分、ミリ秒、または Kubernetes のミリコアを意味します。M はメガまたは分です。k/K/G/T/P は後ろに単位のない接頭辞です。暦年には固定の長さがありません。小文字の b は規格上はビットですが、これを記述するソフトウェアの多くではバイトを意味します |
1.5KB、1.5KiB | fractional_bytes | 基準値なし — バイト数に小数部分はありません。1.5KiB は正確には 1536 バイトですが、それでも拒否されます。拒否の理由は計算ではなく、カテゴリにあります |
1,5s、1.000s、1.2.3s | locale_separator | 基準値なし — 1.5 なのか、1500 なのか。ロケールを推測することはありません。0.825s や 2.5s は通常どおり解釈できるように対象を絞っています |
1h + 30m、30s*2 | compound_arithmetic | 基準値なし — 数量ではなく式です。検出結果は 2 つではなく1 つとして報告されます |
1MB、256KB | si_iec_hazard | 基準値と理由 — 詳しくは以下を参照してください |
99999…PiB | out_of_range | 基準値なし — 128 ビットに収まらないため、桁あふれさせずに拒否されます |
いずれの場合も、行、元のテキスト、位置、および人が対応できる説明文が保持されます。拒否によって行が削除されたり、推測が行われたりすることはありません。
si_iec_hazard は注釈を付けますが、値は返します
値を返す理由はこれだけです。規格上、MB は 10^6 を意味するため、
1MB は1000000 バイトとして返され、さらに
reason: "si_iec_hazard" が付きます。これは、多くのソフトウェアが
MB と書いて 2^20 を意味するためです。何も報告しないより、フラグを付けて規格上の値を報告するほうが有用です。また、2^20 を選ぶのは、このツールが避けようとしている推測です。
したがって、拒否としてはカウントされません。si_iec_hazard が付いた行だけが base と reason の両方を持ちます。それ以外の理由では、base は null になります。
単位のない数値だけでは、検出結果になりません。 timeout: 30 はここでは何も返しません。これは
numbers-le が扱う問いであり、
境界を設けることで 2 つのツールを区別しています。
4つの次元
| 次元 | 基本単位 | 読み取る単位 |
|---|---|---|
duration | ミリ秒 | ns us µs μs ms s sec secs min mins h hr hrs d day days w · 複合表記 1h30m · ISO-8601 PT1H30M P1DT2H P2W PT0.5S |
bytes | バイト | B · SI kB KB MB GB TB PB · IEC KiB MiB GiB TiB PiB · Kubernetes Ki Mi Gi Ti Pi |
percent | 比率 | % — 15% は 0.15 です |
frequency | ヘルツ | Hz kHz KHz MHz GHz THz |
大文字と小文字は記号の一部です。 MB はメガバイト、Mb はメガビットです。これらを同一視すると値がひそかに8倍になるため、Mb は同義語として扱わず、拒否します。
1h30m は文法上の表記で、1h + 30m は算術演算です。 前者は、2つの部分で表した1つの量です。複合表記では、各部分が互いの意味を明確にします。単独の m は拒否され、h と s の間の m は分のみを表します。複合表記は大きい単位から順に記述するためです。この順序は前提ではなく必須なので、30s1h は量として認識されません。
物理単位は対象外であり、対応漏れではありません。 長さ、質量、温度は別の課題であり、それらを読み取るには単位演算(m/s²)が必要になります。これは uom の役割です。詳しくは
crate/SPEC.md を参照してください。
フォーマット
JSON、YAML、CSV、TOML、INI、dotenv を解析します。それ以外はすべてテキストとしてスキャンします。Kubernetes マニフェスト、Terraform ファイル、上限値を記した Markdown テーブル、ログなども対象です。そのため、量が実際に記述されているファイルから値を取得でき、何も得られないということはありません。
numbers-le のテキストスキャンとは異なり、こちらは探す対象の形式が明確なため、v1.2.3 は数値2つとして認識されず、何も検出されません。形式が明確な各フォーマットでは、キーのパス(cache.ttl、limits[0]、server.timeout、TIMEOUT)が記録されます。また、検出結果にはすべて1始まりの行番号と列番号が付きます。列番号は UTF-16 単位で、エディターに表示される数値です。
誤検出の種類は、想像ではなく実測しています。 不透明なデータ内の文字列も量として認識されます。UUID 内の 001d は1日、/2w== で終わる base64 ハッシュは2週間と読み取られます。これらを通す境界文字は、-30s や ttl=30s を認識させるものと同じです。量ではないロックファイルのハッシュ、コンテナダイジェスト、git オブジェクト名、UUID、署名素材を含む crate/fixtures/documents/opaque.txt(280行)をスキャンすると、誤検出は5件、1.8% です。テストでは、実行のたびにこの数値が出力されます。各検出結果には行番号と列番号が付くため、信頼できる数値ではなく、破棄する行として扱えます。
意見は持ちません
「このタイムアウトは短すぎる」とは判断しません。デフォルト値のデータベースはありません。変換フラグも、書き換えも、算術演算もありません。ドキュメントに何が書かれているか、それが基本単位で何を意味するかを報告します。どの上限値が適切かは、レビュー担当者が判断します。
フォルダーまたはワークスペース全体を対象にする
Extract は開いているドキュメントを読み取ります。スキャンではディスク上の多数のファイルを読み取り、1 つのレポートにまとめます。
- ワークスペース全体:コマンドパレットから
Units-LE: Scan Workspace for Quantitiesを実行します。 - 1 つのフォルダー:エクスプローラーでフォルダーを右クリックして
Scan Folder for Quantitiesを選ぶか、Units-LE: Scan Folder for Quantitiesを実行してフォルダーを選択します。
レポートを開くと、該当する内容があるファイルすべての表が表示され、その後にファイルごとのセクションが続きます。
# Units-LE workspace report
`my-project` · 113 file(s) read · 3 quantit(ies), 1 could not be resolved
| File | Quantities | Could not be resolved |
|---|---|---|
| `deploy/values.yaml` | 3 | 1 |
## `deploy/values.yaml` · yaml (3)
- **2:8** · `1h30m` · duration · → `5400000` milliseconds · key `cache.ttl`
- **3:9** · `512MiB` · bytes · → `536870912` bytes · key `memory`
- **4:7** · `2GB` · bytes · → `2000000000` bytes · key `disk`
> 2 file(s) larger than the safety limit were not read.
スキャンで読み取る内容。 ファイルはディスクから読み取られるため、保存されていない編集内容は反映されません。安全のためのサイズ上限を超えるファイルや、UTF-8 テキストではないファイルは読み取られません。スキャンは 5,000 ファイルまたはリストに記載された数量 10,000 件で停止します。レポートの末尾には除外された項目が 1 つずつ記載されるため、短いレポートをプロジェクトに問題がない証拠と誤認することはありません。
スキップする対象と変更方法。 既定で 3 つのスイッチがオンになっています。それぞれを個別に設定でオフにできます。
| スイッチ | スキップする対象 |
|---|---|
scanUseDefaultExcludes | 依存関係のフォルダー、ビルド出力、ツールのキャッシュ、ロックファイル。完全な一覧は以下を参照してください |
scanRespectGitignore | プロジェクトの .gitignore ファイルでスキップされるすべての項目 |
scanSkipBinaryFiles | 画像、フォント、アーカイブなどのテキストではないファイル |
スイッチをオフにせずに結果を調整するリストが 2 つあります。さらにスキップするには、scanExcludes にパターンを追加します。スイッチによってスキップされる項目を読み取るには、scanAlwaysInclude に追加します。
{
// Also skip the test fixtures.
"units-le.workspace.scanExcludes": ["**/fixtures/**"],
// Read the vendored code, though the built-in list skips it.
"units-le.workspace.scanAlwaysInclude": ["**/vendor/**"]
}
Units-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 が読み取られます。
解決できなかった項目。 プロジェクト全体では該当項目が多数になることがあり、ほかの項目を圧迫してしまいます。そのため、スキャンでは表にファイルごとの件数を表示し、個別の項目は一覧にしません。units-le.workspace.scanIncludeRefusals には各項目とその理由が記載されます。また、units-le.workspace.scanProblemsEnabled を有効にすると、Problems パネルにも表示され、それぞれの行をクリックできます。
スキャンに適用される設定については、設定を参照してください。
位置
各行の先頭に、数量の行と列が表示されます。
- **2:8** · `1h30m` · duration · → `5400000` milliseconds · key `cache.ttl`
units-le.showPositions をオフにすると、同じ行は次のようになります。
- `1h30m` · duration · → `5400000` milliseconds · key `cache.ttl`
それ以外は何も変わりません。同じ行、同じ件数です。クリップボードにコピーする内容は別の設定 units-le.clipboardIncludesPositions で選べるため、画面上では位置を表示し、貼り付けるときは表示しないようにできます。どちらの設定も、Extract と同じようにスキャンにも適用されます。
AI エージェントから使う
同じエンジンがMCPサーバーとしても動作するため、エージェントは単位を手作業で変換せずに、数量を直接読み取れます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストール不要です — 拡張機能がエージェントモード用に extract_units を登録します |
| Claude Code | claude mcp add units-le -- npx -y units-le-mcp |
| Cursor、Windsurf、その他 | npx units-le-mcp を指定します |
extract_units(content, format?, filename?, dimension?, maxResults?)
エディターが表示するレポートをデータとして返します。数量は既定で 500 件までで、上限に達した場合は meta.truncated で示されます。ファイルの読み取りやネットワークリクエストは行いません。npm では units-le-mcp として、MCP レジストリでは io.github.nolindnaidoo/units-le として公開されています。Rust CLI のサーバーとまったく同じように応答します。同じコーパスを両方で実行し、差分テストではあらゆる形式の何千もの生成ドキュメントを両方に入力します。壊れたドキュメントも含まれるため、各パーサーのエラーテキストも比較されます。
手動で設定する — MCP 設定ファイルを使うホスト
{
"mcpServers": {
"units-le": {
"command": "npx",
"args": ["-y", "units-le-mcp"]
}
}
}
または、npm install -g units-le-mcp で一度インストールして、units-le-mcp を指定します。環境変数、API キー、独自の設定は不要です。動作を確認するには、次のコマンドを実行します。
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y units-le-mcp
CLI
同じ抽出処理を、ターミナルや CI のステップからツリー全体に対して実行できます。crate/ にある Rust CLI は、拡張機能と crate/fixtures/ のコーパスを共有しているため、数量の読み取り方が両者で異なることはありません。同じコマンドラインは npm からも units-le として提供されているため、Rust がなく Node があるマシンでも使えます。また、CI では 3 つのオペレーティングシステムで、クレート版とバイト単位で一致することを確認しています。
npm(units-le)または crates.io(units-le)からインストールできます。どちらも同じ units-le コマンドをインストールします。
npm install -g units-le # or run it once: npx units-le
cargo install units-le
units-le . # every quantity in the tree; one JSON report per file when piped
units-le --dimension duration config/ # only the timeouts
units-le --strict config/ # exit 2 if anything was refused
cat values.yaml | units-le --stdin --format yaml
units-le mcp # extract_units and units_le_scan over MCP on stdio
終了コードは grep に準拠します — 数量が見つかった場合は 0、見つからなかった場合は 1、質問の形式が正しくない場合は 2 です。拒否が発生しても終了コードは変わりません。--strict を指定すると 1 になります。
コマンド
| コマンド | 説明 |
|---|---|
Units-LE: Extract Quantities | アクティブなドキュメント内のすべての数量を、エディターが保持している状態で抽出します |
Units-LE: Scan Workspace for Quantities | ワークスペース内のすべてのファイルからすべての数量を抽出します。ファイルごとに 1 セクション表示されます |
Units-LE: Scan Folder for Quantities | 1 つのフォルダーを対象に、同じ処理を行います。エクスプローラー内のフォルダーからも実行できます |
Units-LE: Open Settings | Units-LE の設定を開きます |
Units-LE: Help & Troubleshooting | 組み込みドキュメントを開きます |
既定では、どのコマンドにもキーは割り当てられていません。エディターのキーボードショートカットで、任意のコマンドにキーを割り当ててください。
設定
| 設定 | デフォルト | 説明 |
|---|---|---|
units-le.dimensions | [] | これらの次元のみを報告します。空の場合は4つすべてを報告します。次元を指定しない拒否は常に報告されます |
units-le.openResultsSideBySide | true | 現在のエディターの横にレポートを開きます |
units-le.showPositions | true | 各数量の行と列を表示します |
units-le.copyToClipboardEnabled | false | レポートもクリップボードにコピーします |
units-le.clipboardIncludesPositions | true | コピーに行と列も含めます |
units-le.notificationsLevel | silent | all = すべての通知、important = 警告とエラー、silent = エラーのみ |
units-le.workspace.scanPatterns | ["**/*"] | フォルダーまたはワークスペースのスキャンで読み込むファイル |
units-le.workspace.scanUseDefaultExcludes | true | 依存関係フォルダー、ビルド出力、キャッシュ、ロックファイルをスキップします |
units-le.workspace.scanRespectGitignore | true | プロジェクトの .gitignore ファイルで除外されるものをスキップします |
units-le.workspace.scanSkipBinaryFiles | true | 画像、フォント、アーカイブなどのテキストではないファイルをスキップします |
units-le.workspace.scanExcludes | [] | glob パターンで指定する、追加でスキップするファイル |
units-le.workspace.scanAlwaysInclude | [] | 上記3つのいずれかでスキップされる場合でも読み込むファイル |
units-le.workspace.scanMaxFiles | 5000 | 1回のスキャンで読み込むファイルの上限 |
units-le.workspace.scanMaxResults | 10000 | 読み込みを停止するまでに1回のスキャンで一覧表示する数量の上限 |
units-le.workspace.scanIncludeRefusals | false | ファイルごとの件数だけでなく、解決できなかった実行をそれぞれ一覧表示します |
units-le.workspace.scanProblemsEnabled | false | 解決できなかった実行も「問題」パネルに表示します |
units-le.safety.enabled | true | 大きなファイルを読み込む前に警告します |
units-le.safety.fileSizeWarnBytes | 1000000 | このサイズを超えると警告が表示されます |
units-le.statusBar.enabled | true | ステータスバーの項目を表示します |
units-le.telemetryEnabled | false | ローカルのみのイベントログ(「プライバシー」を参照) |
対応言語
英語以外に12言語に対応しています。
ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)
マニフェスト(コマンドのタイトル、設定名と説明)と、拡張機能の実行中に表示されるすべての内容(通知、ステータスバー、レポートの見出し)の両方に対応しています。拒否の文とパーサーのエラーはエンジンの英語で、CLI と同じです。
プライバシーとセキュリティ
- ネットワークアクセスはありません。 拡張機能がデータを外部に送信することはありません。
telemetryEnabled設定は、確認できるローカルの出力チャンネル(Units-LE)にイベントを書き込むだけです。 - アクティブなドキュメントのみを読み取り、それ以外は読み取りません。 また、ドキュメントに書き込むこともありません。
- MCP サーバーも同様の方針です。 コンテンツを引数として受け取り、データを返します。ファイルシステムへのアクセス、ネットワーク呼び出し、テレメトリーはありません。
- エラー通知では、ホームディレクトリと認証情報の形式に一致する部分を伏せます。
- 評価を求めるプロンプトは、最大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/units-le |
パフォーマンス
| 入力 | サイズ | 検出数 | 時間 | 速度 | スキャン速度 |
|---|---|---|---|---|---|
| YAML 設定 | 0.88 MB | 50,000 | 107.63 ms | 464,557/秒 | 8.2 MB/s |
| TOML 設定 | 0.73 MB | 30,000 | 49.08 ms | 611,287/秒 | 14.9 MB/s |
| テキストとしてスキャンしたログ | 3.25 MB | 120,000 | 327.9 ms | 365,967/秒 | 9.9 MB/s |
Apple M5 Pro、24 GB RAM、Node 24.3.0 で、ウォームアップ後に 7 回実行した中央値です。入力はチェックインされているものではなく、scripts/benchmark.ts で生成されるため、上記のサイズは実測値そのものです。bun run benchmark で再現できます。
これらの値はマシン固有であり、CI では保証されません。ビルドを左右するベンチマークから分かるのは、ランナーがどれほどビジーだったかだけです。
テスト
| 指標 | カバレッジ |
|---|---|
| ステートメント | 84.02% |
| 分岐 | 78.05% |
| 関数 | 86.77% |
| 行 | 86.09% |
20 ファイルにわたる 654 件のテストケースに加え、実際の 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 つのサーバーを複数のクライアントで再利用できます。