開発チームがお届けするブログリレーです!
既に公開されている記事もありますので、こちらから他のメンバーの投稿もぜひチェックしてみてください!
はじめに
Pythonで新しいプロジェクトを構築する時、使用するツールはここ2、3年でかなり変わってきた印象があります。
私自身、3年前は当たり前に使っていたツールを今は使わなくなったという事も少なくありません。
この記事では、2025年の最新事情を踏まえつつ、個人的に新規Pythonプロジェクト構築時に導入したいツール・ライブラリをご紹介します。
ぜひ参考にしてみてください。
1. uv
概要
uvは、Pythonパッケージマネージャです。
pipやvirtualenvの代替として使える上に高速で動作し、依存関係を解決・インストールできます。
有名なオープンソースライブラリ等を見ても、uvを使っていない方が珍しくなってきている気がします。
メリット
- Rust製で極めて高速
- 詳細な比較は色々な記事でされてますが、実際に使ってみてもpipより体感できるくらい早いです。
- 再現性のある環境構築が可能
- lockファイルを使用し、チームメンバー全員で同じ環境を再現して構築が可能。
- コマンドラインツールをインストールせず実行できる
- ruffやmypy等、依存関係をインストールせず実行することができます。
- CI/CDパイプラインの高速化
- 高速可することで、デプロイの頻度を上げていくことができます。
導入方法
curl -LsSf https://astral.sh/uv/install.sh | sh
使い方
# 仮想環境の作成 uv venv # プロジェクトの初期化 uv init example # パッケージのインストール uv add ruff mypy pytest # パッケージの削除 uv remove ruff mypy pytest # 依存関係の同期 uv sync # ツールの実行 uvx mypy
2. Ruff
概要
Ruffは、Python用のLinter兼Formatterです。
Flake8、isort、black、pylintなどの機能を統合し、非常に高速な実行速度を実現しています。
メリット・特徴
- Rust製で爆速動作
- フォーマット・リントが高速に動作するので、ローカル開発およびCI/CDへの組み込みもしやすいです。
- コード品質の一貫した維持
- Ruffに限らずですが、チーム全体でのコーディングスタイルが統一され、コードベースの一貫性を保つことができます。
- 他ツールの統合
- 上述の通り、Flake8、black等のツールを1つに統合できるので、依存関係がスッキリします。
導入方法
# uvを利用して開発環境用にインストールする場合 uv add --dev ruff
注: VSCodeを使用している場合は、”Ruff”拡張機能をインストールすることで、エディタ上でリアルタイムに動作が可能になります。
3. mypy
概要
mypyは、Pythonの標準的な型チェッカーです。
PEP 484で定義された型ヒントに基づいて、コードの型安全性を確保します。
型チェックの結果を詳細なレポートとして出力し、問題の特定と修正を容易にできます。
メリット・特徴
- 型安全性の確保
- 開発段階から型に関するエラーが発見可能になることで、動作環境での予期せぬエラーを減らすことができます。
- コードの可読性と保守性の向上
- 型が定義されていることで、コードの意図が理解しやすくなります。
- 関数の引数と戻り値の型が明確になることで、ドキュメントの必要性が減少します。
導入方法
# pipを使用する場合 pip install mypy # uvを使用する場合 uv add --dev mypy
注: VSCodeを使用している場合は、”Mypy”拡張機能をインストールすることで、エディタ上でリアルタイムに型チェックが可能になります。
余談: 現在、Astral社がtyという高速な型チェッカーが開発中でにわかに話題になってます。
正式リリースはまだですが、mypyの代替として設計されており、非常に高速な型チェックを実現してくれそうです。
正式リリース後は、tyへの移行を検討してみても良いかもしれません。
4. pre-commit
概要
pre-commitは、Gitのコミット前にコードチェック・整形などを自動実行するためのツールです。
豊富なフックを提供し、カスタムフックの作成も容易で、チーム全体での一貫したチェックの実施を可能にします。
メリット・特徴
- チーム開発でのコード品質を自動で担保
- コミット前に自動チェックが走るので、フォーマッターやテスター等を設定しておけば一定の品質を担保できます。
- Hookが豊富(例: ruff, black, trailing-whitespace など)
- レビュアーの負担軽減
導入方法
# pipを使用する場合 pip install pre-commit # uvを使用する場合 uv add pre-commit
注: VSCodeを使用している場合は、”pre-commit”拡張機能をインストールすることで、エディタ上でコミット前のチェックを実行できます。
使い方
大まかに行うのは下記を行うだけです。
.pre-commit-config.yaml
をルートディレクトリに作成- どういったフックをどういう順序で実行するかをYAMLで定義
仮にRuffを実行する場合は、下記のような定義を記述します。
repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.9.2 hooks: - id: ruff name: Ruff check description: "'ruff check'を実行します" args: [--fix]
あとは、Gitへコミットすることでフックが実行されます。
5. pytest
概要
説明するまでもない気がしますが、pytestはPythonの定番テストフレームワークです。
シンプルで直感的なテスト記法を提供し、豊富なフィクスチャ機能を備えています。
並列テスト実行や詳細なテストレポート機能もあります。
メリット・特徴
- テストの可読性向上
- assert文だけでテストが書け、テストコードの理解が容易
- 拡張プラグインが豊富(pytest-cov, pytest-mock など)
- テスト実行の効率化
- 並列実行により、テスト実行時間の短縮が可能
導入方法
# pipを使用する場合 pip install pytest # uvを使用する場合 uv add --dev pytest
使い方(書き方)については長くなるので割愛させていただきますが、
公式サイトにてぜひ確認してみてください!
6. Task
概要
Taskは、開発タスクを定義・実行できるGo製のタスクランナーです。
YAML形式でのタスク定義、依存関係の管理、クロスプラットフォーム対応を特徴としています。
メリット・特徴
- 開発タスクの標準化
- よく使うコマンドや長い手順を省略し、作業手順の違いによる問題をなくせます。
- YAMLによるわかりやすい記述
- 私自身以前はmakefileで書いてたんですが、やっぱりYAMLは読みやすい。
導入方法
brew install go-task
使い方
タスクファイルを定義して実行するだけです。
Taskfile.yaml
にタスクを定義task ◯◯
でタスクを実行
echoするだけのタスクは下記のように定義します。
version: '3' tasks: hello: desc: say hello cmds: - echo "Hello!!"
下記で実行です。
task hello
チーム導入のコツ
せっかくなので、プロジェクトの作成および運用で考えるポイントを自分なりまとめてみます。
- 環境構築の再現性を高める
- uvやDev Containersを使えば「環境をコード化」し、VSCode(Cursor)の拡張機能も含めてチームメンバー間で環境を再現できる
- コードスタイルを統一する
- Ruffやmypy等を使えば、ビジネスロジックを除いて書き方の違いがなくなる(コードレビューで書き方を指摘することがなくなる)
- よく使うコマンドはタスクランナーで共通化
- task testやtask lintなどで、作業を標準化する
- READMEがあらゆる説明で巨大化していくのは不格好
- 型アノテーションは「義務」ではないが「補助」から始める
- 型を書く文化を自然に導入できる
- 単体テストは作成するだけでなくバグ削減のために実行を仕組み化する
- 私も身に覚えがありますが、テストを作っても実行されないのならただ工数が掛かるだけで意味がない…。
- できればpre-commitやCI/CDパイプラインに組み込もう(自戒)
最後に
個人的に推せるツールやライブラリを説明してきました。
これらのツールを活用することで開発効率を向上していけると思うので、使ったことがないツールがあれば是非使ってみてください!
個人的には、Ruffやuv、tyを開発するAstralには、今後も注目していきたいと思います。