Pythonでインデントをスペース2つにした際の周辺ツールの設定
Pythonでインデントをスペース2つにした際のflake8
1とautopep8
2の設定方法について書きます。
なぜPythonでインデントをスペース2つにするのか
Pythonのコーディング規約(PEP 8)ではインデントについて以下のように言及されています。
Use 4 spaces per indentation level.
しかし、最近の傾向としてインデントはスペース2つであることが多くなってきています。
例えば、Google Java StyleやGoogle JavaScript Style Guideなどが挙げられます。また同じオフサイドルールを採用するCoffeeScriptでのコーディング規約でもスペース2つを採用する事例もあります。実際、スペースを4から2にすることによって、一行あたりに書けるコードも増え、結果的にコードをコンパクトにすることができます。
また、基本的に外部に公開することを想定していないプロジェクトの場合、上記のメリットを考慮し、インデントをスペース2つ分にすることも妥当だと思います。
インデントをスペース2つにすることで生じる問題
PythonのLinterやFormatterは基本的にPEP 8に準拠しているので、設定を変更しなければならないという問題とそれに付随する問題が発生します。例えばflake8
を使用する場合、インデントについての検証を無視するように設定しなければならず、それ単体ではインデントがスペース2つ分であることが保証できません。
flake8の設定
インデント幅はスペース2つ分なので、このままではpep8のE111, E114(インデント幅はスペース4つ分でなければならない)を遵守することが出来ません。したがってflake8
を各ルールごとに無視するか否かを設定することにします。
設定の方法としては、プロジェクトのルートディレクトリまで移動し、以下の内容をsetup.cfg
として置くだけです。
[flake8]
ignore = E111, E114
autopep8の設定
指定したルールを無視することは出来ましたが、このままでは書いたコードがインデント幅スペース2つ分になっていることを保証できません。この問題を解決するためにautopep8
を用います。flake8
ではインデント幅の指定はできませんが、autopep8
であれば--indent-size
オプションでインデント幅を設定できます。gulp-watchや watchdog、guard などでファイルの編集を監視しコードを編集すると同時にautopep8
が走るようにしておけば、常にインデントが2の状態を維持できます。
まとめ
flake8やautopep8はPEP 8を守らせるツールです。しかし、設定を行うことによって、PEP 8の仕様を無視し、スペース2つ分のインデント幅のソースファイルでも利用できます。