claude/skills/env-setup/SKILL.md
Set up secure environment variable management using dotenvx + direnv + git worktree. Use when user asks to set up env management, wants to encrypt .env files, or needs to configure environment variables for worktree-based development. Also use when setting up a new project that needs secure env handling.
npx skillsauth add kazuph/dotfiles env-setupInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Git worktreeを使った並列開発で、環境変数を安全かつ効率的に管理する環境をセットアップします。
暗号化は常時維持: ディスク上は暗号化、メモリ上のみ復号。復号されたファイルが作られることはない。
ディスク上 メモリ上(実行時のみ)
┌─────────────┐ ┌─────────────┐
│ .env │ │ DATABASE_URL=xxx │
│ (暗号化) │ ──→ │ API_KEY=yyy │
│ xxxxxxxxxx │ │ (復号済み) │
└─────────────┘ └─────────────────┘
↑ ↑
常にこの状態 プロセス実行中のみ
| ツール | 役割 | インストール |
|--------|------|-------------|
| git-wt | Git worktree管理 | brew install k1LoW/tap/git-wt |
| direnv | ディレクトリ単位で環境変数を自動読み込み | brew install direnv |
| dotenvx | .envファイルの暗号化管理 | npm install -g @dotenvx/dotenvx |
以下の手順で環境をセットアップしてください。
まず必要なツールがインストールされているか確認:
# Check direnv
which direnv || echo "direnv not installed"
# Check dotenvx
which dotenvx || npm list -g @dotenvx/dotenvx || echo "dotenvx not installed"
# Check git-wt (optional but recommended)
git wt --version || echo "git-wt not installed (optional)"
インストールされていない場合は、ユーザーに案内してインストールを促す。
既存の.envがあれば暗号化、なければサンプルを作成:
# If .env exists
dotenvx encrypt
# The .env.keys file will be generated with DOTENV_PRIVATE_KEY
# Extract the key for .envrc
以下の内容で.envrcを作成:
# .envrc
export DOTENV_PRIVATE_KEY="<key from .env.keys>"
eval "$(dotenvx decrypt --stdout --format shell)"
重要: .env.keysからDOTENV_PRIVATE_KEYの値を転記後、.env.keysは削除可能。
以下を.gitignoreに追加(未追加の場合):
.worktree
.artifacts
.envrc
.env.keys
direnv allow
Note: git-wtは**プロジェクトローカルな.worktree/**に配置する設計です。
.gitconfigで設定:
git config --global wt.basedir ".worktree"
git config --global wt.copyignored true
git config --global --add wt.hook "npm install || pnpm install || yarn install || true"
ディレクトリ構造:
myproject/
├── .worktree/
│ └── feature-auth/ # git wt feature-auth で作成
├── .envrc # プロジェクトルートの環境変数
└── .env # 暗号化済み
direnvは親ディレクトリの.envrcを継承するため、プロジェクトルートに環境変数を設定しておけば、worktreeでも同じ環境変数が自動適用されます。
複数環境を管理する場合:
dotenvx encrypt -f .env.development
dotenvx encrypt -f .env.staging
dotenvx encrypt -f .env.production
# .envrc
export DOTENV_PRIVATE_KEY_DEVELOPMENT="xxx"
export DOTENV_PRIVATE_KEY_STAGING="yyy"
# DOTENV_PRIVATE_KEY_PRODUCTION は開発者には渡さない
# APP_ENVに応じて読み込む環境を決定
ENV_FILE=".env.${APP_ENV:-development}"
if [[ -f "$ENV_FILE" ]]; then
eval "$(dotenvx decrypt -f "$ENV_FILE" --stdout --format shell)"
fi
GitHub Actions example:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
env:
DOTENV_PRIVATE_KEY: ${{ secrets.DOTENV_PRIVATE_KEY }}
run: npx dotenvx run -- npm test
| コマンド | 説明 |
|---------|------|
| dotenvx encrypt | .envを暗号化 |
| dotenvx encrypt -f .env.production | 特定ファイルを暗号化 |
| dotenvx decrypt --stdout | 復号して標準出力 |
| dotenvx decrypt --stdout --format shell | シェル形式で出力 |
| dotenvx set KEY="value" | 変数を追加/更新(自動再暗号化) |
| dotenvx get KEY | 変数の値を取得 |
| dotenvx run -- <command> | 環境変数を注入してコマンド実行 |
| dotenvx run --overload -- <command> | .envの値で既存環境変数を上書きして実行 |
| dotenvx run --verbose -- <command> | スキップされた変数を表示して実行 |
| dotenvx run --debug -- <command> | スキップされた変数の値まで表示して実行 |
--overload Flag and Silent Override Behaviordotenvxのデフォルト動作は危険: 既存の環境変数が.envファイルの値より優先される。
シェル環境: FOO=bar (direnvなどで設定済み)
.envファイル: FOO=baz
# --overloadなし → FOO=bar のまま(.envの値は無視される)
dotenvx run -- echo $FOO # → "bar"
# --overloadあり → FOO=baz に上書き
dotenvx run --overload -- echo $FOO # → "baz"
最も危険なポイント: このスキップはデフォルトでサイレント。通知は--verbose/--debugでのみ表示される。
| フラグ | 出力 |
|--------|------|
| (なし) | 何も表示されない |
| --verbose | FOO pre-exists (protip: use --overload to override) |
| --debug | FOO pre-exists as bar (protip: use --overload to override) |
推奨: package.jsonのスクリプトでは常に--overloadを付ける:
{
"scripts": {
"dev": "dotenvx run -f .env.development --overload -- <start-cmd>",
"test": "dotenvx run -f .env.development --overload -- <test-cmd>"
}
}
ソースコード参照 (v1.51.4):
src/lib/helpers/parse.js — if (!this.overload && this.inProcessEnv(key))src/cli/actions/run.js — logger.verbose() / logger.debug() のみ(logger.warn() は使われていない)| コマンド | 説明 |
|---------|------|
| git wt <branch> | worktree作成 |
| git wt | worktree一覧 |
| git wt -d <branch> | worktree削除 |
| コマンド | 説明 |
|---------|------|
| direnv allow | .envrcを許可 |
| direnv reload | 再読み込み |
worktreeでも自動で動作する理由:
git-wt(プロジェクトローカル)の場合:
.worktree/ はプロジェクト内のサブディレクトリ.envrc を自動継承.env はgit管理なのでworktreeにも存在# git-wtで作成したworktreeに移動
cd .worktree/feature-x/
# 環境変数を追加/変更(自動で再暗号化される)
dotenvx set NEW_API_KEY="xxx"
# コミット
git add .env
git commit -m "feat: add NEW_API_KEY"
重要: dotenvx set は自動で再暗号化。.envを直接編集しない。
| 項目 | 効果 | |------|------| | セキュリティ | .envは常に暗号化、ディスク上に平文なし | | git管理 | 暗号化済み.envをコミット可能 | | チーム共有 | 鍵だけ共有すれば即動作 | | worktree | 親の.envrcを自動継承、設定不要 | | CI/CD | シークレット1つで全環境変数を管理 | | 権限分離 | 環境ごとに鍵を分けて権限制御可能 |
このスキルを実行する際:
direnv allow後、環境変数が読み込まれるか確認ユーザーに確認が必要な場合(既存ファイルの上書きなど)は必ず確認を取る。
tools
X (Twitter) API read-only CLI. Bookmarks retrieval, tweet search, engagement analytics (likes/RT aggregation), mentions, user lookup. Use when: reading X bookmarks, searching tweets, aggregating likes/retweets, checking mentions, looking up users. Triggers: bookmark, bookmarks, X search, Twitter search, likes count, RT count, engagement, tweet analytics.
testing
単体テスト方針の要約。Kiro流で使うときは本文を必ず参照・展開する。
tools
Send prompts to other AI CLIs (Codex, Claude Code) running in sibling tmux panes and receive results back. Use this skill when the user asks to send a question or task to Codex or another Claude Code instance in a tmux pane. Handles pane discovery, CLI startup if needed, prompt delivery with proper Enter timing, delivery verification, and result return via tmux send-keys.
data-ai
TAKT ピースエンジン。Agent Team を使ったマルチエージェントオーケストレーション。ピースYAMLワークフローに従ってマルチエージェントを実行する。