docs/ja-JP/skills/flox-environments/SKILL.md
Floxで再現可能なクロスプラットフォーム開発環境を作成します — Nixに基づく宣言的な環境マネージャー。次の場合は必ずこのスキルを使用してください: システムレベルの依存関係(コンパイラー、データベース、openssl・libvips・BLAS・LAPACKなどのネイティブライブラリー)を持つプロジェクトを設定する場合; Python、Node.js、Rust、Go、C/C++、Java、Ruby、Elixir、PHP、その他の言語の再現可能なツールチェーンを設定する場合; macOSとLinux間で同一に動作する環境を管理する場合; チームのために正確なパッケージバージョンを固定する場合; ローカルサービス(PostgreSQL、Redis、Kafka)を開発ツールと並行して実行する場合; 単一コマンドで新しい開発者をオンボードする場合; または「自分のマシンでは動く」問題を解決する場合。AI支援やバイブコーディングに特に価値があります — Floxはエージェントがsudoなし、システム汚染なし、サンドボックス制限なしにプロジェクトスコープの環境にツールをインストールでき、結果の環境はリポジトリにコミットされるため、誰でも即座に再現できます。ユーザーがFloxに言及しない場合でも、再現可能、宣言的、クロスプラットフォームな開発環境とシステムパッケージが必要と説明した場合はこのスキルを使用してください。また、ユーザーが.flox/、manifest.toml、flox activate、またはFloxHubに言及した場合も使用してください。
npx skillsauth add affaan-m/everything-claude-code flox-environmentsInstall 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.
Floxは単一のTOMLマニフェストで定義される再現可能な開発環境を作成します。チームのすべての開発者が同一のパッケージ、ツール、設定を取得できます — コンテナーやVMなしにmacOSとLinux間で同一です。150,000以上のパッケージにアクセスできるNixの上に構築されています。
ユーザーが環境管理の問題を抱えている場合、Floxについて言及していなくても、このスキルを使用します。Floxが適切なツールとなるのは:
ユーザーがシステム依存関係のない単一の言語ランタイムだけが必要な場合、標準ツール(nvm、pyenv、rustup単独)で十分かもしれません。完全なOSレベルの分離が必要な場合、コンテナーがより適切かもしれません。Floxはその中間に位置します: コンテナーのオーバーヘッドなしの宣言的で再現可能な環境。
前提条件: まずFloxをインストールする必要があります — macOS、Linux、Dockerについてはflox.dev/docsを参照してください。
Flox環境は.flox/env/manifest.tomlで定義され、flox activateでアクティベートされます。マニフェストはパッケージ、環境変数、セットアップフック、シェル設定を宣言します — 環境をどこでも再現するために必要なすべてのものです。
主要なパス:
.flox/env/manifest.toml — 環境定義(コミットする)$FLOX_ENV — インストールされたパッケージへのランタイムパス(/usrに似ている — bin/、lib/、include/を含む)$FLOX_ENV_CACHE — キャッシュ、venv、データの永続ローカルストレージ(リビルド後も存続)$FLOX_ENV_PROJECT — プロジェクトのルートディレクトリ(.flox/が存在する場所)flox init # 新しい環境を作成
flox search <package> [--all] # パッケージを検索
flox show <package> # 利用可能なバージョンを表示
flox install <package> # パッケージを追加
flox list # インストール済みパッケージを一覧表示
flox activate # 環境に入る
flox activate -- <cmd> # サブシェルなしで環境内でコマンドを実行
flox edit # マニフェストをインタラクティブに編集
# .flox/env/manifest.toml
[install]
# インストールするパッケージ — 環境の核心
ripgrep.pkg-path = "ripgrep"
jq.pkg-path = "jq"
[vars]
# 静的な環境変数
DATABASE_URL = "postgres://localhost:5432/myapp"
[hook]
# 非インタラクティブなセットアップスクリプト(すべてのアクティベーション時に実行)
on-activate = """
echo "Environment ready"
"""
[profile]
# シェル関数とエイリアス(インタラクティブシェルで利用可能)
common = """
alias dev="npm run dev"
"""
[options]
# サポートされているプラットフォーム
systems = ["x86_64-linux", "aarch64-linux", "x86_64-darwin", "aarch64-darwin"]
[install]
nodejs.pkg-path = "nodejs"
python.pkg-path = "python311"
rustup.pkg-path = "rustup"
[install]
nodejs.pkg-path = "nodejs"
nodejs.version = "^20.0" # semverレンジ: 最新の20.x
postgres.pkg-path = "postgresql"
postgres.version = "16.2" # 正確なバージョン
[install]
# Linuxのみのツール
valgrind.pkg-path = "valgrind"
valgrind.systems = ["x86_64-linux", "aarch64-linux"]
# macOSフレームワーク
Security.pkg-path = "darwin.apple_sdk.frameworks.Security"
Security.systems = ["x86_64-darwin", "aarch64-darwin"]
# macOSでのGNUツール(BSDのデフォルトが異なる場合)
coreutils.pkg-path = "coreutils"
coreutils.systems = ["x86_64-darwin", "aarch64-darwin"]
2つのパッケージが同じバイナリをインストールする場合、priorityを使用します(数値が低い方が優先):
[install]
gcc.pkg-path = "gcc12"
gcc.priority = 3
clang.pkg-path = "clang_18"
clang.priority = 5 # gccがファイル競合を勝つ
一緒にバージョンを解決する必要があるパッケージをグループ化するにはpkg-groupを使用します:
[install]
python.pkg-path = "python311"
python.pkg-group = "python-stack"
pip.pkg-path = "python311Packages.pip"
pip.pkg-group = "python-stack" # pythonと一緒に解決
[install]
python.pkg-path = "python311"
uv.pkg-path = "uv"
[vars]
UV_CACHE_DIR = "$FLOX_ENV_CACHE/uv-cache"
PIP_CACHE_DIR = "$FLOX_ENV_CACHE/pip-cache"
[hook]
on-activate = """
venv="$FLOX_ENV_CACHE/venv"
if [ ! -d "$venv" ]; then
uv venv "$venv" --python python3
fi
if [ -f "$venv/bin/activate" ]; then
source "$venv/bin/activate"
fi
if [ -f requirements.txt ] && [ ! -f "$FLOX_ENV_CACHE/.deps_installed" ]; then
uv pip install --python "$venv/bin/python" -r requirements.txt --quiet
touch "$FLOX_ENV_CACHE/.deps_installed"
fi
"""
[install]
nodejs.pkg-path = "nodejs"
nodejs.version = "^20.0"
[hook]
on-activate = """
if [ -f package.json ] && [ ! -d node_modules ]; then
npm install --silent
fi
"""
[install]
rustup.pkg-path = "rustup"
pkg-config.pkg-path = "pkg-config"
openssl.pkg-path = "openssl"
[vars]
RUSTUP_HOME = "$FLOX_ENV_CACHE/rustup"
CARGO_HOME = "$FLOX_ENV_CACHE/cargo"
[profile]
common = """
export PATH="$CARGO_HOME/bin:$PATH"
"""
[install]
go.pkg-path = "go"
gopls.pkg-path = "gopls"
delve.pkg-path = "delve"
[vars]
GOPATH = "$FLOX_ENV_CACHE/go"
GOBIN = "$FLOX_ENV_CACHE/go/bin"
[profile]
common = """
export PATH="$GOBIN:$PATH"
"""
[install]
gcc.pkg-path = "gcc13"
gcc.pkg-group = "compilers"
# 重要: gcc単体ではlibstdc++ヘッダーを公開しません — gcc-unwrappedが必要
gcc-unwrapped.pkg-path = "gcc-unwrapped"
gcc-unwrapped.pkg-group = "libraries"
cmake.pkg-path = "cmake"
cmake.pkg-group = "build"
gnumake.pkg-path = "gnumake"
gnumake.pkg-group = "build"
gdb.pkg-path = "gdb"
gdb.systems = ["x86_64-linux", "aarch64-linux"]
フックはすべてのアクティベーション時に実行されます。速くべきで冪等性を保ちます。原則として: 自動的に実行すべきものは[hook]に; ユーザーが入力できるべきものは[profile]に。
[hook]
on-activate = """
setup_database() {
if [ ! -d "$FLOX_ENV_CACHE/pgdata" ]; then
initdb -D "$FLOX_ENV_CACHE/pgdata" --no-locale --encoding=UTF8
fi
}
setup_database
"""
プロファイルコードはユーザーのシェルセッションで利用可能です。
[profile]
common = """
dev() { npm run dev; }
test() { npm run test -- "$@"; }
"""
# 悪い例 — 他のマシンで壊れる
[vars]
PROJECT_DIR = "/home/alice/projects/myapp"
# 良い例 — Flox環境変数を使用
[vars]
PROJECT_DIR = "$FLOX_ENV_PROJECT"
# 悪い例 — シェルを終了させる
[hook]
on-activate = """
if [ ! -f config.json ]; then
echo "Missing config"
exit 1
fi
"""
# 良い例 — exitではなくreturnを使用
[hook]
on-activate = """
if [ ! -f config.json ]; then
echo "Missing config — run setup first"
return 1
fi
"""
# 悪い例 — マニフェストはgitにコミットされる
[vars]
API_KEY = "<set-at-runtime>"
# 良い例 — 外部設定を参照するか、ランタイムで渡す
# 使用方法: API_KEY="<your-api-key>" flox activate
[vars]
API_KEY = "${API_KEY:-}"
# 悪い例 — すべてのアクティベーション時に再インストールする
[hook]
on-activate = """
pip install -r requirements.txt
"""
# 良い例 — すでにインストール済みの場合はスキップ
[hook]
on-activate = """
if [ ! -f "$FLOX_ENV_CACHE/.deps_installed" ]; then
uv pip install -r requirements.txt --quiet
touch "$FLOX_ENV_CACHE/.deps_installed"
fi
"""
# 悪い例 — フック関数はインタラクティブシェルで利用できない
[hook]
on-activate = """
deploy() { kubectl apply -f k8s/; }
"""
# 良い例 — ユーザーが呼び出せる関数には[profile]を使用
[profile]
common = """
deploy() { kubectl apply -f k8s/; }
"""
PostgreSQLを使用したPython APIの完全な環境:
[install]
python.pkg-path = "python311"
uv.pkg-path = "uv"
postgresql.pkg-path = "postgresql_16"
redis.pkg-path = "redis"
jq.pkg-path = "jq"
curl.pkg-path = "curl"
[vars]
UV_CACHE_DIR = "$FLOX_ENV_CACHE/uv-cache"
DATABASE_URL = "postgres://localhost:5432/myapp"
REDIS_URL = "redis://localhost:6379"
[hook]
on-activate = """
if [ ! -d "$FLOX_ENV_CACHE/pgdata" ]; then
initdb -D "$FLOX_ENV_CACHE/pgdata" --no-locale --encoding=UTF8
fi
venv="$FLOX_ENV_CACHE/venv"
if [ ! -d "$venv" ]; then
uv venv "$venv" --python python3
fi
if [ -f "$venv/bin/activate" ]; then
source "$venv/bin/activate"
fi
if [ -f requirements.txt ] && [ ! -f "$FLOX_ENV_CACHE/.deps_installed" ]; then
uv pip install --python "$venv/bin/python" -r requirements.txt --quiet
touch "$FLOX_ENV_CACHE/.deps_installed"
fi
"""
[profile]
common = """
serve() { uvicorn app.main:app --reload --host 0.0.0.0 --port 8000; }
migrate() { alembic upgrade head; }
"""
[services]
postgres.command = "postgres -D $FLOX_ENV_CACHE/pgdata -k $FLOX_ENV_CACHE"
redis.command = "redis-server --port 6379 --daemonize no"
[options]
systems = ["x86_64-linux", "aarch64-linux", "x86_64-darwin", "aarch64-darwin"]
サービス付きでアクティベート: flox activate --start-services
Flox環境はgitネイティブです。.flox/ディレクトリをコミットすれば、すべての共同作業者が同じ環境を取得できます:
git add .flox/
git commit -m "Add Flox environment"
# チームメイトは以下を実行するだけ:
git clone <repo> && cd <repo> && flox activate
プロジェクト間で再利用可能なベース環境には、FloxHubにプッシュします:
flox push # FloxHubに環境をプッシュ
flox activate -r owner/env-name # どこでもリモート環境をアクティベート
[include]で環境を合成します:
[include]
base.floxhub = "myorg/python-base"
[install]
# ベースの上にプロジェクト固有の追加
fastapi.pkg-path = "python311Packages.fastapi"
FloxはAI支援開発とバイブコーディングワークフローに理想的です。AIエージェントが現在の環境で利用できないツール(コンパイラー、データベース、リンター、CLIユーティリティ)を必要とする場合、sudoアクセス不要、システムパッケージの汚染なし、サンドボックス制限なしにプロジェクトのFloxマニフェストに追加できます。
エージェントにとってこれが重要な理由:
flox installは完全にユーザースペースで動作するため、エージェントは昇格した権限なしにパッケージを追加できるmanifest.tomlに記録されるため、不要なパッケージはシステム残留なしにクリーンに削除できるエージェントのワークフローパターン:
# エージェントがツールが必要だと発見する(例: JSON処理のためのjq)
flox search jq # パッケージが存在することを確認
flox install jq # プロジェクト環境にインストール
# またはより詳細な制御のために、マニフェストを直接編集する
tmp_manifest="$(mktemp)"
flox list -c > "$tmp_manifest"
# [install]セクションにパッケージを追加し、適用する
flox edit -f "$tmp_manifest"
# ツールを利用可能にしてコマンドを実行
flox activate -- jq '.results[]' data.json
これにより、FloxはClaude Codeや他のAIエージェントがプロジェクトツールをその場でブートストラップする必要があるワークフローに自然に適合します。
flox list -c # 生のマニフェストを表示
flox activate -- which python # どのバイナリが解決されるか確認
flox activate -- env | grep FLOX # Flox環境変数を確認
flox search <package> --all # より広いパッケージ検索(大文字小文字を区別)
一般的な問題:
flox search --allを試してくださいpriorityを追加するexitではなくreturnを使用; ${FLOX_ENV_CACHE:-}でガードする$FLOX_ENV_CACHE/.deps_installedフラグファイルを削除する以下のスキルは、より深い統合のためにFlox Claude Codeプラグインの一部として利用可能です:
詳細とインストールはflox.dev/docsで。
data-ai
Run team-based orchestration for agent squads using work items, ownership, agent Kanban, merge gates, and control pane handoffs.
data-ai
Design task-local harnesses, eval gates, and reusable skill extraction for Claude dynamic workflow mode and other adaptive agent harnesses.
development
React component testing with React Testing Library, Vitest/Jest, MSW for network mocking, accessibility assertions with axe, and the decision boundary between component tests and Playwright/Cypress end-to-end runs. Use when writing or fixing tests for React components, hooks, or pages.
tools
React and Next.js performance optimization patterns adapted from Vercel Engineering's React Best Practices (https://github.com/vercel-labs/agent-skills). Organizes 70+ rules across 8 priority categories — waterfalls, bundle size, server-side, client fetching, re-render, rendering, JS micro-perf, advanced. Use when writing, reviewing, or refactoring React/Next.js code for performance.