技能 gen-env
📦

gen-env

低风险 ⚙️ 外部命令🌐 网络访问📁 文件系统访问🔑 环境变量

分離されたlocalhost環境の生成

也可从以下获取: 0xBigBoss

localhostで同じプロジェクトの複数のインスタンスを実行すると、ポートの競合、データ破損、ブラウザステートの混合が発生します。このスキルは、各インスタンスを固有のポート、Dockerリソース、ブラウザドメインで分離する環境構成を生成します。

支持: Claude Codex Code(CC)
⚠️ 67
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“gen-env”。 複数の分離されたインスタンスをサポートするDocker Composeプロジェクトのgen-envスクリプトを生成する

预期结果:

  • # 生成された.localnet.envファイル構造
  • # インスタンス: feature-x
  •  
  • WORKSPACE_NAME=feature-x
  • COMPOSE_PROJECT_NAME=localnet-feature-x
  • DOCKER_NETWORK=localnet-feature-x
  • VOLUME_PREFIX=localnet-feature-x
  •  
  • # 割り当てられたポート
  • POSTGRES_PORT=51234
  • REDIS_PORT=51235
  • API_PORT=51236
  • WEB_PORT=51237
  •  
  • # ブラウザ分離ホスト
  • APP_HOST=feature-x.localhost

正在使用“gen-env”。 私のgen-envロックファイルは何を含む必要がありますか?

预期结果:

ロックファイルには次のものを格納する必要があります:バージョン番号、生成タイムスタンプ、instanceConfigの完全な内容包括くワークスペース名、すべての生成されたポート、派生URL。例:{ version: 1, generatedAt: '2024-01-15T10:30:00Z', instance: { name, ports, urls, ... } }

正在使用“gen-env”。 他のインスタンスに影響を与えずに1つのインスタンスをクリーンアップするにはどうすればよいですか?

预期结果:

外科的クリーンアップにCOMPOSE_PROJECT_NAMEを使用してください:docker compose -p localnet-feature-x down -v。これにより、特定のインスタンスのコンテナ、ネットワーク、ボリュームのみが削除されます。プロジェクトフラグなしのdocker compose down -vはデフォルトプロジェクトに影響するため避けてください。

安全审计

低风险
v4 • 1/21/2026

Static analysis detected patterns in documentation files (ADVANCED_PATTERNS.md, IMPLEMENTATION.md, SKILL.md) containing shell command examples and environment variable usage. These are educational examples of legitimate development patterns (Docker Compose, port allocation, environment generation). No malicious intent, data exfiltration, or unauthorized credential access found. The skill is a local development environment management tool with standard devops functionality.

4
已扫描文件
4,807
分析行数
4
发现项
4
审计总数

风险因素

