今巷で話題のRyeについて調べてみた

## 話題のRyeについて調べてみた
Ryeは、開発プロセスを簡素化・設定の手間を減らし、Pythonプロジェクトの全体的な開発者体験を向上させます。Ryeはシンプルで軽量な設計を持ち、またキャッシュを利用してインストール時間を短縮できる特徴などを持つため、Poetryやpipと比べて依存関係の管理やインストールを速くすることができます。

### Ryeの概要

Ryeは、Pythonのパッケージマネージャーおよび環境管理ツールの一つで、迅速かつ効率的にPythonの開発環境を構築するためのツールです。Ryeは、特に以下の点で注目されています。

##### 軽量で高速
Ryeは軽量で、高速に動作することを重視しています。これは、特に大規模なプロジェクトや複数のプロジェクトを管理する場合に有利です

##### 依存関係の管理
Ryeは依存関係の管理を簡素化し、必要なライブラリを迅速にインストールおよび更新することができます。また、依存関係の解決に優れ、バージョンの競合を最小限に抑えます

##### 環境の分離
仮想環境の管理を容易にし、プロジェクトごとに異なるPythonバージョンやライブラリのバージョンを使用することができます

##### 統合的なツール
Ryeは、パッケージのインストール、アップデート、アンインストールだけでなく、スクリプトの実行、仮想環境の作成と管理、依存関係の解決など、開発者が必要とする多くの機能を一つのツールで提供します

##### ユーザーフレンドリーなインターフェース
コマンドラインインターフェース（CLI）が使いやすく設計されており、直感的に操作できます

Ryeは、pipやcondaの代替または補完として利用されることを目指しており、特に速度と効率性を求める開発者にとって有力な選択肢となります。

#### インストール手順
##### Mac
###### Homebrewがない場合
下記のコマンドを実行
```zsh:terminal
curl -sSL https://install.ryeup.com | sh
```
###### Homebrewがある場合
下記のコマンドを実行
```zsh:terminal
brew install rye
```
##### Windows
下記のコマンドを実行
```powershell:powershell
irm https://install.ryeup.com -useb | iex
```
#### インストールの確認
下記のコマンドが実行できることを確認する
```zsh:terminal
rye --version
```
下記の内容が表示されたら正常にインストールができています。
```zsh:terminal
rye 0.34.0
commit: 0.34.0 (2024-05-20)
platform: macos (aarch64)
self-python: not bootstrapped (target: cpython@3.12)
symlink support: true
uv enabled: true
```
#### よく使うコマンド
##### プロジェクトの初期化
プロジェクトの初期化を行います。このコマンドを実行すると、プロジェクトディレクトリ内に基本的な構成ファイルが生成されます。
```zsh:terminal
rye init
```
##### パッケージをプロジェクトに追加
指定したパッケージをプロジェクトに追加します。依存関係の解決とパッケージのインストールが自動的に行われます。
```zsh:terminal
rye add <パッケージ名>
```
##### パッケージを削除
```zsh:terminal
rye remove <パッケージ名>
```
指定したパッケージをプロジェクトから削除します。
##### 仮想環境を設定する
pyproject.toml に基づいてプロジェクトの依存関係を同期します。このコマンドは、必要なパッケージをインストールし、仮想環境を設定します。
```zsh:terminal
rye sync
```
##### コマンド実行
プロジェクトの仮想環境内で任意のコマンドを実行します。
```zsh:terminal
rye run <コマンド>
```
##### バージョンのインストール
特定のPythonバージョンをインストールします。
```zsh:terminal
rye install <Pythonバージョン>
```
##### バージョンを指定する
プロジェクトで使用するPythonバージョンを指定します。
```zsh:terminal
rye use <Pythonバージョン>
```
##### パッケージとバージョンを表示する
インストールされているパッケージとそのバージョンを表示します。
```zsh:terminal
rye list
```
##### 最新バージョンにアップグレードする
指定したパッケージを最新バージョンにアップグレードします。
```zsh:terminal
rye upgrade <パッケージ名>
```
##### pyproject.lock ファイルを生成する
依存関係を固定し、pyproject.lock ファイルを生成します。これにより、依存関係のバージョンが固定され、再現性のあるビルドが可能になります。
```zsh:terminal
rye lock
```
ここで出力されるlockファイルなのですが、poetryとは違ってpipのrequirements.txtと同じ形式で出力されます。さらにはコメントでどのライブラリからの依存かも出力してくれます。Dockerfileを作成するときにコンテナの中にpoetryのようにryeをインストールする必要もないので手間がさらに省けます。
```
# generated by rye
# use `rye lock` or `rye sync` to update this lockfile
#
# last locked with the following flags:
#   pre: false
#   features: []
#   all-features: false
#   with-sources: false
#   generate-hashes: false

-e file:.
annotated-types==0.7.0
    # via pydantic
anyio==4.4.0
    # via httpx
    # via starlette
    # via watchfiles
botocore==1.34.113
    # via boto3
    # via s3transfer
botocore-stubs==1.34.94
    # via boto3-stubs
certifi==2024.2.2
    # via httpcore
    # via httpx
    # via requests
charset-normalizer==3.3.2
```
#### 同等のプログラムとの比較
##### pipとの比較
Ryeは、Pythonプロジェクトの統合的な管理を目指したツールであり、特に複雑な依存関係の管理や仮想環境の設定を簡素化することに強みがあります。一方、pipはシンプルで広く普及しており、パッケージ管理に特化しています。
| 特徴 | Rye | Pip |
|:-----------|:------------|:------------|
| 目的       | パッケージ管理、環境管理、スクリプト実行        | パッケージ管理         |
| 設計思想     | 軽量かつ高速、統合的なツールチェーン      | シンプルで標準的なパッケージ管理       |
| 仮想環境管理       | 内蔵        | venvやvirtualenvを使用         |
| 依存関係の管理         | 優れた依存関係解決と固定          | 基本的な依存関係解決    |
| Pythonバージョン管理       | Pythonバージョンのインストールと使用の管理       | 管理なし（pyenvや他のツールと組み合わせる）       |
| 初期化コマンド    | rye init     | なし      |
| パッケージの追加    |　rye add <パッケージ名>    |　pip install <パッケージ名>    |
| パッケージの削除    |　rye remove <パッケージ名>    |　pip uninstall <パッケージ名>    |
| パッケージのリスト表示    |　rye list    |　pip list    |
| 依存関係の同期    |　rye sync    |　なし    |
| 依存関係の固定    |　rye lock    |　pip freeze > requirements.txt    |

