EnvSync-LE について
EnvSync-LEは複数のdotenvファイルの変数名を比較し、値を読んだりファイルを変更したりせずに、キーの不足や余分な項目を報告します。VS Code系エディター、ターミナル、CI、MCP対応エージェントで使えます。
主な機能
- 01自動・手動・テンプレート方式でキーを比較
- 02監視対象ファイルの変更時に自動チェック
- 03ステータスバーの件数表示とMarkdownレポート
- 04ターミナルやCI向けのCLI出力と終了コード
- 05パスではなくファイル内容を受け取るMCPツール
活用シーン
- 01デプロイ前に環境変数キーの不足を発見
- 02CIでdotenvファイルの差異を確認
- 03値を明かさずにエージェントでdotenv内容を比較
MCP 対応
stdioのMCPサーバーは`compare_env_files`を公開し、ファイル内容を受け取って不足または余分なキー名を返します。ファイルの読み取りやネットワーク通信は行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| mode | enum | いいえ | "auto" はすべてのキーの和集合と比較し、"template" は 1 つのファイルと比較します。auto | template |
| files | array | はい | 比較する dotenv ファイル。 |
| maxResults | integer | いいえ | 返されるキー不一致の上限(デフォルトは 500)。meta.truncated は省略された結果があるかどうかを示します。 |
| templatePath | string | いいえ | テンプレートとなるファイルを指定します。mode が "template" の場合は必須です。 |
| caseSensitive | boolean | いいえ | キー名の比較で大文字と小文字を区別するかどうか。 |
詳細
EnvSync-LE:.env の同期を手間なく実現
.env ファイル間のキー不足を、問題になる前に発見
自動チェック、ステータスバーのカウンター、シンプルな Markdown レポート
役に立ちましたか? スターや評価を付けると、ほかの開発者にも見つけてもらえます — ★ 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_files | npx envsync-le-mcp · npm |
AI エージェントから使用する
同じエンジンがMCPサーバーとして動作するため、コマンドを実行する代わりに、エージェントから直接呼び出せます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストールは不要です。拡張機能がエージェントモードにcompare_env_filesを登録します |
| Claude Code | claude mcp add envsync-le -- npx -y envsync-le-mcp |
| Cursor、Windsurf、その他 | npx 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
npmからインストール(envsync-le)するか、crates.ioからインストール(envsync-le)してください。どちらも同じ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 Settings | EnvSync-LE で絞り込んだ VS Code の設定を開きます |
EnvSync-LE: Help & Troubleshooting | 組み込みドキュメントを開きます |
デフォルトでは、どのコマンドにもキーは割り当てられていません。エディターの Keyboard Shortcuts から、任意のコマンドにキーを割り当ててください。
設定
| 設定 | デフォルト | 説明 |
|---|---|---|
envsync-le.enabled | true | 同期チェックのマスタースイッチ |
envsync-le.watchPatterns | [".env*"] | 監視して比較するファイルの glob パターン |
envsync-le.excludePatterns | [] | 除外する glob パターン。/ を含まないパターンはベース名に一致します(そのため、.env.*.local はネストされたファイルも除外します) |
envsync-le.notificationLevel | important | all = 不足キー + 余分なキー、important = 不足キー + エラー、silent = 通知なし |
envsync-le.statusBar.enabled | true | ステータスバー項目を表示します(すぐに反映されます) |
envsync-le.debounceMs | 1000 | ファイル変更から同期チェックまでの遅延時間 |
envsync-le.caseSensitive | true | DB_URL と db_url を異なるキーとして扱います |
envsync-le.comparisonMode | auto | auto、manual、または template |
envsync-le.compareOnlyFiles | [] | 手動モードで、これらのファイルのみを比較します(ワークスペース相対パス) |
envsync-le.templateFile | — | テンプレートモードの参照ファイル(Set Template で設定) |
envsync-le.temporaryIgnore | [] | 現在無視しているファイル(無視関連コマンドで管理) |
envsync-le.telemetryEnabled | false | ローカルのみのイベントログ(プライバシーを参照) |
解析に関する注意
- キーは
[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 MB | 1,910 | 0.29 ms | 6,690,018/秒 | 63.2 MB/s |
| 24 ファイル x 500 キー | 0.11 MB | 11,103 | 1.11 ms | 9,994,077/秒 | 94.5 MB/s |
| 4 ファイル x 8,000 キー | 0.32 MB | 31,172 | 2.04 ms | 15,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 ファミリーには属しません。
- pixelcoords — 画面を固定し、領域を指定して、ピクセル単位で正確な座標と切り抜きを取得します pixelcoords.dev · crates.io · docs.rs
- pixelactions — 人が検証した座標を受け取り、操作を実行して、反映されたことを確認します pixelactions.dev · crates.io · docs.rs
ライセンス
MIT © nolindnaidoo
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。