⚙️ 外部命令 (205)
ADVANCED_PATTERNS.md:356 ADVANCED_PATTERNS.md:371 ADVANCED_PATTERNS.md:9-27 ADVANCED_PATTERNS.md:27-31 ADVANCED_PATTERNS.md:31-47 ADVANCED_PATTERNS.md:47-50 ADVANCED_PATTERNS.md:50-56 ADVANCED_PATTERNS.md:56-71 ADVANCED_PATTERNS.md:71-77 ADVANCED_PATTERNS.md:77-128 ADVANCED_PATTERNS.md:128-141 ADVANCED_PATTERNS.md:141 ADVANCED_PATTERNS.md:141-143 ADVANCED_PATTERNS.md:143-149 ADVANCED_PATTERNS.md:149-155 ADVANCED_PATTERNS.md:155-176 ADVANCED_PATTERNS.md:176-180 ADVANCED_PATTERNS.md:180-189 ADVANCED_PATTERNS.md:189-197 ADVANCED_PATTERNS.md:197-203 ADVANCED_PATTERNS.md:203-269 ADVANCED_PATTERNS.md:269-273 ADVANCED_PATTERNS.md:273-295 ADVANCED_PATTERNS.md:295-301 ADVANCED_PATTERNS.md:301-333 ADVANCED_PATTERNS.md:333-337 ADVANCED_PATTERNS.md:337-347 ADVANCED_PATTERNS.md:347-353 ADVANCED_PATTERNS.md:353-364 ADVANCED_PATTERNS.md:364-368 ADVANCED_PATTERNS.md:368-379 ADVANCED_PATTERNS.md:379-383 ADVANCED_PATTERNS.md:383-388 ADVANCED_PATTERNS.md:388-392 ADVANCED_PATTERNS.md:392-398 ADVANCED_PATTERNS.md:398-404 ADVANCED_PATTERNS.md:404-418 ADVANCED_PATTERNS.md:418-422 ADVANCED_PATTERNS.md:422-434 ADVANCED_PATTERNS.md:434-438 ADVANCED_PATTERNS.md:438-460 ADVANCED_PATTERNS.md:460-466 ADVANCED_PATTERNS.md:466-478 ADVANCED_PATTERNS.md:478-482 ADVANCED_PATTERNS.md:482-491 ADVANCED_PATTERNS.md:448 ADVANCED_PATTERNS.md:452 ADVANCED_PATTERNS.md:456 ADVANCED_PATTERNS.md:438-460 IMPLEMENTATION.md:7-94 IMPLEMENTATION.md:94-150 IMPLEMENTATION.md:150-184 IMPLEMENTATION.md:184-185 IMPLEMENTATION.md:185-192 IMPLEMENTATION.md:192-196 IMPLEMENTATION.md:196-197 IMPLEMENTATION.md:197-198 IMPLEMENTATION.md:198-199 IMPLEMENTATION.md:199-200 IMPLEMENTATION.md:200-238 IMPLEMENTATION.md:238-244 IMPLEMENTATION.md:244-264 IMPLEMENTATION.md:264-265 IMPLEMENTATION.md:265-266 IMPLEMENTATION.md:266-267 IMPLEMENTATION.md:267 IMPLEMENTATION.md:267 IMPLEMENTATION.md:267-270 IMPLEMENTATION.md:270-271 IMPLEMENTATION.md:271-272 IMPLEMENTATION.md:272-273 IMPLEMENTATION.md:273-274 IMPLEMENTATION.md:274-275 IMPLEMENTATION.md:275-278 IMPLEMENTATION.md:278-279 IMPLEMENTATION.md:279-285 IMPLEMENTATION.md:285-290 IMPLEMENTATION.md:290-340 IMPLEMENTATION.md:340-348 IMPLEMENTATION.md:348-360 IMPLEMENTATION.md:383-387 IMPLEMENTATION.md:394-397 IMPLEMENTATION.md:397-400 IMPLEMENTATION.md:401-403 IMPLEMENTATION.md:403-406 IMPLEMENTATION.md:409-424 IMPLEMENTATION.md:424-455 IMPLEMENTATION.md:455-459 IMPLEMENTATION.md:459-468 IMPLEMENTATION.md:468-469 IMPLEMENTATION.md:469-475 IMPLEMENTATION.md:475-479 IMPLEMENTATION.md:479-489 IMPLEMENTATION.md:489-491 IMPLEMENTATION.md:491-498 IMPLEMENTATION.md:498-521 IMPLEMENTATION.md:521-527 IMPLEMENTATION.md:527-712 IMPLEMENTATION.md:712 IMPLEMENTATION.md:712-759 IMPLEMENTATION.md:759-765 IMPLEMENTATION.md:765-767 IMPLEMENTATION.md:767-771 IMPLEMENTATION.md:771-785 IMPLEMENTATION.md:785-789 IMPLEMENTATION.md:789-795 IMPLEMENTATION.md:795-799 IMPLEMENTATION.md:799-803 IMPLEMENTATION.md:803-807 IMPLEMENTATION.md:807-810 IMPLEMENTATION.md:810-816 IMPLEMENTATION.md:816-818 IMPLEMENTATION.md:818-834 IMPLEMENTATION.md:834-838 IMPLEMENTATION.md:838-840 IMPLEMENTATION.md:840-842 IMPLEMENTATION.md:842-843 IMPLEMENTATION.md:843-844 IMPLEMENTATION.md:844-845 IMPLEMENTATION.md:845-848 IMPLEMENTATION.md:848-854 IMPLEMENTATION.md:854-869 IMPLEMENTATION.md:566 IMPLEMENTATION.md:571 IMPLEMENTATION.md:577 IMPLEMENTATION.md:588 IMPLEMENTATION.md:598 IMPLEMENTATION.md:606 IMPLEMENTATION.md:653 IMPLEMENTATION.md:670 IMPLEMENTATION.md:678 IMPLEMENTATION.md:679 IMPLEMENTATION.md:680 IMPLEMENTATION.md:681 IMPLEMENTATION.md:692 IMPLEMENTATION.md:693 IMPLEMENTATION.md:694 IMPLEMENTATION.md:695 IMPLEMENTATION.md:707 IMPLEMENTATION.md:527-712 skill-report.json:3085 skill-report.json:3086 SKILL.md:8 SKILL.md:17 SKILL.md:23-35 SKILL.md:35-44 SKILL.md:44-45 SKILL.md:45-53 SKILL.md:53-55 SKILL.md:55-59 SKILL.md:59-61 SKILL.md:61-62 SKILL.md:62-65 SKILL.md:65-67 SKILL.md:67 SKILL.md:67 SKILL.md:67-80 SKILL.md:80-82 SKILL.md:82-83 SKILL.md:83 SKILL.md:83 SKILL.md:83-84 SKILL.md:84 SKILL.md:84-93 SKILL.md:93-95 SKILL.md:95-96 SKILL.md:96-99 SKILL.md:99-104 SKILL.md:104-105 SKILL.md:105-106 SKILL.md:106-111 SKILL.md:111-139 SKILL.md:139-143 SKILL.md:143-148 SKILL.md:148-156 SKILL.md:156-173 SKILL.md:173-179 SKILL.md:179-192 SKILL.md:192-198 SKILL.md:198-202 SKILL.md:202-206 SKILL.md:206-210 SKILL.md:210-214 SKILL.md:214-218 SKILL.md:218-226 SKILL.md:226-227 SKILL.md:227-234 SKILL.md:234-235 SKILL.md:235-237 SKILL.md:237-239 SKILL.md:239-241 SKILL.md:241-244 SKILL.md:244-247 SKILL.md:247-249 SKILL.md:249-252 SKILL.md:252-255 SKILL.md:255-257 SKILL.md:257-259 SKILL.md:259-261 SKILL.md:200 SKILL.md:208 SKILL.md:198-202 SKILL.md:206-210 SKILL.md:190 SKILL.md:191
🌐 网络访问 (22)
📁 文件系统访问 (14)
🔑 环境变量 (21)
审计者: claude 查看审计历史 →

