3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python(Flask)のプロジェクトで途中からLinterを導入しようとした話

Last updated at Posted at 2019-12-11

話題

  • 参画しているプロジェクトのバックエンド(Flask)のコードがLinterやformatterが導入されておらず苦労した(なお継続中)話

希望

  • Githookでlint&formatしたくね??????

問題

  • プロジェクト初期に書かれたコードがpep8ガン無視でlint導入したらエラー出まくる
  • 一気にautofixかけたいけど、差分が出過ぎてレビューができない。
  • 全量リファクタもしたいが工数もないし、テストコードも十分じゃなさそう

妥協

  • 新規作成するコードはLint&formatかける。
  • 既存コードは一旦そのまま
  • 既存コードのテストコードを見直し、追加実装していつでもリファクタできるようにしておく
  • hookでLintはかける。formatはにんげんが判断してかける(苦肉の策)。
  • 既存はgit commit --no-verifyで無理矢理コミットする

開発方法

新規の場合

  1. コーディングする
  2. コミット時にLintが走る
  3. formaterをかける black hogehoge.py
  4. 手で直さなきゃならないとこはエラーがなくなるまで修正してコミット(ファイル指定でlintflake8 hogehoge.py)
  5. pushしてプルリクレビューへ

既存コードに手に入れる場合

  1. コーディングする
  2. コミット時にLintが走る
  3. エラーがあれば、black hogehoge.py --diffで追記部分のエラーを確認して手で直す。(ファイル指定でlintflake8 hogehoge.py)
  4. コミットするときはgit commit --no-verifyでhookを飛ばす
  5. pushしてプルリクレビューへ

Linterの設定

linterはflake8を利用する。

  1. pip install flake8
  2. 設定ファイルを作成(プロジェクトルートに.flake8を作る)
.flake8
[flake8]
ignore = E203, E266, E501, W503, F403, F401
max-line-length = 79
max-complexity = 18
select = B,C,E,F,W,T4,B9

※flake8の設定は適宜変えること

  • 正直現代でmax-line-length<80は少なすぎ
  • igonoreはblackとの関係でE203,W503,W504は必須。それ以外は適宜
  • ここ見て

formatterの設定

formatterはblackを使う

  1. pip install black
  2. 設定ファイルを作成(プロジェクトルートにpyproject.tomlを作る)
pyproject.toml
[tool.black]
line-length = 79
include = '\.pyi?$'
exclude = '''
/(
    \.git
)
'''

flake8と合わせること

  • たまにformaterかけたのにエラーになるときあってびっくりする

githookの設定

hookの設定にはpre-commit使います。

  1. pip install pre-commit
  2. 設定ファイルの作成(プロジェクトルートに.pre-commit-config.yamlを設置)
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.4.0
hooks:
- id: flake8

まとめ

  • ツールの導入期間なこともあっていびつで手作業が含まれてしまってる。ちょっとずつ変えていく
  • linterやformaterは最初に入れる。ルールも最低限のもの(pep8)入れるべき
  • 書きづらいなと思った段階でルールを変えていく
  • テストコードがちゃんとしてれば既存いじっても基本は問題ない
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?