mcpField
E
EnvSync-LE

EnvSync-LE

ローカル
letools.dev開発ツール11 日前に更新

EnvSync-LE について

EnvSync-LEは複数のdotenvファイルの変数名を比較し、値を読んだりファイルを変更したりせずに、キーの不足や余分な項目を報告します。VS Code系エディター、ターミナル、CI、MCP対応エージェントで使えます。

主な機能

  1. 01自動・手動・テンプレート方式でキーを比較
  2. 02監視対象ファイルの変更時に自動チェック
  3. 03ステータスバーの件数表示とMarkdownレポート
  4. 04ターミナルやCI向けのCLI出力と終了コード
  5. 05パスではなくファイル内容を受け取るMCPツール

活用シーン

  1. 01デプロイ前に環境変数キーの不足を発見
  2. 02CIでdotenvファイルの差異を確認
  3. 03値を明かさずにエージェントでdotenv内容を比較

MCP 対応

stdioのMCPサーバーは`compare_env_files`を公開し、ファイル内容を受け取って不足または余分なキー名を返します。ファイルの読み取りやネットワーク通信は行いません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nolindnaidoo-envsync-le": {
"command": "npx",
"args": [
"-y",
"envsync-le-mcp"
]
}
}
}
起動コマンドnpx -y envsync-le-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmenvsync-le-mcp2.5.0

ツール

1

掲載時のツール一覧 · 3 日前に更新

パラメーター型必須説明
modeenumいいえ"auto" はすべてのキーの和集合と比較し、"template" は 1 つのファイルと比較します。auto | template
filesarrayはい比較する dotenv ファイル。
maxResultsintegerいいえ返されるキー不一致の上限(デフォルトは 500)。meta.truncated は省略された結果があるかどうかを示します。
templatePathstringいいえテンプレートとなるファイルを指定します。mode が "template" の場合は必須です。
caseSensitivebooleanいいえキー名の比較で大文字と小文字を区別するかどうか。

詳細

EnvSync-LE ロゴ

EnvSync-LE:.env の同期を手間なく実現

.env ファイル間のキー不足を、問題になる前に発見
自動チェック、ステータスバーのカウンター、シンプルな Markdown レポート

VS Code Marketplace からインストール Open VSX のダウンロード数 npm の envsync-le-mcp npm の envsync-le crates.io の envsync-le LE Tools


VS Code での EnvSync-LE

役に立ちましたか? スターや評価を付けると、ほかの開発者にも見つけてもらえます — ★ GitHub · ★ Open VSX · ★ Marketplace

機能

EnvSync-LE は、ワークスペース内の .env ファイル間で変数名を比較し、どのファイルでどのキーが不足しているかを知らせます。値を読み取ったり比較したりすることはなく、ファイルを変更することもありません。VS Code のほか、Cursor や VSCodium などの VS Code ベースのエディターでも動作します(Open VSX からインストール可能)。

  • 自動チェック — 監視対象の .env ファイルが変更されるたびに、デバウンス処理を行った同期チェックを実行します
  • ステータスバーのカウンター — 現在の問題数を表示し、ワンクリックで全レポートを確認できます
  • Markdown レポート — Show Details で、ファイルごとに不足しているすべてのキーを一覧表示します
  • 3 つの比較モード — auto(すべてのキーの和集合)、manual(指定したファイルのみ)、template(1 つの参照ファイルを基準にすべてを検証。ファイルにあってテンプレートにないキーもレポートします)
  • 除外リスト — ファイル(例:.env.example)を一時的にチェック対象から除外します

インストール

場所内容インストール
VS Codeエディター内で同じ比較をリアルタイムに実行Marketplace
Cursor、VSCodium、Windsurf同じ拡張機能Open VSX
ターミナルまたは CI ステップツリー全体に対する同じ処理を実行し、終了コードを取得npx envsync-le · npm または cargo install envsync-le · crates.io
Node 経由で利用するあらゆる MCP エージェントstdio 経由の compare_env_filesnpx envsync-le-mcp · npm

AI エージェントから使用する

同じエンジンがMCPサーバーとして動作するため、コマンドを実行する代わりに、エージェントから直接呼び出せます。

エディター方法
VS Code 1.101+インストールは不要です。拡張機能がエージェントモードにcompare_env_filesを登録します
Claude Codeclaude mcp add envsync-le -- npx -y envsync-le-mcp
Cursor、Windsurf、その他npx envsync-le-mcpを指定します

Claude Codeのエージェントがenvsync-le MCPサーバーを呼び出している様子

