14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アイレット株式会社Advent Calendar 2024

Day 16

ryeを使って、BoxのデータをS3に同期するバッチを作成する〜前編:rye導入編〜

Last updated at Posted at 2025-01-04

概要

image.png

Pythonのパッケージツールであるryeを使って、BoxのデータをS3に同期するバッチを作成しようと思い、記事を執筆しています。

内容が長くなることが予想されるので、前編・後編の2本立てで執筆しています。
前編→ryeでの環境構築
後編→SAMを使ってBoxのデータをS3に同期するバッチを作成する

前編である今回は、ryeでの環境構築についてまとめてみました。

【背景】何のためのバッチを作成するのか?〜想定成果物〜

今回の想定成果物について考えてみました。
Kendra-Bedrockを組み合わせる、「よくあるAWSでRAGを実現するケース」を考えます。
その際、データソースを用意するドキュメントが必要になると思います。例えば、「社内文書検索」というケースでは、検索対象となるドキュメントは、BoxやGoogle Driveなど、別の場所に格納されているのが多くのケースで考えられると思います。
そこで、今回はBoxを使って、以下の要件に基づいたバッチ作成を考えます。

  • データソースとなるドキュメントが対象となるBoxのフォルダに配置されたらS3にドキュメントが同期される
  • S3に同期される際、ドキュメントのメタデータが付与されるようにする
    • Kendraで検索する際、ドキュメントカテゴリでフィルタリングをすることができるようにするため

ryeとは?

Ryeは、Pythonプロジェクトの開発における バージョン管理、パッケージ管理、仮想環境の管理 を一元化するためのツールです。近年注目されているRustで開発されており、既存のツールと比べて軽量・高速に動作する、と言われているようです。

記事を執筆していて気がついたのですが、
後継のパッケージuvの利用が現在推奨されているようです。
uvについての記事は、また別記事でまとめたいと思います。

ryeの導入手順

以下の手順で、ryeプロジェクトを作成することができます。実行コマンドとその結果を、記しています。
Rust製ということもあり、pipやpoetryなど他のパッケージ管理ツールと比べてインストールにかかる時間が短い気がしました。

プロジェクト作成時のイメージ(rye init実行後作成される)
スクリーンショット 2025-01-04 16.37.20.png

ryeをインストール
maeno:/Users/maeno % curl -sSf https://rye.astral.sh/get | bash
This script will automatically download and install rye (latest) for you.
######################################################################## 100.0%
Welcome to Rye!

This installer will install rye to /Users/maeno/.rye
This path can be changed by exporting the RYE_HOME environment variable.

Details:
  Rye Version: 0.43.0
  Platform: macos (aarch64)

✔ Continue? · yes
✔ What should running `python` or `python3` do when you are not inside a Rye managed project? · Run a Python installed and managed by Rye
✔ Which version of Python should be used as default toolchain? · cpython@3.12
Installed binary to /Users/maeno/.rye/shims/rye
Bootstrapping rye internals
Fetching requested internal toolchain 'cpython@3.12.8'
Downloading cpython@3.12.8
Checking checksum
Unpacking
Downloaded cpython@3.12.8
Updated self-python installation at /Users/maeno/.rye/self

The rye directory /Users/maeno/.rye/shims was not detected on PATH.
It is highly recommended that you add it.
✔ Should the installer add Rye to PATH via .profile? · yes
Added to PATH.
note: for this to take effect you will need to restart your shell or run this manually:

    source "$HOME/.rye/env"

To make it work with zsh, you might need to add this to your .zprofile:

    source "$HOME/.rye/env"

For more information read https://rye.astral.sh/guide/installation/

All done!
ryeプロジェクト作成
maeno:/Users/maeno/dev/streamlit-rag-app % rye init streamlit-rag-app
success: Initialized project in /Users/maeno/dev/streamlit-rag-app/streamlit-rag-app
  Run `rye sync` to get started
rye addを実行し、利用するライブラリを追加
maeno:/Users/maeno/dev/streamlit-rag-app/streamlit-rag-app % rye add boto3       
Initializing new virtualenv in /Users/maeno/dev/streamlit-rag-app/streamlit-rag-app/.venv
Python version: cpython@3.12.8
Added boto3>=1.35.90 as regular dependency
Reusing already existing virtualenv
Generating production lockfile: /Users/maeno/dev/streamlit-rag-app/streamlit-rag-app/requirements.lock
Generating dev lockfile: /Users/maeno/dev/streamlit-rag-app/streamlit-rag-app/requirements-dev.lock
Installing dependencies
Resolved 8 packages in 3ms
   Built streamlit-rag-app @ file:///Users/maeno/dev/streamlit-rag-app/streamlit-rag-app
