猫も杓子も構造化

発達障害、特別支援などについて書いています。最近は心理学関係の内容が多めです。

pep8とflake8の導入について

pep8というものがある。自閉症療育に関心がある方なら、TEACCHプログラムの開発したPEP-3(自閉症発達障害児教育診断検査第3版)というのが思い浮かぶかもしれないが全くもって関係ない。

pep8とは、Pythonでコードを書くときのスタイルガイドである。これに準拠しなかったらプログラムが動かなくなる訳ではないが、一貫したスタイルのコードを書くことで可読性をあげようとかそんな話だと思う。

pep8の日本語訳された文章は以下から読める。

はじめに — pep8-ja 1.0 ドキュメント

自分が書いたコードがこのスタイルに準拠しているか調べるための文法チェッカーというものもある。便利な世の中である。

いくつかあるうちでflake8というものが有名らしいので試しに使ってみる。

導入はpipが入っていれば簡単で、ターミナル上で以下のコマンドでインストールされる。

$ pip install flake8

使い方もまた簡単で、以下のように引数にファイル名を指定してやれば良い。

$ flake8 test.py

例えば、次のようなコードをチェックするとする。

a = [0,1,3  ]

print("Hello World!") #ハロワ

するとこんな感じで、スタイルに沿っていないところを指摘してくれる。

test.py:1:7: E231 missing whitespace after ','
test.py:1:9: E231 missing whitespace after ','
test.py:1:12: E202 whitespace before ']'
test.py:3:22: E261 at least two spaces before inline comment
test.py:3:23: E262 inline comment should start with '# '

何行目・何文字目に、どんな違反なのかが書いてある。エラーコードの頭にあるアルファベットは何についての違反かを示しており、Eはpep8のスタイルに準拠していないことを示している。

例えば、1行目の7文字目のところでは、「カンマの後に空白が入ってないよ」と教えてくれている訳だ。

Error / Violation Codes — flake8 3.4.1 documentation
Introduction — pycodestyle 2.3.1 documentation

このエラーメッセージを元にさっきのコードを修正すると次のようになる。

a = [0, 1, 3]

print("Hello World!")  # ハロワ


これで、pep8に準拠したリーダブルなコードになった訳だ。

このflake8はAtom上で動くパッケージも出ており、linter-flake8という名前である。

GitHub - AtomLinter/linter-flake8: Linting Python files on the fly using flake8 with Atom

特に難しいこともなく、上記のREADMEに従ってinstallするとAtomでコードを書きながらリアルタイムで指摘してくれるようになった。

f:id:nekomosyakushimo:20170905230510p:plain


どうせ書くなら読みやすく美しいコードを、ということでflake8の導入の話でした。