IDs-LE について
IDs-LE は文書やプロジェクトファイルから UUID、ULID、NanoID、ObjectId、Snowflake を抽出し、有効性や判定可能なタイムスタンプを報告します。エディター、コマンドライン、エージェントで識別子を監査する開発者向けで、曖昧な候補は推測せず理由を示します。
主な機能
- 015種類の識別子を抽出
- 02対応する時刻をUTCでデコード
- 03位置とキーのパスを報告
- 04フォルダーとワークスペースをスキャン
- 05曖昧または無効な候補の理由を表示
活用シーン
- 01ログ内の識別子の時刻を確認
- 02設定内の仮 UUID を検出
- 03プロジェクト全体の識別子を監査
MCP 対応
MCP サーバーは stdio 経由で `extract_ids` ツールを公開し、内容と任意の形式・絞り込みパラメーターを受け取ります。識別子の検出結果を MCP クライアントに返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| kind | enum | いいえ | 指定した 1 種類のみを返します。分析後にレポートを絞り込むため、種類を割り当てられない値は返されません。すべての結果を得るには省略してください。uuid | ulid | nanoid | objectid | snowflake |
| format | enum | いいえ | ドキュメント形式。任意です。形式が不明または未指定の場合、テキストを直接読み取り、キー パスなしで結果を返します。json | yaml | csv | tsv | toml | ini | env | text |
| content | string | はい | スキャンするドキュメントのテキスト。 |
| filename | string | いいえ | `format` が未指定の場合に形式を推定するためのファイル名。例:"config.toml"。 |
| maxResults | integer | いいえ | 返される行数の上限(デフォルトは 500)。meta.truncated は省略された結果があるかどうかを示します。 |
詳細
IDs-LE:それらしく見えるだけの ID
ドキュメント内のあらゆる識別子を見つけ、その中の時刻を読み取り、正体を特定できないものは受け入れません
UUID · ULID · NanoID · MongoDB ObjectId · Snowflake
便利ですか? 星や評価を付けると、ほかの開発者にも見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace
できること
サポートチケットに 6a7bb780a1b2c3d4e5f60718 が引用され、レコードがいつ作成されたのか尋ねられます。正規表現では ObjectId と判定され、生成日は 2026-08-12 です。しかし、それは git コミットハッシュの先頭部分であり、日付はたまたまもっともらしい年に当てはまっただけのノイズです。
ドキュメントを開いて IDs-LE: Extract IDs を実行すると、含まれるすべての識別子が種類別に一覧表示され、行と列、その識別子があるドキュメント内のキーのパス、有効かどうかが確認できます。さらに、時刻を持つ 6 つの方式については、生成された時点が ISO-8601 UTC で表示されます。レポートはエディターの隣に開きます。IDs-LE: Scan Workspace for IDs はプロジェクト内のすべてのファイルを同様にスキャンし、IDs-LE: Scan Folder for IDs は指定したフォルダーをスキャンします。VS Code に加え、Cursor や VSCodium などの VS Code ベースのエディターでも動作します(Open VSX からインストールできます)。
- ログやダンプを読むとき — これらのうち UUID v7 はどれで、それぞれいつ生成されたのか?
- 設定をレビューするとき — 本番環境に紛れ込んだプレースホルダーの nil UUID
- 16 進文字列を信頼する前に — ドキュメントにそれが識別子だと実際に記されているか
- プロジェクト全体で — 識別子を含むすべてのファイルと、それぞれの個数を 1 つの表に表示
正直に名前を付けられない実行結果も、理由とともに報告し、決して破棄しません。 ファイルの内容は一切書き換えません。
インストール
| 場所 | 得られるもの | インストール |
|---|---|---|
| VS Code | エディター上で、キー操作ひとつで抽出できます | Marketplace |
| Cursor、VSCodium、Windsurf | 同じ拡張機能です | Open VSX |
| ターミナルまたは CI のステップ | 終了コード付きで、ツリー全体を取得できます | cargo install ids-le · crates.io |
| ターミナルから Node 経由で | Rust 版とバイト単位で完全に一致する同じコマンドラインです | npx ids-le · npm |
| Node 経由の任意の MCP エージェント | stdio 経由の extract_ids | npx ids-le-mcp · npm |
推測するより、処理を拒否します
自信満々に誤った回答をするツールは、処理を止めて必要な情報を明示するツールよりも劣ります。そのため、このクレートが判定できない実行結果はすべて、理由を添えてレポートに記載されます。行が削除されることも、黙って推測されることもありません。
| 理由 | 意味 |
|---|---|
ambiguous_kind | 2 つ以上のスキームが当てはまり、文書内にどれかを選ぶ情報がありません。 |
malformed | 形式は正しいものの、検証に失敗しました。 |
nil_or_max | nil または max の UUID です。構造上は完全ですが、RFC 9562 では何も示さないとされています。 |
version_claim_mismatch | UUID は v4(122 個のランダムビット)を示していますが、バイト列は明らかにランダムではありません。どちらも報告されますが、どちらかに決めつけることはありません。 |
timestamp_implausible | デコードされた日時が 1990 年より前、または 1 年以上先でした。日時はフラグ付きで示されます。 |
正規表現が自信満々に誤判定するケースとして、いくつか詳しく説明します。
5d41402abc4b2a76b9719d911017c592はハイフンなしの UUID であり、MD5 ダイジェストでもあります。文書内に区別する情報がないため、ここではどちらとも判定しません。6a7bb780a1b2c3d4e5f60718は 24 文字の 16 進数です。_idの下では、2026-08-12 に生成された ObjectId です。checksumの下、または本文中では判定を拒否します。ObjectId の仕様全体は 24 文字の 16 進数 なので、切り詰められた SHA-1 も完全に当てはまり、区別できるのは文書だけです。channel_idの下にある1536886938009600000は、2026-08-12 時点の Discord Snowflake です。単独のuser_idの下では、Twitter のエポックも当てはまり、文書にもどちらかを示す情報がないため、判定を拒否します。populationの下では検出結果になりません。
全表と、ツールが設けている判定境界については
crate/SPEC.md を参照してください。
種類
| 種類 | 形式 | デコードされる時刻 | 追加フィールド |
|---|---|---|---|
uuid | 36 文字、8-4-4-4-12、16 進数 | v1、v6、v7 | version、variant |
ulid | 26 文字、Crockford base32 | 常に(48 ビットの Unix ミリ秒) | — |
nanoid | 21 文字、A-Za-z0-9_- | なし — NanoID には時計がありません | — |
objectid | 24 文字の 16 進数、ID を示すキーの下 | 常に(32 ビットの Unix 秒) | — |
snowflake | 17~19 桁、ID を示すキーの下 | 常に(上位 42 ビットとエポック) | — |
このうち 2 種類は、文書による許可が必要です。 ObjectId は 24 文字の 16 進数、Snowflake は大きな整数です。どちらにもバージョン、バリアント、チェックサム、制限された文字セットがないため、単独では正体を判定できません。切り詰められた git ハッシュは構造上完全な ObjectId になり、バイト数は構造上完全な Snowflake になります。どちらもフィールド名が id で終わる場合(_id、userId、USER-ID、$oid)に限って識別され、それ以外では ambiguous_kind として判定を拒否します。キーのないプレーンテキストファイルでは、どちらも識別されません。
RFC 9562 で定義された 8 種類すべての UUID バージョンが認識され、4 種類すべてのバリアント(ncs、rfc4122、microsoft、future)が報告されます。バージョンが報告されるのは RFC バリアントの場合に限られます。それ以外のレイアウトでは、その 4 ビットはバージョンフィールドではないためです。
タイムスタンプ
ここは、二度書きたくない部分です。これらのうち6つは、互いに無関係な6種類のビット配置で、4つの異なるエポックを基準に時刻を保持しています。そのうち1つは1582年に始まります。
| 方式 | 時刻の位置 | エポック |
|---|---|---|
| UUID v1 | 100ナノ秒間隔の60ビット。下位フィールドが先 | 1582-10-15 |
| UUID v6 | 同じティックを、ソートされるように並べ替えたもの | 1582-10-15 |
| UUID v7 | 先頭の48ビットがミリ秒 | Unix |
| ULID | Crockford文字の先頭10文字、48ビット | Unix |
| ObjectId | 先頭の4バイト、秒単位 | Unix |
| Snowflake | 上位42ビット | Twitter(2010-11-04)またはDiscord(2015-01-01) |
どの方式も、ミリ秒を常に含む同じISO-8601 UTC文字列に変換されます。UUID v2は名前だけ示し、デコードはしません。そのクロックは下位32ビットがPOSIX uidで上書きされるため、約7分の値になり、同じ主張にはなりません。
1990年より前、または今から1年を超えて先の時刻にデコードされた場合は、timestamp_implausibleとして拒否されます。デコード結果はフラグの隣の行に示します。根拠を隠す拒否は、読者が検証できない判定だからです。
フォーマット
JSON(およびJSONC)、YAML、TOML、INI(.properties)、dotenv、CSV、TSVでは、各検出結果にキーのパスが付きます。service.requestId、documents.[0]._id、discord.channel_idなどです。それ以外はすべてテキストとして読み取られます。同じ検出結果が、同じ位置に、キーなしで表示されます。
キーのパスは装飾ではなく、根拠です。ObjectIdとSnowflakeは、ドキュメントがidと呼ぶフィールドの下にある場合にのみ名前が示されます。そのため、.jsonで名前が示された検出結果は、隣の.mdではambiguous_kindとして返されます。同じ行、同じ位置、同じデコード結果で、名前の代わりに理由が示されます。
フォルダーまたはワークスペース全体を対象にする
Extract は、開いているドキュメントを読み取ります。スキャンでは、ディスク上の多数のファイルを読み取り、レポートを 1 つ作成します。
- ワークスペース全体:コマンドパレットから
IDs-LE: Scan Workspace for IDsを実行します。 - 1 つのフォルダー:エクスプローラーでそのフォルダーを右クリックして
Scan Folder for IDsを選ぶか、IDs-LE: Scan Folder for IDsを実行してフォルダーを選択します。
レポートを開くと、何らかの項目が見つかったすべてのファイルを示す表があり、その後にファイルごとのセクションが続きます。
# IDs-LE workspace report
`my-project` · 113 file(s) read · 2 named, 3 could not be named
| File | Named | Could not be named |
|---|---|---|
| `lib/transcripts.ts` | 2 | 3 |
## `lib/transcripts.ts` · text (2)
- **55:40** · `019ff344-cc00-7abc-8def-0123456789ab` · uuid · v7 · 2026-08-12T00:00:00.000Z
- **56:24** · `01KZSM9K00ABCDEFGH12345678` · ulid · 2026-08-12T00:00:00.000Z
> 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.
"ids-le.workspace.scanExcludes": ["**/fixtures/**"],
// Read the vendored code, though the built-in list skips it.
"ids-le.workspace.scanAlwaysInclude": ["**/vendor/**"]
}
IDs-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 を読み取ります。
名前を特定できなかったもの。 プロジェクト全体では数千件にのぼり、その大半は生成ファイル内のダイジェストです。そのためスキャンでは、表にファイルごとの件数を表示し、個別には一覧にしません。ids-le.workspace.scanIncludeRefusals には理由とともに各項目が表示され、ids-le.workspace.scanProblemsEnabled を有効にすると、Problems パネルにも表示されます。そこでは各項目をクリックできます。
スキャンの動作を決める設定は、Settings にあります。
位置
各行の先頭には、識別子の行番号と列番号が表示されます。
- **3:13** · `f47ac10b-58cc-4372-a567-0e02b2c3d479` · key `service.id` · v4
ids-le.showPositions をオフにすると、同じ行は次のようになります。
- `f47ac10b-58cc-4372-a567-0e02b2c3d479` · key `service.id` · v4
それ以外は何も変わりません。行も件数も同じです。クリップボードへのコピーは別の設定 ids-le.clipboardIncludesPositions で選べるため、画面には位置を表示しつつ、位置を含めずに貼り付けることができます。どちらの設定も、Extract と同様にスキャンに適用されます。
AI エージェントから使用する
同じエンジンがMCPサーバーとしても動作するため、エージェントはどの16進数文字列がどれなのか推測する代わりに、直接呼び出すことができます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストール不要 — 拡張機能がエージェントモード用に extract_ids を登録します |
| Claude Code | claude mcp add ids-le -- npx -y ids-le-mcp |
| Cursor、Windsurf、その他 | npx ids-le-mcp を指定します |
extract_ids(content, format?, filename?, kind?, maxResults?)
エディターが表示する行を、拒否されたものも含めてデータとして返します。デフォルトでは500件に制限され、meta.truncated で示されます。ファイルを読み取ることも、ネットワークリクエストを行うこともありません。npm では ids-le-mcp として、MCP レジストリでは io.github.nolindnaidoo/ids-le として公開されています。Rust CLI のサーバーとまったく同じ応答を返します。両方で1つのコーパスを使用し、差分テストでは、あらゆる形式の何千もの生成ドキュメントを両方に渡して、すべての応答を比較します。
手動での設定 — MCP 設定ファイルを使用するすべてのホスト
{
"mcpServers": {
"ids-le": {
"command": "npx",
"args": ["-y", "ids-le-mcp"]
}
}
}
または、npm install -g ids-le-mcp で一度インストールし、ids-le-mcp を指定してください。環境変数、API キー、独自の設定は必要ありません。動作を確認するには、次のようにします。
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y ids-le-mcp
CLI
ターミナルや CI のステップから、同じ抽出処理をツリー全体に対して実行できます。Rust CLI は crate/ にあり、拡張機能と crate/fixtures/ の1つのコーパスを共有するため、2つの間で識別子の読み取り方が異なることはありません。同じコマンドラインツールは、Rust を使わず Node を使う環境向けに ids-le として npm からも提供され、CI では3つの OS 上でクレートとバイト単位で一致することを確認しています。
npm (ids-le) または crates.io (ids-le) からインストールできます。どちらも同じ ids-le コマンドをインストールします。
npm install -g ids-le # or run it once: npx ids-le
cargo install ids-le
ids-le src/ # a tree; one JSON line per file on stdout when piped
ids-le --kind uuid src/ # one scheme; refusals still reported
ids-le --strict src/ # exit 2 on anything that could not be named
ids-le --hidden src/ # include .env
ids-le mcp # extract_ids and ids_le_scan over MCP on stdio
終了コードは grep に準じます — 識別子が見つかった場合は0件ではなく0、見つからない場合は1、質問の形式が不正な場合は2です。拒否されても終了コードは変わりません。パイプラインで拒否を失敗として扱うには --strict を使用します。
コマンド
| コマンド | 説明 |
|---|---|
IDs-LE: Extract IDs | アクティブなドキュメント内のすべての識別子を抽出します |
IDs-LE: Scan Workspace for IDs | ワークスペース内のすべてのファイルから抽出し、ファイルごとに1つのセクションにまとめます |
IDs-LE: Scan Folder for IDs | 1つのフォルダーを対象に同じ処理を行います。エクスプローラーでフォルダーを右クリックしても実行できます |
IDs-LE: Open Settings | IDs-LE の設定を開きます |
IDs-LE: Help & Troubleshooting | 組み込みのドキュメントを表示します |
デフォルトでは、どのコマンドにもキーは割り当てられていません。エディターのキーボードショートカットで、任意のコマンドにキーを割り当ててください。
設定
| 設定 | デフォルト | 説明 |
|---|---|---|
ids-le.kind | all | 1 種類のみを指定します。名前を特定できなかった実行は、設定値にかかわらず報告されます |
ids-le.openResultsSideBySide | true | レポートを現在のエディターの横に開きます |
ids-le.showPositions | true | レポートで各識別子の行番号と列番号を表示します |
ids-le.copyToClipboardEnabled | false | レポートをクリップボードにもコピーします |
ids-le.clipboardIncludesPositions | true | コピーに行番号と列番号を含めます |
ids-le.workspace.scanPatterns | ["**/*"] | フォルダーまたはワークスペースのスキャンで読み取るファイル |
ids-le.workspace.scanUseDefaultExcludes | true | 依存関係フォルダー、ビルド出力、キャッシュ、ロックファイルをスキップします |
ids-le.workspace.scanRespectGitignore | true | プロジェクトの .gitignore ファイルで除外されるものをスキップします |
ids-le.workspace.scanSkipBinaryFiles | true | 画像、フォント、アーカイブなどのテキスト以外のファイルをスキップします |
ids-le.workspace.scanExcludes | [] | glob パターンで指定する、追加でスキップするファイル |
ids-le.workspace.scanAlwaysInclude | [] | 上記 3 つの設定でスキップされる場合でも読み取るファイル |
ids-le.workspace.scanMaxFiles | 5000 | 1 回のスキャンで読み取るファイルの上限数 |
ids-le.workspace.scanMaxResults | 10000 | 読み取りを停止するまでに 1 回のスキャンで一覧表示する識別子の上限数 |
ids-le.workspace.scanIncludeRefusals | false | ファイルごとの件数だけでなく、名前を特定できなかった実行をすべて一覧表示します |
ids-le.workspace.scanProblemsEnabled | false | 名前を特定できなかった実行も「問題」パネルに表示します |
ids-le.safety.enabled | true | 大きなファイルから抽出する前に警告します |
ids-le.safety.fileSizeWarnBytes | 1000000 | このサイズ以上になると警告を表示します |
ids-le.notificationsLevel | silent | all = すべての通知、important = 警告とエラー、silent = エラーのみ |
ids-le.statusBar.enabled | true | ステータスバー項目を表示します |
ids-le.telemetryEnabled | false | ローカルのみのイベントログ(プライバシーを参照) |
言語
英語以外に 12 言語に対応しています。
ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)
両方の部分に対応しています。マニフェスト(コマンド名、設定名、説明)と、拡張機能の実行中に表示されるすべての内容(通知、ステータスバー、レポートの見出し)です。拒否の詳細はエンジンの英語表記で、CLI と同じです。
プライバシーとセキュリティ
- ネットワークアクセスはありません。 拡張機能がデータを外部に送信することはなく、データベースや API に照合することもありません。
telemetryEnabled設定は、確認できるローカルの出力チャンネル(IDs-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/ids-le |
パフォーマンス
| 入力 | サイズ | 検出数 | 時間 | レート | スキャン速度 |
|---|---|---|---|---|---|
| JSON レコード | 2.39 MB | 40,000 | 52.56 ms | 761,092/sec | 45.5 MB/s |
| アプリケーションログ | 3.16 MB | 40,000 | 43.08 ms | 928,448/sec | 73.4 MB/s |
| CSV エクスポート | 2.78 MB | 90,000 | 75 ms | 1,200,003/sec | 37 MB/s |
Apple M5 Pro、RAM 24 GB、Node 24.3.0 で、ウォームアップ後に7回実行した際の中央値です。入力はリポジトリに含まれているのではなく、scripts/benchmark.ts で生成されるため、上記のサイズは測定時の正確な値です。bun run benchmark で再現できます。
これらの値はマシン固有であり、CI では保証されません。ビルドの合否を左右するベンチマークでは、ランナーがどれだけビジーだったかがわかるだけです。
テスト
| 指標 | カバレッジ |
|---|---|
| ステートメント | 77.57% |
| 分岐 | 71.44% |
| 関数 | 77.89% |
| 行 | 80.00% |
19ファイルにわたる212件のテストケースに加え、実際の 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 つのサーバーを複数のクライアントで再利用できます。