Numbers-LE について
Numbers-LEは、設定やデータファイル、テキストから数値を抽出し、値やコード定数を確認する開発者向けツールです。構造化形式と各言語の数値リテラルに対応し、エディター、コマンドライン、MCPサーバーから利用できます。
主な機能
- 01構造化ファイルやコードから数値を抽出
- 0212言語の数値リテラルを認識
- 03可能な場合に表記と正確な位置を提示
- 04抽出結果の重複排除と並べ替え
活用シーン
- 01設定やテストフィクスチャの数値範囲を確認
- 02複数の設定ファイルでポートや上限を比較
- 03コードベースで変更された定数を特定
MCP 対応
MCPサーバーはstdio経由で `extract_numbers` ツールを提供します。内容を受け取って抽出値を返し、ファイル読み込みやネットワークリクエストは行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| dedupe | boolean | いいえ | 重複する値をまとめ、最初に出現した値のみを残します。 |
| format | enum | いいえ | ドキュメント形式。任意です。形式が認識できない場合、または指定されていない場合は、テキストを直接スキャンします。json | jsonc | yaml | csv | tsv | toml | ini | env | python | rust | go | java | kotlin | csharp | cpp | c | javascript | typescript | sql | shellscript |
| content | string | はい | スキャンするドキュメントのテキスト。 |
| filename | string | いいえ | `format` が未指定の場合に形式を推定するためのファイル名。例:"config.toml"。 |
| maxResults | integer | いいえ | 返される数値の上限(デフォルトは 500)。meta.truncated は、破棄された結果があるかどうかを示します。 |
詳細
Numbers-LE:手間なく数字を抽出
キーを1回押すだけで、現在のファイルからすべての数字を抽出
JSON/JSONC、YAML、CSV/TSV、TOML、INI、環境ファイル、および12種類のソース言語
役に立ちましたか? 星や評価を付けると、ほかの開発者にも見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace
できること
ファイルを開き、Numbers-LE: Extract Numbers を実行すると、ドキュメント内のすべての数値が新しいエディターに表示されます。そこから重複を削除して並べ替えられます。VS Code のほか、Cursor や VSCodium などの VS Code ベースのエディターでも動作します(Open VSX からインストール可能です)。
- データ検証 — 設定ファイルやフィクスチャから数字を抽出し、範囲をひと目で確認できます
- 設定の監査 — INI/TOML/.env ファイル間でポート、しきい値、制限値を比較できます
- CSV の処理 — すべての列、1列、または複数の列を抽出し、それぞれ別のドキュメントに出力できます
インストール
| 場所 | 利用できるもの | インストール |
|---|---|---|
| VS Code | エディター内でキーを押すだけで、同じ数字抽出を利用できます | Marketplace |
| Cursor、VSCodium、Windsurf | 同じ拡張機能を利用できます | Open VSX |
| ターミナルまたは CI のステップ | ディレクトリーツリー全体を同様に処理し、終了コードを返します | npx numbers-le · npm または cargo install numbers-le · crates.io |
| Node 経由で任意の MCP エージェント | stdio 経由の extract_numbers | npx numbers-le-mcp · npm |
AI エージェントから使用する
同じエンジンがMCPサーバーとして動作するため、コマンドを実行する代わりに、エージェントから直接呼び出せます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストールは不要です — 拡張機能がエージェントモードにextract_numbersを登録します |
| Claude Code | claude mcp add numbers-le -- npx -y numbers-le-mcp |
| Cursor、Windsurf、その他 | npx numbers-le-mcpを指定します |
extract_numbers(content, format?, filename?, dedupe?, maxResults?)
値をドキュメント内の順序で返します。それぞれに、記述時の表記が付属します。また、JSON、ソースコード、プレーンテキストでは、位置が正確に特定できる場合、1始まりの行番号と列番号も付属します。解析済み形式(YAML、TOML、CSV、INI、dotenv)では、推測した位置ではなく、位置情報は付属しません。デフォルトでは500件までに制限され、meta.truncatedで示されます。形式の指定は任意です。認識されない形式も拒否されず、プレーンテキストとしてスキャンされます。
サーバーはコンテンツを受け取ってデータを返すもので、ファイルの読み取りや独自のネットワークリクエストは行いません。npmではnumbers-le-mcpとして、MCP レジストリではio.github.nolindnaidoo/numbers-leとして公開されています。
手動での設定 — MCP 設定ファイルを使う任意のホスト
ほとんどのホストではJSON設定ファイルを読み込みます。エントリーを1つ追加します。
{
"mcpServers": {
"numbers-le": {
"command": "npx",
"args": ["-y", "numbers-le-mcp"]
}
}
}
-yを指定すると、初回実行時のインストール確認を省略できます。リリースの追跡を避けたい場合は、バージョンを固定します — [email protected]。
起動のたびにnpxを実行したくない場合は、一度インストールして、代わりにバイナリを指定します。
npm install -g numbers-le-mcp
{
"mcpServers": {
"numbers-le": { "command": "numbers-le-mcp" }
}
}
stdio経由でMCP通信を行い、環境変数、APIキー、独自の設定は必要ありません。何かに組み込む前に確認するには、次を実行します。
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y numbers-le-mcp
ツールの一覧を出力して終了します。extract_numbersが表示されれば、サーバーは動作しています。
対応形式
| 形式 | 数値として扱われるもの |
|---|---|
| JSON | 構造内のあらゆる場所にある数値。引用符で囲まれた数値("42")は文字列であり、数値ではないため、抽出されません |
| YAML | 16進数/8進数の整数形式や指数表記を含む数値。複数ドキュメント(---)のストリームでは、すべてのドキュメントから抽出されます |
| TOML | 整数と浮動小数点数(日付は数値ではありません) |
| CSV | 内容全体が数値であるセル — 19.99は対象になりますが、12abcと1,000は対象になりません。ヘッダーの推定は行わず、すべての行をデータとして扱います |
| INI | 内容全体が数値である値(INIの値は本質的に文字列です) |
| 環境変数 | 内容全体が数値である値(PORT=3000は3000を返しますが、VERSION=1.2.3は何も返しません) |
共通ポリシー(すべての形式に適用される1つのヒューリスティックモジュール):有限数のみを抽出します — NaNとinf/.infは結果に含まれません。また、変換対象の文字列は全体が数値でなければなりません。符号、小数点、指数表記を任意に付けた通常の10進数が対象です。
Python、Rust、Go、Java、Kotlin、C#、C、C++、JavaScript、TypeScript、SQL、シェルは、数値リテラル抽出器で読み取られます。この抽出器は、16進数0xFF、2進数0b1010、8進数0o755と旧式の0755、桁区切りの1_000_000と1'000、接尾辞の123n、1.5f、10u32、100Lを認識します。また、u32は型名であり、数値の32ではないことも判別します。方言によって結果が変わります。C、C++、Go、Javaでは0755は493となり、Rust、Python 3、Kotlin、C#では755となります。
検出された数値にはすべて、記述時の表記(decimal、hex、binary、octal、scientific、bigint)が付属します。それ以外のものについては、形式を明示的に選択するか、プレーンテキストとしてスキャンできます(文法は適用されないため、v1.2.3は1.2と0.3として読み取られます)。
CLI
同じ抽出処理を、ターミナルやシェルのパイプラインから実行できます。Rust 製の CLI は crate/ にあり、拡張機能と同じコーパス(crate/fixtures/)を共有するため、両者でドキュメントの読み取り方が異なることはありません。npm install -g numbers-le で npm からインストールするか(または npx numbers-le で実行)、cargo install numbers-le で crates.io からインストールしてください。どちらも同じコマンドをインストールし、壊れたドキュメントを拒否する際にパーサーが使う文言を除き、出力はバイト単位で完全に一致します。
numbers-le . # every number in the tree; JSON on stdout when piped
numbers-le --values config/ # just the numbers, one per line
numbers-le mcp # the same extraction over MCP on stdio
# the point of the whole thing:
numbers-le --values --dedupe src/ | sort -n > after.txt
diff before.txt after.txt # what constants moved this release
npm(numbers-le)または crates.io(numbers-le)からインストールできます。どちらも同じ numbers-le コマンドをインストールします。
npm install -g numbers-le # or run it once: npx numbers-le
cargo install numbers-le
コード内のレートが仕様書に記載されたレートと一致することを、誰かが確認する必要があります。 税率、保持期間、丸めの境界などです。規制対象の環境では、この確認は納品物の一部であり、担当者は通常、リポジトリをチェックアウトせず、エディターを開くこともありません。
数値は JavaScript が出力する形式そのままで表示されます — Rust の 1000000000000000000000 ではなく、1e+21 です。このツールの出力はすべてテキストとしての数値であるため、表示形式が契約となり、コーパスによって固定されています。
終了コードは grep に準拠します — 0 は数値が見つかった場合、1 は見つからなかった場合、2 は質問の形式が不正だった場合です。
コマンド
| コマンド | 説明 |
|---|---|
Numbers-LE: Extract Numbers | アクティブなドキュメントからすべての数値を抽出します |
Numbers-LE: Deduplicate Numbers | 結果から重複する数値を削除します |
Numbers-LE: Sort Numbers | 数値または大きさの順に結果を並べ替えます |
Numbers-LE: Open Settings | Numbers-LE の設定を開きます |
Numbers-LE: Help & Troubleshooting | 組み込みドキュメント |
デフォルトでは、どのコマンドにもキーは割り当てられていません。エディターの Keyboard Shortcuts で任意のコマンドにキーを割り当ててください。
設定
| 設定 | デフォルト | 説明 |
|---|---|---|
numbers-le.openResultsSideBySide | true | 現在のエディターの横に結果を開きます |
numbers-le.postProcess.openInNewFile | true | 重複削除/並べ替えの結果を、エディターの内容を置き換えるのではなく、新しいファイルに書き込みます |
numbers-le.showPositions | false | 各数値の行と列を表示します |
numbers-le.copyToClipboardEnabled | false | 結果もクリップボードにコピーします(CSV を除く) |
numbers-le.clipboardIncludesPositions | false | コピーに行と列も含めます |
numbers-le.dedupeEnabled | false | 抽出時に重複を自動的に削除します |
numbers-le.sortEnabled | false | 抽出時に自動的に並べ替えます |
numbers-le.sortMode | off | numeric-asc/desc、magnitude-asc/desc |
numbers-le.showParseErrors | false | 解析エラーを通知として表示します |
numbers-le.notificationsLevel | silent | all = すべての通知、important = 警告とエラー、silent = エラーのみ |
numbers-le.safety.enabled | true | 非常に大きなファイル/出力に対するガードレール |
numbers-le.safety.fileSizeWarnBytes | 1000000 | このファイルサイズを超えると警告します |
numbers-le.safety.largeOutputLinesThreshold | 50000 | 結果数がこの値を超えると、開く/コピー/キャンセルを選択できます |
numbers-le.safety.manyDocumentsThreshold | 8 | この数の列ドキュメントを開く前に確認します |
numbers-le.statusBar.enabled | true | ステータスバー項目を表示します |
numbers-le.telemetryEnabled | false | ローカルのみのイベントログ(プライバシーを参照) |
言語
英語以外に、12 言語に対応しています。
ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)
両方の領域に対応しています。マニフェスト(コマンドのタイトル、設定名と説明)と、拡張機能の実行中に表示されるすべての要素(通知、ステータスバー、クイックピック、プロンプト)です。拡張機能は VS Code の表示言語に従うため、エディターの現在の言語設定と一致します。独自の設定はありません。
プライバシーとセキュリティ
- ネットワークアクセスはありません。 拡張機能がデータを外部に送信することはありません。
telemetryEnabled設定では、確認できるローカルの出力チャンネル(Numbers-LE)にイベントを書き込むだけです。 - MCP サーバーも同じ方針です。 コンテンツを引数として受け取り、データを返します。ファイルシステムへのアクセス、ネットワーク呼び出し、テレメトリーはありません。エージェントにはすでにファイル読み取りツールがあるため、サーバー内でそれらを重複させても、機能が増えないままパストラバーサルの攻撃対象領域が広がるだけです。サーバーがどちらかにアクセスできるものをインポートした場合、
check:mcp-bundleはビルドを失敗させます。 - エラー通知では、ホームディレクトリと認証情報のような文字列を伏せます。
- 評価プロンプトは最大 2 回だけ表示されます。 3 回目の正常な使用時に、評価していただけるかどうかを拡張機能が一度尋ねます。Later を選択するか、プロンプトを閉じた場合は、20 回目にもう一度だけ尋ねます。Don't Ask Again を選ぶと、以降は表示されません。
notificationsLevelを自分でimportantまたはsilentに設定すると、表示されなくなります。カウントは VS Code の拡張機能ストレージに保存され、外部に送信されることはありません。Rate を選ぶと、インストール元のマーケットプレイス(VS Code Marketplace または Open VSX)がブラウザーで開きます。
ドキュメント
| 内容 | 場所 |
|---|---|
| ツールが出力してよい内容 — 対象範囲、出力仕様、拒否事項、対象外事項 | crate/SPEC.md |
| 拡張機能の構築方法と構成 — アーキテクチャ、不変条件、ツールチェーン、リリース | AGENTS.md |
| CLI の構築方法と構成 | crate/AGENTS.md |
| 変更内容 | CHANGELOG.md · crate/CHANGELOG.md |
| ツールのページと、ほかの 15 個のツール | letools.dev/tools/numbers-le |
パフォーマンス
| 入力 | サイズ | 検出数 | 時間 | 速度 | スキャン速度 |
|---|---|---|---|---|---|
| JSON メトリクス | 2.18 MB | 120,000 | 69.12 ms | 1,736,013/sec | 31.6 MB/s |
| CSV データ | 0.93 MB | 150,000 | 88.02 ms | 1,704,098/sec | 10.6 MB/s |
| INI 設定 | 0.42 MB | 30,000 | 23.01 ms | 1,303,868/sec | 18 MB/s |
ウォームアップ後、Apple M5 Pro、24 GB RAM、Node 24.3.0 で 7 回実行した際の中央値です。入力はチェックインされたファイルではなく、scripts/benchmark.ts によって生成されます。そのため、上記のサイズは実際に測定した値と完全に一致します。bun run benchmark で再現できます。
これらの値はマシン固有であり、CI では保証されません。ビルドをブロックするベンチマークで分かるのは、ランナーがどれだけビジーだったかだけです。
テスト
| 指標 | カバレッジ |
|---|---|
| ステートメント | 81.24% |
| 分岐 | 72.38% |
| 関数 | 89.20% |
| 行 | 82.72% |
37 ファイルにわたる 525 件のテストケースに加え、実際の 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 つのサーバーを複数のクライアントで再利用できます。