こんにちは。エンジニアの平野です。今回の投稿はFLINTERSブログ祭りの記事です。テーマは #python #rye #ruff #mypy です。
この記事では今どきのpython環境の構築方法について紹介したいと思います。
今どきの環境構築
どんな言語やどのようなソフトウェアを開発するに関わらず、生産性向上のため最近では以下のツールを導入することが多いと思います。
- library management tool
- linter
- formatter
pythonにはそれぞれのツールでいくつかの選択肢があると思いますが、自分は最近joinした新しいプロジェクトのリポジトリでそれぞれ以下のツールを選択し導入しました。
rye
まずlibrary management toolとしてryeを選択しました。ryeは包括的なプロジェクト&ライブラリ管理ツールです。 ryeのみでpythonの開発をすぐに始められることを目的として以下のような機能があります。
- pythonのインストール管理
- pyproject.tomlベースのプロジェクト管理
- 依存ライブラリ管理
- virtualenvの管理
ryeはlibrary management toolの中で後発でモダンであったことと、上記で記載の通り開発の初めやすさと使いやすさがあったために選択しました。 他の選択肢だと例えばpoetry + pyenvなどの組み合わせが考えられますが、これらの組み合わせの機能がrye1つでカバーできる点が魅力かと思います。
ruff
1つ目のlinterとformatterとしてruffを選択しました。ruffはRust製のlinterとformatterです。元々linterの機能しかありませんでしたが、後々formatterの機能も追加されました。
ruffの魅力としては以下のような感じです。
- Rust製なので動作が高速
- 対応ルールが多い
ruffのlintルールはruff独自のものもありますが多くは既存のlinter(Flake8, Pylint, isort等)ルールの再実装になります。現在も活発に開発が進められており日々新しいルールが追加されています。またformatterはBlackと互換性がありBlackからの乗り換えもしやすいです。
mypy
2つ目のlinterとしてmypyを選択しました。mypyは型チェッカーと呼ばれることもあります。静的型付け言語がコンパイル時に行うような型チェックをpythonコードに対して行うことができます。ただし、静的型付け言語のように全ての関数等に型付けを行う必要はなく、部分的に型付けをしてその箇所のみ型チェックを行うこともできます。自分が導入したプロジェクトではコード量があまり多くなかったので、全てのコードに型付けをしてmypyに型の整合性をチェックさせています。また意図せず型付けされていないコードがコミットされないような設定(disallow_untyped_defs)も追加してあります。
pythonの型チェッカーとしては他にもMicrosoft社製のPyrightやGoogle社製のpytype等があります。今回mypyを選択したのはmypyの開発にGuido van Rossum*1が加わっていてオフィシャルな感じがあったからです。
まとめ
いかがでしたか?この記事では今どきのpython環境構築について紹介しました。この記事が新たにpythonの開発を行う場合のツール選定や、既存pythonプロジェクトのツール見直し等に役立てば嬉しいです。
参考リンク
*1:pythonの生みの親