##### poetryとの比較
RyeとPoetryはどちらも強力なパッケージおよび環境管理ツールですが、それぞれに独自の特徴と強みがあります。Ryeは軽量で高速なパフォーマンスを重視して設計されており、Poetryは再現性のあるビルドと依存関係の管理を重視しています。
| 特徴 | Rye | Poetry |
|:-----------|:------------|:------------|
| 目的       | パッケージ管理、環境管理、スクリプト実行        | パッケージ管理、環境管理、依存関係管理         |
| 設計思想     | 軽量かつ高速、統合的なツールチェーン      | 再現性のあるビルド、シンプルな設定       |
| 仮想環境管理       | 内蔵        | 内蔵         |
| 依存関係の管理         | 優れた依存関係解決と固定          | 優れた依存関係解決と固定|
| Pythonバージョン管理       | Pythonバージョンのインストールと使用の管理       | 使用するPythonバージョンの指定が可能       |
| 初期化コマンド    | rye init     | poetry init      |
| パッケージの追加    |　rye add <パッケージ名>    |　poetry add <パッケージ名>    |
| パッケージの削除    |　rye remove <パッケージ名>    |　poetry remove <パッケージ名>    |
| パッケージのリスト表示    |　rye list    |　poetry show    |
| 依存関係の同期    |　rye sync    |　poetry install    |
| 依存関係の固定    |　rye lock    |　poetry lock    |

## 失敗談
2024年6月5日時点でバージョン0.34.0であるため、プログラムとしてまだ完璧ではないようです。
機械学習のライブラリである、lightgbmをApple SiliconのMacにインストールするときなどにエラーが発生してしまいます。この時は暫定対応としてpipとの併用が必要になります。

## 参考資料
https://github.com/astral-sh/rye