EmotionTechテックブログ

株式会社エモーションテックのProduct Teamのメンバーが、日々の取り組みや技術的なことを発信していくブログです。

エモーションテックのPythonプロジェクトで利用しているツールについて

はじめに

エモーションテックでSREチームに所属しているsugawaraです。エモーションテックではPythonを利用しているプロジェクトがいくつかあります。そのプロジェクトで利用しているツールについて、今回はご紹介できればと思います。

この記事は エモーションテック Advent Calendar 2023 の13日目の記事です。

パッケージ管理

仮想環境とパッケージ管理をまとめて扱うことができる Poetry を利用しています。選定理由としては、Python の経験があるエンジニアの中で Poetry の利用経験者が多かったことが大きく、加えて pyproject.toml に各種設定を詰め込むことができたことが挙げられます。

フォーマッター

isortBlack を利用しています。isort はインポートの宣言順を整えてくれるコードフォーマッターで、Black は PEP8 に準拠したコードフォーマッターです。どちらも以下のように pyproject.toml に設定を記載しています。

[tool.black]
line_length = 119

[tool.isort]
line_length = 119
profile = "black"

リンター

Flake8 を利用しています。PEP8 準拠かチェックするリンターであるFlake8 は pyproject.toml に対応していないため、setup.cfg で以下のように定義しています。(pyproject-flake8 というラッパーを使えば対応できるようですが、試したことはありません。)

[flake8]
exclude = .git,*migrations*,.venv,.github,.mypy_cache
max-line-length = 119
ignore = E203,E501,W503,W605,E721

ignore の指定に関しては、しっかり選定できていないのが現状です。

型チェック

mypy を利用しています。mypy は静的に型チェックを行なってくれるライブラリです。isort と Black と同様に mypy に関しても pyproject.toml に以下のように設定を記載しています。

[tool.mypy]
check_untyped_defs = true
disallow_untyped_defs = true
ignore_missing_imports = true
no_strict_optional = true
no_warn_no_return = true
warn_redundant_casts = true
warn_unreachable = true

ただ、Flake8と同様に、オプションの設定がしっかり選定できていないのが現状です。今後力を入れて行きたいと思っています。

今後について

上記で述べたように、mypy の活用には力を入れていきたいと考えています。また、まとめるにあたって他社がどうしているのかを調べてみた際に、RyeRuff など Rust で書かれたより高速なツールに置き換えたという記事を多く見かけたので、今後検討していきたいと思いました。

おわりに

エモーションテックでは顧客体験、従業員体験の改善をサポートし、世の中の体験を変えるプロダクトを開発しています。この記事や他の記事を見て少しでも弊社に興味をもっていただけましたら、ぜひ採用ページからご応募をお願いいたします。

https://careers.emotion-tech.co.jp/