质量评分

38
架构
100
可维护性
87
内容
24
社区
90
安全
83
规范符合性

你能构建什么

複数の機能ブランチを同時に実行する

複数の機能ブランチで作業する開発者は、各インスタンスを自有のワークスペース名、ポート、データで実行でき、競合が発生しません。

異なるバージョンを分離してテストする

QAエンジニアは、完全に分離されたデータベースとブラウザセッションで、同一アプリケーションのバージョンAとバージョンBを並べてテストできます。

既存のgen-env実装をレビューする

メンテナーは、プロジェクトのgen-envスクリプトがインスタンス分離とクリーンアップに関するすべてのベストプラクティスに従っていることを検証できます。

试试这些提示

基本的なgen-envスクリプトを生成する
私のプロジェクト用に、複数の分離されたインスタンスを実行するための環境構成を生成するgen-envコマンドスクリプトを作成してください。スクリプトはワークスペースIDの--name引数を受け付け、エフェメラルポート範囲49152-65535からポートを割り当て、COMPOSE_PROJECT_NAME、固有のポート、*.localhostホストURLを含む.localnet.envファイルを出力する必要があります。
ポート競合処理を追加する
私の既存のgen-envスクリプトにポート競合検出と処理を追加してください。要求されたポートが使用中の場合、100msのタイムアウトで次の利用可能なポートを試す必要があり、ポートが利用可能な場合は警告を出力してください。
ブラウザ分離を実装する
私のgen-envスクリプトを更新して、*.localhostサブドメインを使用したブラウザ分離URLを生成してください。各インスタンスはfeature-x.localhostのような固有のホスト名を取得し、インスタンス間のCookieとlocalStorageが分離された状態を維持する必要があります。
gen-env実装をレビューする
[ファイルパス]にある私のプロジェクトのgen-env実装を次のチェックリストに対してレビューしてください:ワークスペース名の検証、COMPOSE_PROJECT_NAMEの生成、エフェメラルポートの作成、ロックファイルの生成、外科的クリーンアップのサポート。ギャップをリストし、修正を提案してください。

