Pythonの自動整形ツール yapf を使ってみました


*yapf とは

pythonのコードを自動整形してくれるツールです。
PEP8に準拠していて生産性が上がるとのことなので、実際に使って試してみました。

ちなみに私は普段intellijを使っているので、intellijのPluginsでyapfをインストールしてみたのですが、エラーになり整形できなかったのでターミナルから実行することにしました。


*環境

  • MacOS
  • Python 2.7.14
  • yapf 0.22.0


*参考



*インストール

pip install yapf を実行すると、バージョンが見つからない旨のエラーになったので、GitHubリポジトリからインストールしました。
$ pip install git+https://github.com/google/yapf

バージョンを確認します。
$ yapf --version
yapf 0.22.0


*yapfの使い方

整形結果が出力されます。
$ yapf test_fizzBuzz.py

整形結果で上書きされます。
$ yapf -i test_fizzBuzz.py

ベースのスタイルを–styleオプションで変更します。
pep8、またはgoogleを設定できます。
$ yapf --style-help --style=pep8 | grep "column_limit"

column_limitで最大文字数を変更します。
$ yapf --style-help --style='{based_on_style: google, column_limit: 120}' | grep column_limit

<整形前>
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pytest


from FizzBuzz import fizzbuzz


class TestFizzBuzz(object):
    @pytest.mark.parametrize("num, expected", 
            [(1, "1"), (2, "2"),
                                (3, "Fizz")])
    def test_fizzbuzz(self, num, expected):
        
        
        assert expected == fizzbuzz(num)


if    __name__ == '__main__':
    pytest.main()

<整形後>
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pytest

from FizzBuzz import fizzbuzz


class TestFizzBuzz(object):
    @pytest.mark.parametrize("num, expected", [(1, "1"), (2, "2"),
                                               (3, "Fizz")])
    def test_fizzbuzz(self, num, expected):

        assert expected == fizzbuzz(num)


if __name__ == '__main__':
    pytest.main()

*所感

私が普段使っているIntelliJでも自動でインデントを整形してくれますが、チーム開発では他エディタでコードを書いている人もいるので、そういったときでも標準化できる自動整形ツールは魅力的だと感じました。
ターミナルで実行するのは面倒なので、IntelliJのPluginsでやれる方法がわかったらIntelliJでやりたい気持ちです。
今後も便利なツールは積極的に使って生産効率をあげていきたいです。

Previous
Next Post »

人気の投稿