GitHub ActionsでPythonのLintとTest(テスト)をとりあえず実行
自動化の第一歩
ずっとやろうと思いつつ、なかなかできないLintやTestの自動化。VS Codeエディタで設定すれば検出してくれますが、うっかり忘れたりチームで開発していると、人によって設定が違ってうぎゃーってなったり、よくありますよね。
そんなときは、GitHub Actions使えば、PR(Pull Request)するたびに、LintチェックやTestを自動でやってくれたりします。
この記事ではPythonでLintとかTestをとりあえず最短で導入する方法の覚書です。GitHub Actions、テストに関してはここでは詳しく説明しませんので、以下の書籍やWeb情報を参照ください。
とりあえず試験的に作ったリポジトリです。
GitHub Actionsの設定
GitHubのActionsというところからNew workflowをクリックしましょう。
そこで出てくる、Python applicationというやつが、LintもTestもあって良い気がします。
とりあえずほぼそのまま使っています。
少し説明すると、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エディタの場合は、以下のようになります。
手動で設定していますが、後述するpysenを使うと、自動で設定ファイルを出力できたりします。
Test
テストはpytestを使います。テスト重要ですよね。と思いながら、自分がGitHubで公開している趣味プロジェクトでは一切テスト書いてないですね。
tests
ディレクトリを作って、その中にテストパターンごとにテストのプログラムを作って実行するというのが結構よくみるパターンな気がします。
もう少し知りたいという人は、以下記事や書籍を参照ください。
バッジ
バッジつけれるとおしゃれでよいですよね。GitHubのアクションからコピペで以下のようなバッジをつけることができます。
よいですね。以下ページ参考にしました。
とにかくたくさんバッジつけたい人は、以下のサイトを使うとよいかもしれません。
pysen
PFNさんのpysenを使うと、複数のlintチェックを選択できたり、自動整形できたり、VS Codeエディタの設定を生成できたりと色々便利で、比較的簡単に使えて良い感じです。
実際に少し使ってみましたが、最初戸惑ったのはgitで管理していないとlintチェックがかからないところです。ドキュメントに記載ないので、気づかない人結構いそうです(分かれば問題ないですが)。
個人的にはわりと致命的なのが、VS Codeエディタ向けの拡張機能pysen-vscode
がms-python
と競合する点ですね。これさえ無ければ何も迷いもなく導入できそうなのですが
以下が参考になります。
サンプルとなるリポジトリも作成しました。GitHub Actionsでpysenが走ります。
まとめ
自動化、いきなり理想の自動化を導入しようとするより、まずはちょっとずつ入れて、徐々にパワーアップしていくのがうまくいくような気がしています。というわけで、まずは最低限のところを書いてみました。
参考リンク
関連記事
Discussion