【Pixi】新世代のCondaパッケージマネージャー

:::note warn
私個人の話で恐縮ですが、「[ギークハウス新宿](https://geejuku.tokyo/)」というエンジニア中心のシェアハウスの運営に関わっています。

[勉強会・懇親会等のイベント](https://geejuku.connpass.com/)を開催しております。内見等興味ある方はお気軽に[こちら](https://x.com/geejuku)までご連絡ください。
:::

# 🚀 Pixi：新世代のCondaパッケージマネージャ

<img src="https://pixi.sh/latest/assets/pixi.webp" alt="pixiくん" width="777">

この記事では最近出てきたCondaパッケージの新星パッケージマネージャーである[Pixi](https://github.com/prefix-dev/pixi)を紹介します．

---
## Condaパッケージについて
はじめに，Condaパッケージを使うメリットとCondaパッケージに関するよくある誤解の２点について説明します．

---
### Condaパッケージを使うメリット
Condaとは、オープンソースのパッケージ管理システムおよび環境管理システムです．Pythonの標準パッケージマネージャーのPipの代替としてデータサイエンス分野を中心に広く使われているということはQiitaの読者の皆さんならご存知の方も多いでしょう．

Condaの主な利点は以下の通りです：

1. クロスプラットフォーム対応（Windows、macOS、Linux）で一貫した環境を構築できる
2. 異なるバージョンの言語やライブラリを含む独立した環境を作成・管理できる
3. 依存関係を自動的に解決し、バイナリパッケージを提供することで、インストールが容易
---

### Condaパッケージに関するよくある誤解
先述の通り，CondaパッケージはPipでPyPIからインストール可能なパッケージをcondaパッケージマネージャーでインストールする際に使うものとして認識されていると思います．

しかし実のところ，**CondaはPythonのパッケージだけでなく、さまざまなプログラミング言語やツールに対応しており，Pipでは簡単にインストールすることができないパッケージもインストール可能です**．実際に、以下のようなものをCondaで管理できます：

- データサイエンス関連のR言語パッケージ
- C/C++のコンパイラやライブラリ
- Javaの開発環境
- 機械学習フレームワーク（TensorFlow、PyTorchなど）とそれらの依存関係
- 科学計算用のライブラリ（BLAS、LAPACK、MKLなど）

「CondaはPythonパッケージにしか対応していない」という誤解が生まれた理由の1つは,
Anacondaディストリビューションが主にPythonのデータサイエンス環境として知られているためです。しかし，実際にはCondaは基本的にPython用のパッケージのみをインストールできるPipに比べて，より汎用的なパッケージ管理システムとして設計されています.

プロジェクトの要件に応じて,特定の言語やツールのバージョンを柔軟に組み合わせた環境を構築できることがCondaパッケージの大きな強みと言えます．

---

## 💡 Pixiとは？

ここから今回の記事の主題であるPixiについて説明します．

- **Pixi**: Condaパッケージマネージャー
  - Rust で実装された高速かつ安全な設計
  - モダンな開発ワークフローをサポート
    - サブコマンドが`rye`や`uv`と似ている（`pixi add`, `pixi run`）
- **特徴**
  - 軽量かつ依存関係解決が高速
  - `pyproject.toml` をネイティブにサポート
  - 仮想環境を意識せずに直接プロジェクトを管理可能

---
## 🔥 Pixiを使うことの利点

- - **従来の問題点**:
  - 仮想環境（`venv`）の管理が面倒
  - `pip` や `conda` の依存関係解決に時間がかかる
    - `conda`のC++実装の`mamba`や`micromamba`は速い
  - `pip`だとグローバル環境を汚染しやすい
  - `conda`だと環境を切り分けられるがグローバルに必要なパッケージを環境ごとにインストールする必要がある
    - `condax`を使うという手はある

---
- **Pixi の解決策**:
  - **プロジェクトごとに環境を完全に分離**
  - **インストールが高速**（Rust のおかげ！）
  - **標準化された設定ファイル** (`pixi.toml`)

---
## 📋 Pixiの基本的な使い方

Pixiの基本的な使い方を説明します．

### 1️⃣ インストール

```shell
# UNIX系
curl -fsSL https://pixi.sh/install.sh | sh

# Windows
powershell -ExecutionPolicy ByPass -c "irm -useb https://pixi.sh/install.ps1 | iex"

# Conda
conda install pixi -c conda-forge

# Homebrew
brew install pixi
```
---
### 2️⃣ プロジェクトを始める

```shell
# 仮想環境を作成
# conda create -n <環境名>; conda install -n <環境名> pythonに相当
pixi init
pixi add python

# プログラムを実行
# conda run pythonに相当
pixi run python

# もしくは明示的に仮想環境に入ってプログラムを実行
# conda activate <環境名>; pythonに相当
pixi shell
python
```

---
### 3️⃣ パッケージのインストール

```shell
# プロジェクトにインストール（その環境だけで使える）
# conda install -n <環境名> python==3.13 numpy pandas polarsに相当のコマンド
pixi add python==3.13 numpy pandas polars

# グローバルインストール（ユーザーレベルですべてのConda環境で使えるようになる）
# condaには存在しない機能
pixi global install ruby rust julia git
```

---
## 🛠️ Pixiをタスクランナーとして使う

- **タスクランナー機能**:
  - `pixi task add <タスク名>`でタスクを定義
  - `pixi run <タスク名 or コマンド名>` でタスク/コマンドを実行

---
## 🚀 Pixi の強み：従来ツールとの比較

従来ツールと比較するとこんな感じです．

| ツール         | Pixi       | pip       | conda     |
|----------------|------------|-----------|-----------|
| **速度**      | 🚀 高速     | 🐢 遅い    | 🐢 遅い    |
| **安全性**    | 👍 高い     | 😐 普通    | 👍 高い     |
| **依存解決**  | 🎯 正確     | 😐 微妙    | 🎯 正確     |
| **セットアップ**| 簡単       | 簡単       | やや複雑    |

---
## 👣 次のステップ

Pixiの使い方がある程度分かってきたら，公式ドキュメントを読みながら実際にプロジェクトをPixiで管理してみるといいと思います．

1. **公式ドキュメント**を読む
   - [https://pixi.sh](https://pixi.sh)
2. **使ってみよう**
   - 簡単なプロジェクトで始めると⭕️

---
## 最後に

PixiはPipの代替であるryeやuvと同様にRustで実装されており，処理がPythonで実装されたCondaと比べて圧倒的に高速です．

特に`pixi global install`でユーザーレベルでのグローバルインストールが可能な点が個人的にとても気に入っています．

これにより，condaのようにgitやgccなどのコマンドラインツールとして利用するパッケージを環境ごとに分ける必要がなくなり利便性が高まりました．

プロジェクトがPyPIに登録されているPythonパッケージのみで足りる場合はuvやryeで十分ですが，

- Pythonパッケージ以外もプロジェクト単位で管理したい
- 管理者権限を持っていないが，使用したいパッケージがある
- Conda環境をryeやuvのようなコマンド体系で扱いたい

といった場合はPixiを使ってみてはいかがでしょうか？