「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ツールを作ることです。
- 指定したディレクトリのサイズを、Rustを使って高速に計算!
- 計算結果を、PyQt6で作ったGUIで分かりやすく表示!
- Poetryで依存関係を管理して、環境構築を楽にする!
- 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
を指定できるようになりました。
成功への道:詳細手順
紆余曲折を経て、ようやく環境構築に成功!
その手順を、ステップごとに詳しく解説します。
- 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
- 依存関係の確認
# PyQt6のインストール確認 poetry run python -c "import PyQt6; print('PyQt6 installed successfully')"
- 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ライブラリをインポートできるようにする
トラブルシューティングガイド
環境構築で困ったときは、ここをチェック!
poetry shell
が動かない:poetry run
を使う- Maturinが
Cargo.toml
を見つけられない: 絶対パスで指定する(%CD%
を使用) - 仮想環境が認識されない:
poetry -C
オプションで設定ファイルの場所を指定
動作確認済みの機能
現時点で、以下の機能が動くことを確認しています。
- Poetry仮想環境でのPyQt6の実行
- Rustライブラリ(rust_lib)のインポートと実行
- VSCodeでのデバッグ実行
まとめ:目指せ、爆速ファイルシステム操作!
今回は、PythonとRustを連携させて、爆速ファイルシステム操作を実現するための環境構築について、私の試行錯誤の記録を交えながら解説しました。
最初はうまくいかないこともありましたが、諦めずに試行錯誤を繰り返すことで、少しずつ前に進むことができました。
この経験が、同じようにPythonとRustの連携に挑戦する方の参考になれば嬉しいです。
今後は、この仕組みを使って、Cドライブの容量不足を解決できる便利なGUIツールを完成させたいと思います!
そして、ゆくゆくはRust単体でのGUI開発や、クロスプラットフォーム対応にも挑戦したい…!
一緒にプログラミングを楽しみましょう!
そういえばpoetryを使った仮想環境の作成も今回初だったんだよな…。そのお話も今度書きますかね…。