github actions を使って django のコーディングスタイルをチェックしたのでメモ

2022年5月3日

github actions で push した時に flake8 を実行して、コーディングスタイルも CI の対象にしてみます。

階層

階層は下のとおりです。
今回関係してくるのは github actions の設定ファイル django.yml と flake8 の設定ファイル setup.cfg だけです。

.
|-- .github
|   `-- workflows
|       `-- django.yml # 追加
|-- backend
|   |-- app
|   |   `-- ...
|   |-- manage.py
|   |-- config
|   |   `-- local.py
|   `-- ... setup.cfg # 作成
|-- docker-compose.yml
|-- dockerfile
|-- frontend
`-- requirements.txt

django.yml の設定

github actions の設定ファイル django.yml の steps に下記を加えます。

steps:
  ...
  # Flake8
  - name: Lint with flake8
    run: |
      docker exec container_name /bin/bash -c 'cd ./backend && flake8'

コンテナを使用しているので docker exec ... としていますが、flake8 でコーディングスタイルチェックコマンドを実行しているだけです。
cd して flake8 の設定ファイル setup.cfg を読み込めるようにしています。

setup.cfg の設定

下記の通りに setup.cfg ファイルを作成して flake8 をカスタマイズします。
カスタマイズしない場合はファイル自体必要ありません。

[flake8]
exclude = *migrations*
max-line-length = 119
per-file-ignores=
    ./config/settings/local.py:F401 F403
    ./config/settings/production.py:F401 F403
  • exclude = migrations
    • マイグレーションファイルを flake8 の対象から外しています。
  • max-line-length = 119
    • 一行のコード文字数を 119文字にしています。※
  • per-file-ignores=
    • 特定のファイルのコーディング規約を無視する設定をしています。
      • F401 '.base.*' imported but unused
      • F403 'from .base import *' used; unable to detect undefined names

※ PEP 8では1行当たりに79文字という規約が設定されていますが、Djangoのコーディングスタイルには「1行あたり119文字」まで許容すると書いてあります。

拡張機能

VsCode の cornflakes-linter と言う拡張機能を入れる事で、規約から外れているコードに対して、破線を引いて教えてくれます。

2022年5月3日