Prepared 8 packages in 525ms
Installed 8 packages in 23ms
 + boto3==1.35.90
 + botocore==1.35.90
 + jmespath==1.0.1
 + python-dateutil==2.9.0.post0
 + s3transfer==0.10.4
 + six==1.17.0
 + streamlit-rag-app==0.1.0 (from file:///Users/maeno/dev/streamlit-rag-app/streamlit-rag-app)
 + urllib3==2.3.0
Done!

基本的には、一つずつ利用するライブラリをrye addで追加していく必要があるのかなと思われます。
※番外編もご覧ください。

rye syncでパッケージを実際にインストール
maeno:/Users/maeno/dev/streamlit-rag-app/streamlit-rag-app % rye sync             
Reusing already existing virtualenv
Generating production lockfile: /Users/maeno/dev/streamlit-rag-app/streamlit-rag-app/requirements.lock
Generating dev lockfile: /Users/maeno/dev/streamlit-rag-app/streamlit-rag-app/requirements-dev.lock
Installing dependencies
Resolved 46 packages in 8ms
Audited 46 packages in 0.08ms

pythonのバージョンを変えたいときは、

rye pin 3.XX(バージョン)

を実行することで変更が可能です。

番外編①)rye add は一括で行うことができるのか確認

pip使用時でいうところのpip install -r requirements.txtのような形で、一括でaddすることはできないかということを試してみました。
requirements.txtを作成し、以下のような形でコマンドを叩くと一括でパッケージを追加できるようです。

$ rye add $(cat requirements.txt)
Initializing new virtualenv in /Users/maeno/dev/sync_box-files_to_s3/.venv
Python version: cpython@3.12.8
Added boto3>=1.35.91 as regular dependency
Added box-sdk-gen>=1.9.0 as regular dependency
Reusing already existing virtualenv
Generating production lockfile: /Users/maeno/dev/sync_box-files_to_s3/requirements.lock
Generating dev lockfile: /Users/maeno/dev/sync_box-files_to_s3/requirements-dev.lock
Installing dependencies
Resolved 14 packages in 3ms
   Built sync-box-files-to-s3 @ file:///Users/maeno/dev/sync_box-files_to_s3
Prepared 5 packages in 335ms
Installed 14 packages in 46ms
 + boto3==1.35.91
 + botocore==1.35.91
 + box-sdk-gen==1.9.0
 + certifi==2024.12.14
 + charset-normalizer==3.4.1
 + idna==3.10
 + jmespath==1.0.1
 + python-dateutil==2.9.0.post0
 + requests==2.32.3
 + requests-toolbelt==1.0.0
 + s3transfer==0.10.4
 + six==1.17.0
 + sync-box-files-to-s3==0.1.0 (from file:///Users/maeno/dev/sync_box-files_to_s3)
 + urllib3==2.3.0
Done!

番外編② Rust製のLinter「Ruff」がわりかし便利

スクリーンショット 2025-01-04 16.06.21.png

ryeの開発元のAstralが作成しているRuffを使うことで、Black, isort、Flake8といったPythonのLinterを使わずに、一括でコードフォーマットを行うことができるようです。
例えば、.vscode/settings.jsonに下記を追加することで利用できるようです。

.vscode/settings.json
{
    "[python]": {
        "editor.codeActionsOnSave": {
            "source.organizeImports": "explicit" //フォーマット時にimport行を整理
        },
        "editor.defaultFormatter": "charliermarsh.ruff", // フォーマットにRuffを使用
        "editor.formatOnSave": true // コード保存時にフォーマット
    }
}


最後に

ここまで読んでいただき、ありがとうございました。
簡単ではありますが、ここまでryeの導入手順についてまとめてみました。
コマンドも単純で、詰まることなく進められるので結構便利だな、という印象でした。
まだまだ新興のツールで、ドキュメントがまだまだ少ない点はありますが、今回触ってみて比較的導入のハードルは低いなと感じたので、今後積極的に使っていければと思いました。

後編では、ryeとAWS SAM(Serverless Application Model)を組み合わせて、BoxのデータをS3に同期するバッチを実際に作ってみた記事をご紹介できればと思います。

参照

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?