💯

GitHub ActionsでPythonのLintずTestテストをずりあえず実行

に公開
2025/01/28

自動化の第䞀歩

ずっずやろうず思い぀぀、なかなかできないLintやTestの自動化。VS Code゚ディタで蚭定すれば怜出しおくれたすが、うっかり忘れたりチヌムで開発しおいるず、人によっお蚭定が違っおうぎゃヌっおなったり、よくありたすよね。

そんなずきは、GitHub Actions䜿えば、PR(Pull Requestするたびに、LintチェックやTestを自動でやっおくれたりしたす。

この蚘事ではPythonでLintずかTestをずりあえず最短で導入する方法の芚曞です。GitHub Actions、テストに関しおはここでは詳しく説明したせんので、以䞋の曞籍やWeb情報を参照ください。

GitHub Actions 実践入門

テスト駆動Python 第2版

ずりあえず詊隓的に䜜ったリポゞトリです。

https://github.com/karaage0703/python_test

GitHub Actionsの蚭定

GitHubのActionsずいうずころからNew workflowをクリックしたしょう。

そこで出おくる、Python applicationずいうや぀が、LintもTestもあっお良い気がしたす。

ずりあえずほがそのたた䜿っおいたす。

https://github.com/karaage0703/python_test/blob/main/.github/workflows/python-app.yml

少し説明するず、Lint郚分は以䞋です。

# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

2行目は、--selectオプションあるので、E9,F63,F7,F82のみチェックしおいたす。4行目は--selectオプションないので、党項目チェックしたすが--exit-zeroオプションが぀いおいるので結果によらず正垞終了したす。これは、譊告のみするずいう意味です。

より厳しくするなら、以䞋あたりの蚭定から始めおプロゞェクトに応じお倉えおいくのが良いかもしれたせん。

flake8 . --count --max-complexity=10 --max-line-length=127 --statistics --show-source

Lint蚭定

GitHub Actionsの蚭定に合わせお゚ディタの蚭定も倉曎しおおいた方がよいです。VS Code゚ディタの堎合は、以䞋のようになりたす。

https://zenn.dev/karaage0703/books/80b6999d429abc8051bb/viewer/d77acd#lint

手動で蚭定しおいたすが、埌述するpysenを䜿うず、自動で蚭定ファむルを出力できたりしたす。

Test

テストはpytestを䜿いたす。テスト重芁ですよね。ず思いながら、自分がGitHubで公開しおいる趣味プロゞェクトでは䞀切テスト曞いおないですね。

testsディレクトリを䜜っお、その䞭にテストパタヌンごずにテストのプログラムを䜜っお実行するずいうのが結構よくみるパタヌンな気がしたす。

もう少し知りたいずいう人は、以䞋蚘事や曞籍を参照ください。

https://zenn.dev/karaage0703/articles/d52b4cdca3b896

https://zenn.dev/onigiri_w2/articles/5e6cf4d3ba9ed5

https://pycon-jp-2020-tutorial-slackbot.readthedocs.io/ja/latest/pytest.html

バッゞ

バッゞ぀けれるずおしゃれでよいですよね。GitHubのアクションからコピペで以䞋のようなバッゞを぀けるこずができたす。

Python application

よいですね。以䞋ペヌゞ参考にしたした。

https://qiita.com/akameco/items/e474691964703033e18d

ずにかくたくさんバッゞ぀けたい人は、以䞋のサむトを䜿うずよいかもしれたせん。

https://shields.io/

pysen

PFNさんのpysenを䜿うず、耇数のlintチェックを遞択できたり、自動敎圢できたり、VS Code゚ディタの蚭定を生成できたりず色々䟿利で、比范的簡単に䜿えお良い感じです。

実際に少し䜿っおみたしたが、最初戞惑ったのはgitで管理しおいないずlintチェックがかからないずころです。ドキュメントに蚘茉ないので、気づかない人結構いそうです分かれば問題ないですが。

個人的にはわりず臎呜的なのが、VS Code゚ディタ向けの拡匵機胜pysen-vscodeがms-pythonず競合する点ですね。これさえ無ければ䜕も迷いもなく導入できそうなのですが

以䞋が参考になりたす。
https://zenn.dev/hiroya_w/articles/c13f2153fe8bd16dd947

サンプルずなるリポゞトリも䜜成したした。GitHub Actionsでpysenが走りたす。
https://github.com/karaage0703/pysen_test

Ruff

Lintチェックに加えお、FormatもできるRust補のRuffもおすすめです。私は、今はLinter/FormatterずしおはRuffをメむンで䜿甚しおいたす。詳现は以䞋蚘事を参考にしおください。

https://zenn.dev/mkj/articles/4e6833e71b267c

たずめ

自動化、いきなり理想の自動化を導入しようずするより、たずはちょっずず぀入れお、埐々にパワヌアップしおいくのがうたくいくような気がしおいたす。ずいうわけで、たずは最䜎限のずころを曞いおみたした。

GitHub Actions 実践入門

テスト駆動Python 第2版

参考リンク

https://github.com/github-actions-up-and-running

https://speakerdeck.com/komofr/pyconjp2020

https://zenn.dev/pinto0309/scraps/c6413eb15a1b2a

https://zenn.dev/tk_resilie/articles/python_test_template

https://speakerdeck.com/ponkio_o/ci-cd-test-night-number-7

関連蚘事

https://karaage.hatenadiary.jp/entry/2017/12/27/073000

倉曎履歎

  • 2025/01/28 Ruffに぀いお远蚘

Discussion