Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python開発に役立つツールの紹介 - NIFTY Tech Talk #11

Python開発に役立つツールの紹介 - NIFTY Tech Talk #11

Video


Resources

新人エンジニアに贈る最強の開発環境 - NIFTY Tech Talk #11

https://nifty.connpass.com/event/284175/

More Decks by ニフティ株式会社

Other Decks in Programming

Transcript

  1. Copyright © NIFTY Corporation All Rights Reserved. Python開発に役⽴つツールの紹介 ⼩倉聡司 NIFTY

    Tech Talk #11 「新⼈エンジニアに贈る最強の開発環境」 2023/05/30
  2. Copyright © NIFTY Corporation All Rights Reserved. ⾃⼰紹介 ⼩倉 聡司(おぐら

    さとし) ニフティ株式会社 基幹システムグループ 課⾦システムチーム 新卒⼊社3年⽬ 担当業務 書⾯発送システム、課⾦請求系システム等の開発・運⽤
  3. Copyright © NIFTY Corporation All Rights Reserved. 話すこと ❏ 効率性や品質向上に繋がる便利な以下のツールについて紹介します

    ❏ Poetry パッケージ管理ツール ❏ Ruff Linter ❏ Black Formatter ❏ Mypy 静的型チェッカー ❏ Pytest 単体テストツール
  4. Copyright © NIFTY Corporation All Rights Reserved. Poetry ❏ メリット

    ❏ 依存関係の管理を簡素化してくれる ❏ バージョンの衝突や互換性を回避 プロジェクト内のライブラリの⼀貫性を保つのに役⽴つ
  5. Copyright © NIFTY Corporation All Rights Reserved. Poetry Poetryインストール curl

    -sSL https://install.python-poetry.org | python3 - # 新規プロジェクトの場合 poetry new <project_name> # 既存プロジェクトの場合 poetry init プロジェクトのセットアップ
  6. Copyright © NIFTY Corporation All Rights Reserved. Poetry [tool.poetry] name

    = "techtalk" version = "0.1.0" description = "" authors = ["ogura <メールアドレス>"] readme = "README.md" [tool.poetry.dependencies] python = "^3.11" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" pyproject.toml
  7. Copyright © NIFTY Corporation All Rights Reserved. Poetry # 本番環境で必須のパッケージ

    poetry add pydantic # 開発環境でのみ必要なパッケージ poetry add mypy ruff black pytest --dev パッケージの追加 [tool.poetry.dependencies] python = "^3.11" pydantic = "^1.10.8" [tool.poetry.group.dev.dependencies] pytest = "^7.3.1" mypy = "^1.3.0" ruff = "^0.0.269" black = "^23.3.0"
  8. Copyright © NIFTY Corporation All Rights Reserved. Rustで記述されたPython⽤Linter ❏ Linterとは︖

    ❏ Linterは特定のコード規約に従っていないコードがないかを静的解 析によりチェックするツール ❏ 特徴 ❏ 静的コード解析 ❏ さまざまなlintルールの選択 ❏ ⾃動修正 Ruff
  9. Copyright © NIFTY Corporation All Rights Reserved. Ruff ❏ メリット

    ❏ エラーの早期発⾒ ❏ コードの可読性向上 ❏ チームでのコーディングルールの共通化 プロジェクトの品質とメンテナンスの容易化に役⽴つ
  10. Copyright © NIFTY Corporation All Rights Reserved. Ruff Lintルール選択 ruff

    . --select E --select W ruff . --ignore E501 ruff . --select E --select W --ignore E501 --fix 適応しないルール ⾃動修正 チェックのみ(修正はしない) ruff check .
  11. Copyright © NIFTY Corporation All Rights Reserved. BlackはPEP8に準拠したPython⽤Formatter ❏ Formatterとは︖

    ❏ コードのスタイルを静的解析を⾏いチェックするツール ❏ 特徴 ❏ ⾃動フォーマット ❏ フォーマットの⼀貫性 Black
  12. Copyright © NIFTY Corporation All Rights Reserved. ❏ メリット ❏

    コードのフォーマットを⾃動化してくれる ❏ チーム全体でコードのスタイルを統⼀してくれる Black 開発効率向上、品質と保守性の向上に役⽴つ
  13. Copyright © NIFTY Corporation All Rights Reserved. MypyはPythonの静的型チェックを実⾏するツール ❏ 静的型チェック

    ❏ Pythonの型ヒントを活⽤し、コードの型エラーを検出 ❏ メリット ❏ エラーや意図しない動作を事前に防ぐことが可能 ❏ 信頼性の⾼いコードを実装し、効率的なデバッグ、保守が可能 Mypy 品質向上とバグの早期発⾒に役⽴つ
  14. Copyright © NIFTY Corporation All Rights Reserved. Pythonで書かれたテストを実⾏するツール Pytest ❏

    特徴 ❏ シンプルな構⽂ ❏ 豊富なアサーション ❏ テストランナー機能と柔軟性 ❏ テストカバレッジのサポート
  15. Copyright © NIFTY Corporation All Rights Reserved. Pytest ❏ メリット

    ❏ シンプルな構⽂と豊富な機能を持つ ❏ さまざまなテストパターンに活⽤できる 品質を確保するのに役に⽴つ
  16. Copyright © NIFTY Corporation All Rights Reserved. Pytest テストの実⾏ pytest

    カバレッジの計測 # install pip install pytest-cov # カバレッジの計測 pytest –cov=<対象のディレクトリorファイル>
  17. Copyright © NIFTY Corporation All Rights Reserved. ツールの設定値をpyproject.tomlにまとめる [tool.ruff] select

    = [ # pyflakes "F", # pycodestyle errors, warnings "E", "W", # isort "I", # flake8-2020 "YTT", # flake8-bugbear "B", ] target-version = "py311" line-length = 120 [tool.mypy] warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true strict = true [tool.black] line-length = 120 target-version = ["py311"] [tool.pytest.ini_options] testpaths = [ "tests", ] 今まで紹介したツールはpyproject.tomlに⼀元管理できる
  18. Copyright © NIFTY Corporation All Rights Reserved. まとめ ❏ 紹介したツールを活⽤することでコードの品質向上やバグの早期発⾒

    に役⽴ちます。 ❏ チームに導⼊することで開発における品質と⽣産性を向上させ効率的 な開発プロセスを実現しましょう。 *Docker環境で今回紹介したツールを活⽤する⽅法は以下のページに記述 https://engineering.nifty.co.jp/blog/16673