Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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なし、システム汚染なし、サンドボックス制限なしにプロジェクトスコープの環境にツールをインストールでき、結果の
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 82% | 0% |
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/が存在する場所)bashflox init # 新しい環境を作成 flox search <package> [--all] # パッケージを検索 flox show <package> # 利用可能なバージョンを表示 flox install <package> # パッケージを追加 flox list # インストール済みパッケージを一覧表示 flox activate # 環境に入る flox activate -- <cmd> # サブシェルなしで環境内でコマンドを実行 flox edit # マニフェストをインタラクティブに編集
toml# .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"]
toml[install] nodejs.pkg-path = "nodejs" python.pkg-path = "python311" rustup.pkg-path = "rustup"
toml[install] nodejs.pkg-path = "nodejs" nodejs.version = "^20.0" # semverレンジ: 最新の20.x postgres.pkg-path = "postgresql" postgres.version = "16.2" # 正確なバージョン
toml[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を使用します(数値が低い方が優先):
toml[install] gcc.pkg-path = "gcc12" gcc.priority = 3 clang.pkg-path = "clang_18" clang.priority = 5 # gccがファイル競合を勝つ
一緒にバージョンを解決する必要があるパッケージをグループ化するにはpkg-groupを使用します:
toml[install] python.pkg-path = "python311" python.pkg-group = "python-stack" pip.pkg-path = "python311Packages.pip" pip.pkg-group = "python-stack" # pythonと一緒に解決
toml[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 """
toml[install] nodejs.pkg-path = "nodejs" nodejs.version = "^20.0" [hook] on-activate = """ if [ -f package.json ] && [ ! -d node_modules ]; then npm install --silent fi """
toml[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" """
toml[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" """
toml[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]に。
toml[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 """
プロファイルコードはユーザーのシェルセッションで利用可能です。
toml[profile] common = """ dev() { npm run dev; } test() { npm run test -- "$@"; } """
toml# 悪い例 — 他のマシンで壊れる [vars] PROJECT_DIR = "/home/alice/projects/myapp" # 良い例 — Flox環境変数を使用 [vars] PROJECT_DIR = "$FLOX_ENV_PROJECT"
toml# 悪い例 — シェルを終了させる [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 """
toml# 悪い例 — マニフェストはgitにコミットされる [vars] API_KEY = "<set-at-runtime>" # 良い例 — 外部設定を参照するか、ランタイムで渡す # 使用方法: API_KEY="<your-api-key>" flox activate [vars] API_KEY = "${API_KEY:-}"
toml# 悪い例 — すべてのアクティベーション時に再インストールする [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 """
toml# 悪い例 — フック関数はインタラクティブシェルで利用できない [hook] on-activate = """ deploy() { kubectl apply -f k8s/; } """ # 良い例 — ユーザーが呼び出せる関数には[profile]を使用 [profile] common = """ deploy() { kubectl apply -f k8s/; } """
PostgreSQLを使用したPython APIの完全な環境:
toml[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/ディレクトリをコミットすれば、すべての共同作業者が同じ環境を取得できます:
bashgit add .flox/ git commit -m "Add Flox environment" # チームメイトは以下を実行するだけ: git clone <repo> && cd <repo> && flox activate
プロジェクト間で再利用可能なベース環境には、FloxHubにプッシュします:
bashflox push # FloxHubに環境をプッシュ flox activate -r owner/env-name # どこでもリモート環境をアクティベート
[include]で環境を合成します:
toml[include] base.floxhub = "myorg/python-base" [install] # ベースの上にプロジェクト固有の追加 fastapi.pkg-path = "python311Packages.fastapi"
FloxはAI支援開発とバイブコーディングワークフローに理想的です。AIエージェントが現在の環境で利用できないツール(コンパイラー、データベース、リンター、CLIユーティリティ)を必要とする場合、sudoアクセス不要、システムパッケージの汚染なし、サンドボックス制限なしにプロジェクトのFloxマニフェストに追加できます。
エージェントにとってこれが重要な理由:
flox installは完全にユーザースペースで動作するため、エージェントは昇格した権限なしにパッケージを追加できるmanifest.tomlに記録されるため、不要なパッケージはシステム残留なしにクリーンに削除できるエージェントのワークフローパターン:
bash# エージェントがツールが必要だと発見する(例: 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エージェントがプロジェクトツールをその場でブートストラップする必要があるワークフローに自然に適合します。
bashflox 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で。
Other measured skills in the registry, with their headline benchmark lift.