最佳实践

  • 常にワークスペース名を検証してください(英数字+ダッシュ、DNS互換性は最大63文字)
  • 割り当てられたポートをロックファイルに格納し、以降の実行で同じポートを再利用して一貫性を確保してください
  • 有名なサービスとの競合を避けるため、エフェメラルポート範囲49152-65535を使用してください
  • ブラウザ分離には*.localhostホストを使用してください(localhostの異なるポートではなく)

避免

  • ハードコードされたlocalhostURL(http://localhost:3000)を使用する - これはインスタンス間でCookieを共有します
  • COMPOSE_PROJECT_NAMEを省略する - これはDockerがディレクトリ名を使用し、競合のリスクがあります
  • プロジェクト名なしのdocker compose down -vを使用する - これはすべてのインスタンスを区別なく削除します
  • インスタンス間で同じデータベースボリュームを共有する - これはデータ破損を引き起こします

常见问题

インスタンスにはどのポートを使用すべきですか?
エフェメラル範囲49152-65535のポートを使用してください。これらのポートは有名なサービスに割り当てられておらず、動的な割り当てに安全です。各サービス(postgres、redis、api、web)に対して各インスタンスに固有のポートを割り当ててください。
*.localhostでのブラウザ分離はどのように機能しますか?
ChromeとEdgeは*.localhostを自動的に127.0.0.1として扱います。異なるサブドメイン(main.localhost対feature-x.localhost)は同じポートでも別々のCookieとlocalStorageを維持し、localhostの異なるポートでは解決できない分離問題を解決します。
COMPOSE_PROJECT_NAMEとは何ですか?なぜ重要ですか?
COMPOSE_PROJECT_NAMEはすべてのDockerリソース(コンテナ、ネットワーク、ボolume、サービス)のプレフィックスを制御します。これを明示的に設定することで、各インスタンスがlocalnet-feature-x_postgres_dataのような予測可能な名前で分離されたリソースを取得することを保証します。
インスタンス間のポート競合をどのように処理すればよいですか?
割り当て前に短いタイムアウト(100ms)を使用してポートの可用性を確認してください。ポートが使用中の場合、シーケンスの次のポートを試してください。割り当てられたポートをロックファイルに格納し、同じインスタンスが以降の実行で常に同じポートを取得するようにしてください。
バージョン管理に何をコミットすべきですか?
gen-envスクリプト自体と任意の設定テンプレートをコミットしてください。.localnet.envと.gen-env.lockを.gitignoreに追加してください。これらはインスタンス固有の生成ファイルであり、共有すべきではありません。
gen-envを既存の開発ワークフローにどのように統合すればよいですか?
生成された.localnet.envを読み込む.direnvファイルを持つdirenvを使用してください。gen-envスクリプトディレクトリをPATHに追加してください。Docker Composeを開始する前にgen-env --name <workspace>を実行し、完了時にgen-env --cleanを実行してください。

开发者详情

文件结构