Slide 1

Slide 1 text

Copyright © NIFTY Corporation All Rights Reserved. Python開発に役⽴つツールの紹介 ⼩倉聡司 NIFTY Tech Talk #11 「新⼈エンジニアに贈る最強の開発環境」 2023/05/30

Slide 2

Slide 2 text

Copyright © NIFTY Corporation All Rights Reserved. ⾃⼰紹介 ⼩倉 聡司(おぐら さとし) ニフティ株式会社 基幹システムグループ 課⾦システムチーム 新卒⼊社3年⽬ 担当業務 書⾯発送システム、課⾦請求系システム等の開発・運⽤

Slide 3

Slide 3 text

Copyright © NIFTY Corporation All Rights Reserved. 話すこと ❏ 効率性や品質向上に繋がる便利な以下のツールについて紹介します ❏ Poetry パッケージ管理ツール ❏ Ruff Linter ❏ Black Formatter ❏ Mypy 静的型チェッカー ❏ Pytest 単体テストツール

Slide 4

Slide 4 text

Copyright © NIFTY Corporation All Rights Reserved. Poetry Pythonパッケージ管理ツールの⼀種 依存関係の管理、パッケージングを効率化するツール ❏ 特徴 ❏ 依存関係の管理 ❏ プロジェクトの仮想環境 ❏ パッケージング

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Copyright © NIFTY Corporation All Rights Reserved. Poetry Poetryインストール curl -sSL https://install.python-poetry.org | python3 - # 新規プロジェクトの場合 poetry new # 既存プロジェクトの場合 poetry init プロジェクトのセットアップ

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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"

Slide 9

Slide 9 text

Copyright © NIFTY Corporation All Rights Reserved. パッケージのインストール Poetry 仮想環境外からの操作 poetry run poetry install 仮想環境に⼊る poetry shell

Slide 10

Slide 10 text

Copyright © NIFTY Corporation All Rights Reserved. Rustで記述されたPython⽤Linter ❏ Linterとは︖ ❏ Linterは特定のコード規約に従っていないコードがないかを静的解 析によりチェックするツール ❏ 特徴 ❏ 静的コード解析 ❏ さまざまなlintルールの選択 ❏ ⾃動修正 Ruff

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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 .

Slide 13

Slide 13 text

Copyright © NIFTY Corporation All Rights Reserved. BlackはPEP8に準拠したPython⽤Formatter ❏ Formatterとは︖ ❏ コードのスタイルを静的解析を⾏いチェックするツール ❏ 特徴 ❏ ⾃動フォーマット ❏ フォーマットの⼀貫性 Black

Slide 14

Slide 14 text

Copyright © NIFTY Corporation All Rights Reserved. ❏ メリット ❏ コードのフォーマットを⾃動化してくれる ❏ チーム全体でコードのスタイルを統⼀してくれる Black 開発効率向上、品質と保守性の向上に役⽴つ

Slide 15

Slide 15 text

Copyright © NIFTY Corporation All Rights Reserved. Black 1⾏における最⼤⽂字数の指定 チェックのみ(フォーマットはされません) フォーマットの差分を確認 black --line-length 120 . black --check . black --check --diff .

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Copyright © NIFTY Corporation All Rights Reserved. Mypy 型チェック 厳格に型チェックをする場合 mypy . mypy --strict .

Slide 18

Slide 18 text

Copyright © NIFTY Corporation All Rights Reserved. Pythonで書かれたテストを実⾏するツール Pytest ❏ 特徴 ❏ シンプルな構⽂ ❏ 豊富なアサーション ❏ テストランナー機能と柔軟性 ❏ テストカバレッジのサポート

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Copyright © NIFTY Corporation All Rights Reserved. Pytest テストの実⾏ pytest カバレッジの計測 # install pip install pytest-cov # カバレッジの計測 pytest –cov=<対象のディレクトリorファイル>

Slide 21

Slide 21 text

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に⼀元管理できる

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Copyright © NIFTY Corporation All Rights Reserved.