PythonとRustで爆速ファイルシステム操作!初心者向け環境構築ガイド【試行錯誤の記録】

PythonとRustで爆速ファイルシステム操作!初心者向け環境構築ガイド【試行錯誤の記録】

「Cドライブの容量がピンチ!でも、どのフォルダが犯人なの…?」

普段何気なく使っているパソコン。でも、ストレージの容量不足に悩まされた経験、ありませんか?

今回は、そんな悩みを解決すべく、PythonとRustを連携させて、爆速でフォルダサイズを計算できるGUIツールを作るまでの道のりをご紹介します!

「え、PythonとRustって一緒に使えるの?」「難しそう…」と思ったあなた!大丈夫!

この記事では、プログラミング初心者の方でも理解できるように、

  • なぜPythonとRustを連携させるのか?
  • どんなツールを作るのか?
  • 環境構築でハマったポイントと解決策

などを、私の実体験を交えながら、楽しく解説していきます!

なぜPythonとRustなの?最強タッグの理由

今回、GUIアプリケーションを作るにあたって、私がPythonとRustを選んだのには、こんな理由があります。

  • Python:
    • 書きやすくて、初心者でもとっつきやすい!
    • GUIライブラリ(PyQt6)が豊富で、簡単にGUIが作れる!
    • でも、ファイルシステム操作はちょっと遅い…
  • Rust:
    • とにかく速い!C/C++に匹敵するパフォーマンス!
    • メモリ安全性が高く、バグが少ない!
    • でも、Pythonに比べると、ちょっと難しい…

そう、PythonとRustは、お互いの弱点を補い合える、まさに最強タッグなんです!

GUIはPythonでサクッと作り、ファイルシステム操作はRustで爆速化!
さらに、Windows, macOS, Linuxなど、いろんなOSで動くようにしたい!(願望)

今回の目標:フォルダサイズ計算GUIツールを作る!

今回のプロジェクトの最終目標は、以下の機能を備えたGUIツールを作ることです。

  1. 指定したディレクトリのサイズを、Rustを使って高速に計算!
  2. 計算結果を、PyQt6で作ったGUIで分かりやすく表示!
  3. Poetryで依存関係を管理して、環境構築を楽にする!
  4. VSCodeで快適に開発できるようにする!

「なんだかワクワクしてきた!」と思っていただけたら嬉しいです!

プロジェクトの全体像(アーキテクチャ)

今回のプロジェクトは、こんな感じの構成になっています。


[フロントエンド]  Python (PyQt6)  <-- データのやり取り --> [バックエンド] Rust (maturin)
                ↑
[依存関係管理] Poetry
                ↑
[開発環境]     VSCode
  • フロントエンド (Python/PyQt6): ユーザーが見て、操作する部分(GUI)を担当します。
  • バックエンド (Rust/maturin): フォルダサイズの計算など、裏側の処理を担当します。
  • Poetry: Pythonのライブラリを管理してくれます。
  • VSCode: 開発に使うエディタです。

試行錯誤の記録:環境構築、ここが大変だった!

ここからは、実際に私が環境構築で遭遇した問題と、それをどうやって解決したかを、時系列でご紹介します。

失敗その1:poetry shell が動かない!?

最初は、poetry shell コマンドで仮想環境に入ろうとしたのですが…


The command 'shell' does not exist.

エラー発生!Windowsでは、poetry shell がうまく動かないことがあるみたいです。(涙)

解決策: poetry run コマンドを使う!


poetry run python your_script.py

これで、仮想環境内でPythonスクリプトを実行できるようになりました。

失敗その2:Maturinが仮想環境を見つけてくれない!

次に、Rustライブラリをビルドするためのツール、Maturinを実行しようとしたら…


Couldn't find a virtualenv or conda environment

またエラー!Maturinは、Poetryで作った仮想環境を自動で認識してくれないみたいです。

解決策: Poetry経由でMaturinを実行する!


poetry run maturin build --release

これで、MaturinがPoetryの仮想環境を認識してくれるようになりました。

失敗その3:Cargo.tomlが見つからない!

Rustライブラリのビルド設定ファイル、Cargo.toml を指定するのに、相対パスを使ったら…


指定されたファイルが見つかりません。(os error 2)

またまたエラー!Windowsでは、パスの指定がシビアみたいです。

解決策: 絶対パスを使う!


poetry -C ../py_app run maturin build --release --manifest-path "%CD%\Cargo.toml"

%CD% は、現在のディレクトリの絶対パスを表す特殊な変数です。
これを使うことで、確実に Cargo.toml を指定できるようになりました。

成功への道:詳細手順

紆余曲折を経て、ようやく環境構築に成功!
その手順を、ステップごとに詳しく解説します。

  1. Poetryのインストールと初期設定
    
    # Poetryのクリーンインストール
    pip uninstall poetry
    python -m pip install poetry
    
    # プロジェクトディレクトリでの設定
    cd py_app
    poetry install
    poetry config virtualenvs.in-project true
    poetry env use python
    poetry install
            
  2. 依存関係の確認
    
    # PyQt6のインストール確認
    poetry run python -c "import PyQt6; print('PyQt6 installed successfully')"
            
  3. Rustライブラリのビルドとインストール
    
    # Rustライブラリのビルド(絶対パスを使用)
    cd ../rust_lib
    poetry -C ../py_app run maturin build --release --manifest-path "%CD%\Cargo.toml"
    
    # ビルドしたライブラリのインストール
    cd ../py_app
    poetry run pip install ../rust_lib/target/wheels/*.whl
            

環境情報

今回の環境は、こんな感じです。

  • OS: Windows 11 Pro 24H2
  • Python: 3.13.0
  • Poetry: 2.0.1
  • PyQt6: 6.8.1
  • Maturin: 1.8.2

VSCode設定

VSCodeで快適に開発するために、launch.json を設定します。


{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": true,
            "cwd": "${workspaceFolder}/py_app",
            "env": {
                "PYTHONPATH": "${workspaceFolder}"
            }
        }
    ]
}
  • cwd: 作業ディレクトリを py_app に設定
  • env: PYTHONPATH を設定して、Rustライブラリをインポートできるようにする

トラブルシューティングガイド

環境構築で困ったときは、ここをチェック!

  1. poetry shell が動かない: poetry run を使う
  2. Maturinが Cargo.toml を見つけられない: 絶対パスで指定する(%CD% を使用)
  3. 仮想環境が認識されない: poetry -C オプションで設定ファイルの場所を指定

動作確認済みの機能

現時点で、以下の機能が動くことを確認しています。

  1. Poetry仮想環境でのPyQt6の実行
  2. Rustライブラリ(rust_lib)のインポートと実行
  3. VSCodeでのデバッグ実行

まとめ:目指せ、爆速ファイルシステム操作!

今回は、PythonとRustを連携させて、爆速ファイルシステム操作を実現するための環境構築について、私の試行錯誤の記録を交えながら解説しました。

最初はうまくいかないこともありましたが、諦めずに試行錯誤を繰り返すことで、少しずつ前に進むことができました。

この経験が、同じようにPythonとRustの連携に挑戦する方の参考になれば嬉しいです。

今後は、この仕組みを使って、Cドライブの容量不足を解決できる便利なGUIツールを完成させたいと思います!
そして、ゆくゆくはRust単体でのGUI開発や、クロスプラットフォーム対応にも挑戦したい…!

一緒にプログラミングを楽しみましょう!

そういえばpoetryを使った仮想環境の作成も今回初だったんだよな…。そのお話も今度書きますかね…。

Comments

No comments yet. Why don’t you start the discussion?

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です