delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

Pythonの代表的なコードチェッカー・フォーマッターの基本的な使い方

コードチェッカー

flake8

コードがPEP8に従っているかどうかをチェックしてくれる。
PEP8に従っていない箇所を指摘してくれるだけで、フォーマットはしない。

コマンドラインからの使い方

・インストール方法

$ pip install flake8


・実行方法(ファイル単位)

$ flake8 target_file.py


・実行方法(ディレクトリ配下全て)

$ flake8 target_dir


・実行例(規約違反が存在する場合)

 $ flake8 views.py
views.py:1:1: F401 'django.http.HttpResponse' imported but unused
views.py:46:80: E501 line too long (83 > 79 characters)
views.py:54:80: E501 line too long (82 > 79 characters)


・実行例(パスした場合)

$ flake8 views.py
$

フォーマッター

black

Pythonのフォーマッターで検索するとこれが一番よく見かける。
他のフォーマッターよりも規約が厳しいらしい。

コマンドラインからの使い方

・インストール方法

$ pip install black


・実行方法(ファイル単位)

$ black target_file.py


・実行方法(ディレクトリ配下全て)

$ black target_dir


・実行例(フォーマットが行われた場合)

$ black views.py
reformatted views.py
All done! ✨ 🍰 ✨
1 file reformatted.
$


・実行例(フォーマットが必要な箇所が存在しなかった場合)

$ black views.py
All done! ✨ 🍰 ✨
1 file left unchanged.
$


・フォーマット内容
例えば以下のようにフォーマットされる。(右がフォーマット後)

f:id:kamatimaru:20200426165906p:plain

[変更点]
・関数宣言の上の改行が1行から2行に変更されている。
・1行が長い場合に複数行に分割されている。
・インデントの半角スペース8個が半角スペース4個に変更されている。
・文字列のクォーテーションがシングルからダブルに変更されている。

yapf

Google製のPythonのフォーマッター

コマンドラインからの使い方

・インストール方法

$ pip install yapf


・実行方法(ファイル単位)

$ yapf -i -vv target_file.py

・-iをつけない場合、フォーマット結果をコンソールに出力するだけでファイルは変更しない。
・--vvをつけないと処理状況が一切コンソールに出力されない。


・実行方法(ディレクトリ配下全て)

$ yapf -i -r --vv target_dir


・実行例(フォーマットが行われた場合も行われなかった場合も同じ出力)

$ yapf -i -vv views.py
Reformatting views.py
$


・フォーマット内容
例えば以下のようにフォーマットされる。(右がフォーマット後)

f:id:kamatimaru:20200426175310p:plain

[変更点]
・関数宣言の上の改行が1行から2行に変更されている。
・1行が長い場合に複数行に分割されている。
・インデントの半角スペース8個が半角スペース4個に変更されている。

autopep8

これも検索するとよく見かける。

コマンドラインからの使い方

・インストール方法

$ pip install autopep8


・実行方法(ファイル単位)

$ autopep8 -i -a -a -v target_file.py

・iをつけない場合、フォーマット結果をコンソールに出力するだけでファイルは変更しない。
・-aを2個つけているのは変更のアグレッシブレベル2という意味。アグレッシブレベルの仕様は調べていないが、公式ドキュメントの実行例では2個つけていたので、従っている。
・-vをつけないと処理状況が一切コンソールに出力されない。


・実行方法(ディレクトリ配下全て)

$ autopep8 -i -a -a -r -v target_dir


・実行例(フォーマットが行われた場合)

$ autopep8 -i -a -a -v views.py
[file:views.py]
--->  Applying global fix for E265
--->  Applying global fix for E231
--->  Applying global fix for E721
--->  Applying global fix for W601
--->  Applying global fix for W603
--->  Applying global fix for W604
--->  Applying global fix for W690
--->  5 issue(s) to fix {'E302': {10, 27, 6, 14}, 'E501': {7}}
--->  1 issue(s) to fix {'E122': {9}}
--->  0 issue(s) to fix {}
$


・実行例(フォーマットが必要な箇所が存在しなかった場合)

$ autopep8 -i -a -a -v views.py
[file:views.py]
--->  Applying global fix for E265
--->  Applying global fix for E231
--->  Applying global fix for E721
--->  Applying global fix for W601
--->  Applying global fix for W603
--->  Applying global fix for W604
--->  Applying global fix for W690
--->  0 issue(s) to fix {}
$


・フォーマット内容
例えば以下のようにフォーマットされる。(右がフォーマット後)

f:id:kamatimaru:20200426185445p:plain

[変更点]
・関数宣言の上の改行が1行から2行に変更されている。
・1行が長い場合に複数行に分割されている。
・インデントの半角スペース8個が半角スペース4個に変更されている。