Dates-LE について
Dates-LE は、ログ、データファイル、コードから日付やタイムスタンプを抽出し、表記と位置を示す開発者向けツールです。多様な日付形式や時刻の解決、ワークスペースのスキャンに対応し、MCP からも呼び出せます。
主な機能
- 01多様な日付・タイムスタンプ形式を認識
- 02記述形式と行・列位置を表示
- 03解決可能な場合に epoch 値を返却
- 04ワークスペースの結果を時系列順に整理
- 05日付種別の絞り込みと曖昧な日付順の指定
活用シーン
- 01サーバーログからタイムスタンプを抽出
- 02JSONやCSVなどの日付を確認
- 03コード内の日付リテラルや解析呼び出しを監査
- 04プロジェクトファイルの日付を集約
MCP 対応
MCP サーバーは extract_dates を公開し、テキストを受け取って日付表記、解決できる場合の epoch 値、行・列位置を返します。stdio で通信し、ファイルの読み取りや独自のネットワーク通信は行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| kinds | array | いいえ | 返す日付の種類を、回答で `format` として付与される名前で指定します。デフォルトでは "unix" 以外のすべての種類です。1705314645 のような数字だけの値は、"unix" が指定された場合にのみ日付として読み取られます。 |
| dedupe | boolean | いいえ | 重複する日付は最初の出現のみ残します。 |
| format | enum | いいえ | ドキュメント形式。一般的な拡張子と別名を指定できます。任意項目です。これと `filename` のどちらも指定されていない場合、共通パターンを使ってドキュメントをスキャンします。json | yaml | csv | xml | log | plaintext | javascript | typescript | html | toml | markdown |
| content | string | はい | スキャンするドキュメントのテキスト。 |
| filename | string | いいえ | `format` が指定されていない場合に形式を推測するためのファイル名。例:"app.log"。 |
| dateOrder | enum | いいえ | 日と月のどちらとも解釈できる数値日付(例:05/01/2024)の読み取り方です。"mdy" は 5 月 1 日、"dmy" は 1 月 5 日を表します。15/01/2024 のように一通りにしか読めない日付は設定にかかわらずそのとおりに読み取り、05.01.2024 のようなピリオド区切りの日付は常に日付先行で読み取ります。mdy | dmy |
| maxResults | integer | いいえ | 返す日付の上限(デフォルトは 500)。meta.truncated は日付が省略されたかどうかを示します。 |
詳細
Dates-LE:手間なく日付を抽出
キーを1回押すだけで、現在のファイルからすべての日付とタイムスタンプを抽出します
あらゆるテキストファイルに対応 — JSON、YAML、CSV、XML、TOML、Markdown、ログ、HTML、JavaScript、TypeScript、Python、Go など
便利でしたか? 星や評価を付けると、ほかの開発者にも見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace
できること
ファイルを開いて Dates-LE: Extract Dates を実行すると、ドキュメント内のすべての日付が新しいエディターに表示されます。そこから重複の除去、並べ替え、分析、変換、フィルタリング、検証ができます。VS Code のほか、Cursor や VSCodium などの VS Code ベースのエディターでも動作します(Open VSX からインストール可能です)。
- ログ分析 — サーバーログのタイムスタンプ:ISO、syslog、Apache アクセスログ形式
- データレビュー — JSON、YAML、CSV、XML の日付とエポック
- コード監査 — JS/TS の日付リテラルと
new Date()/Date.parse()/moment()/dayjs()/DateTime.fromISO()の引数。複数行にわたって記述された呼び出しにも対応
インストール
| 入手先 | 内容 | インストール |
|---|---|---|
| VS Code | キーを押すだけでエディター内から抽出 | Marketplace |
| Cursor、VSCodium、Windsurf | 同じ拡張機能 | Open VSX |
| ターミナルまたは CI ステップ | 終了コードに対応し、ディレクトリーツリー全体で同じ処理を実行 | cargo install dates-le · crates.io |
| ターミナル(Node 経由) | Rust 版とバイト単位で同じコマンドライン | npx dates-le · npm |
| 任意の MCP エージェント(Node 経由) | stdio 経由の extract_dates | npx dates-le-mcp · npm |
AI エージェントから使用する
同じエンジンがMCPサーバーとしても動作するため、コマンドを実行する代わりに、エージェントから直接呼び出せます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストール不要です — 拡張機能がエージェントモードに extract_dates を登録します |
| Claude Code | claude mcp add dates-le -- npx -y dates-le-mcp |
| Cursor、Windsurf、その他 | npx dates-le-mcp を指定します |
extract_dates(content, format?, filename?, dedupe?, dateOrder?, kinds?, maxResults?)
表記、解釈可能な場合はエポック値、1 始まりの行番号と列番号を含むすべての日付を返します。デフォルトでは最大 500 件で、超過した場合は meta.truncated に示されます。dateOrder(mdy または dmy、デフォルトは mdy)は、05/01/2024 のようにどちらの順序でも解釈できる数値日付の読み方を決定します。kinds で返す日付の種類を選択できます。unix は明示的に指定しない限り含まれません。
サーバーはコンテンツを受け取ってデータを返します。ファイルの読み込みや、独自のネットワークリクエストは行いません。npm では dates-le-mcp として、MCP レジストリでは io.github.nolindnaidoo/dates-le として公開されています。
手動で設定する — MCP 設定ファイルを使う任意のホスト
ほとんどのホストでは JSON 設定ファイルを読み込みます。次のエントリーを追加してください。
{
"mcpServers": {
"dates-le": {
"command": "npx",
"args": ["-y", "dates-le-mcp"]
}
}
}
初回実行時に -y を指定すると、インストールの確認をスキップします。リリースを追跡せず、バージョンを固定したい場合は、[email protected] のように指定してください。
起動のたびに npx を実行したくない場合は、一度インストールして、代わりにバイナリを指定してください。
npm install -g dates-le-mcp
{
"mcpServers": {
"dates-le": { "command": "dates-le-mcp" }
}
}
stdio 経由で MCP 通信を行います。環境変数、API キー、独自の設定はいずれも不要です。ほかのものと連携する前に動作を確認するには、次を実行してください。
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y dates-le-mcp
ツールの一覧が表示されて終了します。extract_dates が表示されれば、サーバーは動作しています。
| 形式 | 言語 ID | 抽出される内容 |
|---|---|---|
| JSON | json | 内容に含まれる認識可能な日付パターンすべて |
| YAML | yaml、yml | 内容に含まれる認識可能な日付パターンすべて |
| CSV | csv | セルごとに、認識可能な日付パターンすべて |
| XML | xml | コメント外の日付パターン(インラインコメントと複数行コメントはスキップされます) |
| ログ/プレーンテキスト | log、plaintext | 上記すべてに加え、YYYY-MM-DD HH:mm:ss 形式のログ行、syslog(Mon DD HH:mm:ss)、Apache アクセスログのタイムスタンプ |
| JavaScript/TypeScript | javascript、javascriptreact、typescript、typescriptreact | 上記すべてに加え、new Date()、Date.parse()、moment()、dayjs()、DateTime.fromISO() の文字列引数 |
| HTML | html | 上記すべてに加え、datetime 属性、日付を含む <meta> タグ、JSON-LD の datePublished/dateModified |
| TOML/Markdown | toml、markdown、md | 内容に含まれる認識可能な日付パターンすべて |
| INI/プロパティ | ini、cfg、conf、properties | 内容に含まれる認識可能な日付パターンすべて |
| その他すべて | その他すべての言語 ID | 内容に含まれる認識可能な日付パターンすべて |
すべてのドキュメントが読み取られます。 形式固有のパターンが追加されることはあっても、共通パターンが削除されることはありません。そのため、ここに記載されていない言語 ID(Python、Go、Rust、shell、SQL)も拒否されず、共通パターンでスキャンされます。形式固有の追加パターンは適用されません。たとえば、Jan 15 10:30:47 はログファイルでは日付ですが、Python ファイルでは3つの単語として扱われます。
認識可能な日付パターン:拡張形式の ISO 8601(2024-01-15T10:30:00Z、ミリ秒とオフセットは省略可能)、基本形式(20240115、20240115T103045Z)、週形式(2024-W03、2024-W03-1)、通日形式(2024-015);RFC 2822(Mon, 15 Jan 2024 10:30:00 GMT);dates-le.kinds に unix が含まれている場合の秒、ミリ秒、マイクロ秒、ナノ秒単位の Unix エポック(2001-09-09 から 2100 年までの範囲に収まる10、13、16、または19桁の数字。電話番号、リクエスト ID、カード番号が2100年代や2200年代の日付として扱われることはありません。より長い数字、コミットハッシュなどのより長い文字列、または浮動小数点数の小数部分に含まれる数字は、一切照合されません);UTC 文字列;YYYY-MM-DD 形式の日付;/、.、- で区切られた、日または月が先の数値日付(15/01/2024、1/15/2024、15.01.2024 14:00、15-01-2024 3:30 PM。時刻は省略可能);月を文字で表記した日付(15 January 2024、3rd Feb. 2024、Jan 15, 2024、15-JAN-2024)。数値日付は、月としては12を超える数がある場合に可能な解釈で読み取られます。両方の数値が月として解釈可能な場合に限り、dates-le.dateOrder によって順序が決まります。ピリオド区切りの日付は常に日が先です。数値または文字で表記された日付はすべてカレンダーに照合されるため、31/02/2024 は日付として扱われません。また、数値の年は1900~2099の範囲内である必要があります。検出された各日付は、実際の行と列の位置とともに報告されます。タイムスタンプに解決できない値は抽出されません。
タイムゾーン名は、固定オフセットの GMT/UT/UTC/Z、米国の8つの略称、および CEST、CET、BST、JST、AEST、IST です。これらは固定値であり、タイムゾーンに応じて変化するものではありません。
既知の制限事項:曖昧な数値日付は dates-le.dateOrder に従います。設定を変更しない場合、月が先になります。月の英語表記のみ対応しています。syslog の行には年が含まれないため、現在の年が仮定されます。IST は3つの異なるタイムゾーンを指すため、インドの +05:30 として読み取られます。8桁の数字のみの日付は1900~2099年の範囲でのみ日付として扱われます。また、エポックの範囲にある10桁の数字は Unix 時刻と区別できないため、この種類の認識は有効にしない限り無効です。
フォルダーまたはワークスペース全体を対象にする
Extract は、開いているドキュメントを読み取ります。スキャンではディスク上の複数のファイルを読み取り、プロジェクトの日付を時系列順にまとめたレポートを1つ生成します。
- ワークスペース全体:コマンドパレットから
Dates-LE: Extract Dates from Workspaceを実行します。 - フォルダー1つ:エクスプローラーでフォルダーを右クリックして
Extract Dates from Folderを選択するか、Dates-LE: Extract Dates from Folderを実行してフォルダーを選択します。 各日付は、表記にかかわらず最も古いものから一度ずつ掲載され、表記、書かれた回数、場所が示されます。
# Dates-LE workspace report
`my-project` · 3 file(s) read · 3 distinct date(s), 5 occurrence(s) in 3 file(s)
| Date | Written as | Occurrences | Files | Where |
|---|---|---|---|---|
| `2024-01-15` | `2024-01-15`, `2024-01-15T00:00:00Z`, `January 15, 2024` | 3 | 2 | |
| `2024-03-01T08:30:00Z` | `2024-03-01T10:30:00+02:00` | 1 | 1 | `data/events.json` · **2:13** |
| `2025-12-31` | `2025-12-31` | 1 | 1 | `docs/release.md` · **2:14** |
## `2024-01-15` (3)
- `docs/release.md` · **1:9**, **1:31**
- `src/config.ts` · **1:17**
同じ日付は1行です。 2024-01-15、2024-01-15T00:00:00Z、January 15, 2024 は、3通りに表記された同じ日付であり、表にもそのように示されます。タイムゾーン付きで書かれた日付は時点として扱われ、UTC で示されます。書かれたときのオフセットは「Written as」列に残ります。タイムゾーンなしで書かれた日付は、書かれた表記どおりに示されるため、どのマシンでも同じ日付です。03/04/2024 のような曖昧な日付は、dates-le.dateOrder の指定に従って解釈されます。
すべての日付が表に掲載されます。一度だけ書かれた日付は、その行に表示されます。繰り返し書かれた日付については、場所をそれぞれ記載するセクションが下に追加されます。
これは dates-le.showPositions がオンの場合です。既定ではオフで、その場合、場所はファイル名と、そのファイル内に日付が何回あるかで示されます:docs/release.md (2)。クリップボードにコピーされる内容は Extract と同様に、dates-le.clipboardIncludesPositions に従います。
スキャンで読み取る内容。 ファイルはディスクから取得されるため、保存されていない編集内容は反映されません。安全上のサイズ上限を超えるファイルや、UTF-8 テキストではないファイルは読み取られません。ファイル数が 5,000 件、または一覧表示される出現箇所が 10,000 件に達すると処理を停止します。レポートには、除外した項目ごとに末尾に1行が追加されるため、短いレポートをプロジェクトに問題がない証拠と誤解することはありません。
スキャン対象外の項目と変更方法。 既定でオンになっているスイッチが3つあり、それぞれ Settings で個別にオフにできます。
| スイッチ | スキップする対象 |
|---|---|
scanUseDefaultExcludes | 依存関係フォルダー、ビルド出力、ツールキャッシュ、ロックファイル。完全な一覧は以下を参照してください |
scanRespectGitignore | プロジェクトの .gitignore ファイルでスキップされるすべての項目 |
scanSkipBinaryFiles | 画像、フォント、アーカイブなどのテキストではないファイル |
スイッチをオフにせず、結果を調整できるリストが2つあります。スキップする対象を増やすには、パターンを scanExcludes に追加します。スイッチによってスキップされる項目を読み取るには、scanAlwaysInclude に追加します。
{
// Also skip the test fixtures.
"dates-le.workspace.scanExcludes": ["**/fixtures/**"],
// Read the vendored code, though the built-in list skips it.
"dates-le.workspace.scanAlwaysInclude": ["**/vendor/**"]
}
Dates-LE: Open Settings を選択すると、これらすべての設定が 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
同じ抽出処理を、ターミナルまたは CI のステップから実行できます。Rust 製 CLI は
crate/ にあり、拡張機能と同じコーパス
crate/fixtures/ を共有するため、両者で
ドキュメントの読み取り方が異なることはありません。同じコマンドラインは
npm からも dates-le として提供されており、Node はあるものの Rust がない
マシンでも使えます。CI では、3 つのオペレーティングシステムで
クレートとのバイト単位の一致を検証しています。
dates-le . # every date in the tree; JSON on stdout when piped
dates-le --before 2026-01-01 . # everything already in the past
dates-le --sort --iso config/ # ordered by instant, in readable form
dates-le mcp # the same extraction over MCP on stdio
npm (dates-le) または crates.io (dates-le) からインストールできます。どちらも同じ dates-le コマンドをインストールします。
npm install -g dates-le # or run it once: npx dates-le
cargo install dates-le
基準となるのは時点です。 2024-01-15、1705276800、
Mon, 15 Jan 2024 は、同じ瞬間を 3 通りに表したものです。それぞれを数値に
解決することで、読み取るだけの 3 つの文字列ではなく、ソートや比較ができるようになります。解決結果は、V8 自身から取得した 178 件のケースに対して、レガシーパーサーも含めて V8 の Date.parse と完全に一致します。
タイムゾーンの指定がない日付は、マシンのタイムゾーンに基づいて解決されます。それが正しい結果であり、マシンごとに実際に異なるためです。TZ が反映されます。
抽出する日付の種類を選ぶ
dates-le.kinds は、各コマンドが抽出する日付の種類を選ぶチェックリストです。選択を外した種類は、Extract、フォルダーやワークスペースのスキャン、Analyze、Convert、Filter、Validate のいずれでも報告されません。
| 種類 | 読み取る形式 | デフォルト |
|---|---|---|
iso | 2024-01-15T10:30:00Z | オン |
simple | 2024-01-15 | オン |
local | 01/15/2024、January 15, 2024 | オン |
rfc2822 | Mon, 15 Jan 2024 10:30:00 GMT | オン |
utc | Mon Jan 15 2024 10:30:00 GMT+0000 | オン |
week | 2024-W03 | オン |
ordinal | 2024-015 | オン |
basic | 20240115 | オン |
custom | ファイル形式で指定された日付:ログ行、HTML の datetime 属性、new Date("…") | オン |
unix | 1705314645 | オフ |
Unix 時刻はデフォルトでオフです。 日付のように見えない唯一の種類です。範囲内の 10 桁の数字は何でも Unix 時刻として扱われ、同じ桁数の ID や電話番号も該当します。Unix 時刻を含むログやデータを読み取る場合は、有効にしてください。
{
"dates-le.kinds": ["iso", "simple", "local", "rfc2822", "utc", "week", "ordinal", "basic", "custom", "unix"]
}
MCP ツールと CLI では、同じリストを kinds 引数と --kinds フラグとして指定できます。拡張機能と同様に、デフォルトでは unix は含まれません。
コマンド
| コマンド | 説明 |
|---|---|
Dates-LE: Extract Dates | アクティブなドキュメントからすべての日付を抽出します |
Dates-LE: Extract Dates from Workspace | ワークスペース内のすべてのファイルから日付を抽出し、時系列順に表示します。各日付は 1 回だけ表示され、表記と場所も示されます |
Dates-LE: Extract Dates from Folder | 1 つのフォルダーから同様に抽出します。Explorer のフォルダーでも実行できます |
Dates-LE: Analyze Dates | 統計、パターン、クラスター、間隔、異常を分析します |
Dates-LE: Convert Dates | 抽出した日付を ISO、RFC 2822、Unix、UTC、ローカル、シンプル、またはカスタム形式に変換します |
Dates-LE: Filter Dates | 範囲、形式、重複、未来/過去で絞り込みます |
Dates-LE: Validate Dates | 選択可能なルールに照らして、抽出した日付を検証します |
Dates-LE: Deduplicate Dates | 結果から重複する行を削除します |
Dates-LE: Sort Dates | 結果を時系列順またはアルファベット順に並べ替えます |
Dates-LE: Open Settings | Dates-LE の設定を開きます |
Dates-LE: Help | 組み込みドキュメントを表示します |
デフォルトでは、どのコマンドにもキーは割り当てられていません。エディターの キーボードショートカット から任意のキーを割り当ててください。
設定
| 設定 | デフォルト | 説明 |
|---|---|---|
dates-le.openResultsSideBySide | true | 現在のエディターの横に結果を開きます |
dates-le.showPositions | false | 各日付の行と列を表示します |
dates-le.copyToClipboardEnabled | false | 結果もクリップボードにコピーします |
dates-le.clipboardIncludesPositions | false | コピーに行と列を含めます |
dates-le.dateOrder | mdy | どちらの順にも解釈できる数値の日付の読み取り方です。mdy は 05/01/2024 を5月1日、dmy は1月5日として読み取ります |
dates-le.kinds | iso, simple, local, rfc2822, utc, week, ordinal, basic, custom | 抽出する日付の種類です。unix を追加すると、1705314645 のような単独の数値を日付として読み取ります |
dates-le.notificationsLevel | silent | all = すべての通知、important = 警告とエラー、silent = エラーのみ |
dates-le.workspace.scanPatterns | ["**/*"] | フォルダーまたはワークスペースのスキャンで読み取るファイル |
dates-le.workspace.scanUseDefaultExcludes | true | 依存関係フォルダー、ビルド出力、キャッシュ、ロックファイルをスキップします |
dates-le.workspace.scanRespectGitignore | true | プロジェクトの .gitignore ファイルで除外されるものをスキップします |
dates-le.workspace.scanSkipBinaryFiles | true | 画像、フォント、アーカイブなどのテキストではないファイルをスキップします |
dates-le.workspace.scanExcludes | [] | glob パターンで追加のファイルをスキップします |
dates-le.workspace.scanAlwaysInclude | [] | 上記3つのいずれかでスキップされる場合でも読み取るファイル |
dates-le.workspace.scanMaxFiles | 5000 | 1回のスキャンで読み取るファイルの最大数 |
dates-le.workspace.scanMaxResults | 10000 | 読み取りを停止するまでに1回のスキャンで一覧表示する出現箇所の最大数 |
dates-le.safety.enabled | true | 非常に大きなファイルに対するガードレールです |
dates-le.safety.fileSizeWarnBytes | 1000000 | このファイルサイズを超える場合、抽出を拒否します |
dates-le.statusBar.enabled | true | ステータスバーの項目を表示します |
dates-le.telemetryEnabled | false | ローカルのみのイベントログです(「プライバシー」を参照) |
言語
英語以外に12言語に対応しています。
ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)
両方に対応しています。マニフェスト(コマンドのタイトル、設定名と説明)と、 拡張機能の実行中に表示されるすべての要素(通知、ステータスバー、 クイックピック、プロンプト)です。拡張機能は VS Code の 表示言語に従うため、エディターにすでに設定されている言語と一致します。独自の 設定はありません。
プライバシーとセキュリティ
- ネットワークアクセスはありません。 拡張機能がデータをどこかに送信することはありません。
telemetryEnabled設定でイベントが書き込まれるのは、確認可能なローカルの出力チャンネル(Dates-LE Telemetry)のみです。 - 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/dates-le |
パフォーマンス
| 入力 | サイズ | 検出数 | 時間 | レート | スキャン速度 |
|---|---|---|---|---|---|
| サーバーログ(ISO) | 1.74 MB | 40,000 | 139.92 ms | 285,887/sec | 12.5 MB/s |
| JSON レコード | 1.42 MB | 25,000 | 82.75 ms | 302,132/sec | 17.2 MB/s |
| CSV エクスポート | 0.64 MB | 40,000 | 39.15 ms | 1,021,610/sec | 16.3 MB/s |
Apple M5 Pro、24 GB RAM、Node 24.3.0 で、ウォームアップ後に 7 回実行した中央値です。入力はチェックインせず、scripts/benchmark.ts で生成するため、上記のサイズは測定時の値と完全に一致します。bun run benchmark で再現できます。
これらの値はマシン固有であり、CI では保証されません。ビルドのゲートとなるベンチマークからわかるのは、ランナーがどれだけビジーだったかだけです。
テスト
| 指標 | カバレッジ |
|---|---|
| ステートメント | 88.32% |
| 分岐 | 78.91% |
| 関数 | 91.87% |
| 行 | 89.98% |
31 ファイルにわたる 396 件のテストケースに加え、実際の 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 つのサーバーを複数のクライアントで再利用できます。