compare_env_files(files[], mode?, templatePath?, caseSensitive?, maxResults?)

ファイルの内容を直接受け取り、どのファイルにどのキーがないかを報告します。返されるのはキー名のみで、値は返されません。認証情報が含まれるdotenvファイルの比較に、値は必要ありません。

サーバーは内容を受け取ってデータを返すだけです。ファイルを読み込まず、独自にネットワークリクエストを送信することもありません。npmではenvsync-le-mcpとして、MCPレジストリではio.github.nolindnaidoo/envsync-leとして公開されています。

手動で設定する — MCP設定ファイルを使うすべてのホスト

ほとんどのホストはJSON設定を読み込みます。次のエントリーを追加します。

{
  "mcpServers": {
    "envsync-le": {
      "command": "npx",
      "args": ["-y", "envsync-le-mcp"]
    }
  }
}

初回実行時に-yを指定すると、インストール確認を省略できます。リリースを追跡しない場合は、[email protected]のようにバージョンを固定してください。

毎回の起動時にnpxを実行したくない場合は、一度インストールして、代わりにバイナリを指定します。

npm install -g envsync-le-mcp
{
  "mcpServers": {
    "envsync-le": { "command": "envsync-le-mcp" }
  }
}

MCP over stdioで通信するため、環境変数、APIキー、独自の設定は不要です。組み込む前に確認するには、次を実行します。

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y envsync-le-mcp

ツールの一覧を出力して終了します。compare_env_filesが表示されれば、サーバーは動作しています。

ファイルの分類

ファイル名種類
.envベース
.env.local、.env.*.localローカルオーバーライド
.env.example、.env.templateテンプレート
.env.production、.env.prod本番
.env.development、.env.dev開発
.env.testテスト
anything.env、不明なセグメントベース

分類はベース名のセグメントに基づきます。app.device.envは 「開発」には分類されず、Windowsのパスも正しく分類されます。

CLI

同じ比較をターミナルやCIのステップから実行できます。Rust製のCLIは crate/にあり、拡張機能と同じコーパス crate/fixtures/を共有しているため、両者がdotenvファイルを 異なる方法で読み込むことはありません。 npmからnpm install -g envsync-leでインストールするか、npx envsync-leで 実行できます。または、crates.ioからcargo install envsync-leでインストールできます。どちらも 同じコマンドをインストールし、出力がバイト単位で一致するように管理されています。

envsync-le .                            # have these environments drifted? JSON on stdout when piped
envsync-le --template .env.example .    # will this deploy break?
envsync-le mcp                          # the same comparison over MCP on stdio

ターミナルで実行するenvsync-le

npmからインストール(envsync-le)するか、crates.ioからインストール(envsync-le)してください。どちらも同じenvsync-leコマンドをインストールします。

npm上のenvsync-le crates.io上のenvsync-le

npm install -g envsync-le   # or run it once: npx envsync-le
cargo install envsync-le
.env: missing STRIPE_KEY, SENTRY_DSN (in .env.example)
.env.production: missing SENTRY_DSN (in .env.example)
out of sync — 2 files with mismatches across 3 files

終了コードが結果です。同期していれば0、同期していなければ1、不正な質問の場合は2です。 dotenvファイルがひとつも見つからない場合は0です。同期対象が存在しないためです。このファミリーの抽出ツールとは異なり、後続にパイプするリストはありません。数値がそのまま答えです。

**値を読み取ることはありません。**解析、比較、報告の対象はキー名のみです。また、それを単なる約束にとどめないため、個別に3つのチェックを実施しています。

コマンド

コマンド説明
EnvSync-LE: Show Details同期チェックを実行し、Markdown レポートを開きます
EnvSync-LE: Compare Files選択した 2 つ以上の .env ファイルのキーセットを比較します
EnvSync-LE: Set Template.env ファイルを参照テンプレートとして設定します
EnvSync-LE: Clear Template自動比較に戻します
EnvSync-LE: Ignore File.env ファイルを同期チェックの対象から除外します
EnvSync-LE: Unignore File以前に無視したファイルを再び対象に含めます
EnvSync-LE: Clear Ignored Files無視リストを空にします
EnvSync-LE: Open SettingsEnvSync-LE で絞り込んだ VS Code の設定を開きます
EnvSync-LE: Help & Troubleshooting組み込みドキュメントを開きます

デフォルトでは、どのコマンドにもキーは割り当てられていません。エディターの Keyboard Shortcuts から、任意のコマンドにキーを割り当ててください。

設定

