Blog Entry  (Oct. 23, 2015, 8:55 a.m.)

Tilo Mitra's avatar

Pythonのコードをコミットする前に必ず実行したい自動整形ツール

おそらく、まともなプロジェクトであればコードのフォーマットについて規約を設けているところがほとんどだと思います。Pull Requestの際にロジックではなくコードフォーマットについて指摘するのは、レビューする側にとってもされる側にとっても非生産的です。できる限りコミット前に自動的に整形するツールを利用したいです。

選択肢

Python の Lint (文法チェッカ) まとめ - flake8 + hacking を使う -

ここにまとまっていました。

コミット前に実行したいツール

準備

上記の選択肢から、isortとpyformatの二つを入れるのが良さそうです。

pip install isort
pip install pyformat

実装例

僕の普段使っているエディタはPEP8に準拠しているかをチェックしてくれますが、自動的に整形してくれる方が便利です。例えば現在のディレクトリの.pyファイルをすべて整形するスクリプトを書いてみます。

~/Scripts/fmt_python.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import commands
import os


def ls():
    return commands.getoutput('find $PWD/* -type f -print | grep py').split('\n')


def get_python_files():
    return [path for path in ls() if os.path.splitext(path)[-1] == '.py']


def main():
    for path in get_python_files():
        commands.getoutput('pyformat -i %s' % path)
        commands.getoutput('isort %s' % path)
        print path


if __name__ == '__main__':
    main()

https://gist.github.com/itkr/fd789d30f98967d892f0

aliasを登録

さらに、aliasを登録しておくと便利です

~/.bashrc
alias fmt_python='~/.pyenv/versions/script/bin/python ~/Scripts/fmt_python.py'

おわりに

先ほどのリンクにも書かれている通り、こういうのはCIツールと組み合わせたいですね。

元の記事へ