設定デフォルト説明
envsync-le.enabledtrue同期チェックのマスタースイッチ
envsync-le.watchPatterns[".env*"]監視して比較するファイルの glob パターン
envsync-le.excludePatterns[]除外する glob パターン。/ を含まないパターンはベース名に一致します(そのため、.env.*.local はネストされたファイルも除外します)
envsync-le.notificationLevelimportantall = 不足キー + 余分なキー、important = 不足キー + エラー、silent = 通知なし
envsync-le.statusBar.enabledtrueステータスバー項目を表示します(すぐに反映されます)
envsync-le.debounceMs1000ファイル変更から同期チェックまでの遅延時間
envsync-le.caseSensitivetrueDB_URL と db_url を異なるキーとして扱います
envsync-le.comparisonModeautoauto、manual、または template
envsync-le.compareOnlyFiles[]手動モードで、これらのファイルのみを比較します(ワークスペース相対パス)
envsync-le.templateFile—テンプレートモードの参照ファイル(Set Template で設定)
envsync-le.temporaryIgnore[]現在無視しているファイル(無視関連コマンドで管理)
envsync-le.telemetryEnabledfalseローカルのみのイベントログ(プライバシーを参照)

解析に関する注意

  • キーは [A-Za-z_][A-Za-z0-9_.-]* に一致する必要があります。そのため、 spring.datasource.url などのドット区切りの名前も対象になります。= の左側が それ以外の場合、その行は解析エラーとして報告されます(ファイルの残りの部分は引き続き 対象になります)。
  • export KEY=value も受け付けます。重複するキーは 1 つとして数えます。
  • "、'、または ` で囲まれた値は複数行にまたがる場合があります。閉じられていない引用符はエラーとして報告されます。
  • auto モードでは、すべてのキーの和集合が参照になります。そのため、「余分なキー」は template モードでのみ存在します。

言語

英語以外に 12 言語に対応しています。

ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)

両方の部分に対応しています。マニフェスト(コマンド名、設定名、説明)と、 拡張機能の実行中に表示されるすべての内容(通知、ステータスバー、クイックピックと プロンプト、レポートの見出し)です。ヘルプページは英語で記述されています。拡張機能は VS Code の表示言語に従うため、エディターに設定されている言語と一致します。拡張機能独自の 設定はありません。

プライバシーとセキュリティ

  • ネットワークアクセスはありません。 拡張機能がデータを外部に送信することはありません。 telemetryEnabled 設定は、確認できるローカルの出力チャンネル(envsync-le)にイベントを書き込むだけです。
  • 値が読み取られたり、表示されたり、ログに記録されたりすることはありません — 比較するのはキー名のみです。
  • MCP サーバーが返すのはキー名のみで、値は返しません。 認証情報を保存するのは dotenv ファイルなので、サーバーは不足または余分なキーがどれかを報告するだけで、その値の内容については一切報告しません。ファイルパスではなく、ファイルの内容を引数として受け取るため、ファイルを読み取ることもネットワークにアクセスすることもありません。バンドルのゲートでは、既知の値がレスポンスに含まれていないことを確認します。
  • エラー通知では、ホームディレクトリと認証情報らしき文字列が伏せられます。
  • 評価のプロンプトは最大 2 回だけ表示されます。 3 回目の正常な使用時に、評価していただけるかどうかを一度尋ねます。後でを選ぶか、閉じた場合は、20 回目にもう一度尋ねます。今後表示しないを選ぶと、表示されなくなります。notificationLevel を自分で 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/envsync-le

パフォーマンス

入力サイズ検出数時間速度スキャン速度
4 ファイル x 500 キー0.02 MB1,9100.29 ms6,690,018/秒63.2 MB/s
24 ファイル x 500 キー0.11 MB11,1031.11 ms9,994,077/秒94.5 MB/s
4 ファイル x 8,000 キー0.32 MB31,1722.04 ms15,279,763/秒158.4 MB/s

Apple M5 Pro、メモリ 24 GB、Node 24.3.0 で、ウォームアップ後に 7 回実行した中央値です。入力は リポジトリに含まれるファイルではなく scripts/benchmark.ts で生成されるため、上記のサイズは 測定された値そのものです。bun run benchmark で再現できます。

これらの値はマシン固有のもので、CI では検証されません。ビルドをブロックするベンチマークでは、 ランナーがどれほどビジーだったかしか分かりません。

テスト

指標カバレッジ
ステートメント90.09%
分岐83.89%
関数91.86%
行91.51%

28 ファイルにわたる 353 件のテストケースに加え、 実際の 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 ファミリーには属しません。

ライセンス

MIT © nolindnaidoo

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。