1. ホーム
  2. スクリプト・コラム
  3. パイソン

Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します

2022-01-02 08:42:13

データサイエンスにおいてプログラミングは必須のスキルです。基本的な機能を実行するスクリプトを作成するのは簡単ですが、大量の読みやすいコードを書くには、より多くの思考が必要です。

PEP-8について

pycodestyle インスペクタは、PEP-8 スタイル規約に基づいたコード提案を提供します。では、PEP-8 とは一体何なのでしょうか?

PEPはPython Enhancement Recommendationの略で、PEP-8はPythonのコードを書くためのベストプラクティスの概要を示したガイドです。その主な目的は、コードスタイルを標準化することによって、コードの全体的な一貫性と可読性を向上させることです。

目的

PEP-8のドキュメントをざっと見たところ、ベストプラクティスが多すぎて覚えきれないことがわかります。

また、せっかく多くのコードを書いたのに、スクリプトの可読性を手作業でチェックするために時間を浪費したくないのは確かです。

そこで、pycodestyleが自動的にPythonスクリプトを解析し、コードの改善点を指摘します。

インストール方法

pipは好ましいインストーラーで、ターミナルで次のコマンドを実行することでpycodestyleをインストールまたはアップグレードすることができます。

final Handler myHandler = new Handler(MainActivity.this.getMainLooper()){
 
@Override
public void handleMessage(Message msg) {
 
super.handleMessage(msg);
if (msg.what == 0x123){
 
// there's a problem here (initially estimated to be an inter-thread problem)
Toast toast = Toast.makeText(MainActivity.this, "Have a nice trip! ", Toast.LENGTH_LONG);
toast.show();
}
}
};

基本的な使い方

最も簡単な使い方は、Pythonスクリプト(.pyファイル)上でターミナル上のコマンドとしてpycodestyleを実行することです。

以下のサンプルスクリプト(pycodestyle_sample_script.pyという名前)をデモに使ってみましょう。

final Handler myHandler = new Handler(MainActivity.this.getMainLooper()){
 
@Override
public void handleMessage(Message msg) {
 
super.handleMessage(msg);
if (msg.what == 0x123){
 
// there's a problem here (initially estimated to be an inter-thread problem)
Toast toast = Toast.makeText(MainActivity.this, "Have a nice trip! ", Toast.LENGTH_LONG);
toast.show();
}
}
};
 
//Send an empty message
myHandler.sendEmptyMessage(0x123);

以下の簡単なコマンドを実行することで、pycodestyleを実装します。

pycodestyle pycodestyle_sample_script.py


PEP-8スタイル規約に違反するコードの場所を指定する出力。

各行のコロンで区切られた一組の数字(例:3:19)は、それぞれ行番号と単語記号を示す。

例えば、6:64 E202 space before ")" と出力すると、6行目の64文字目のマーカーに予期せぬスペースがあることを意味します。

また、統計パラメータを解析することで、エラーの発生頻度を確認することができます。

pycodestyle --statistics -qq pycodestyle_sample_script.py


上の出力では、右括弧 ")" の前に予期せぬ4つの空白があります。

高度な使用法

Pythonのコードに直接pycodestyleをインポートして自動テストを実行することも可能です。これは、コーディングスタイルの一貫性について、複数のスクリプトを自動的にテストするのに便利です。

例えば、以下のようなクラスを書くと、PEP-8 の規約に準拠しているかどうかを自動的にチェックすることができます。

import unittest
import pycodestyle
class TestCodeFormat(unittest.TestCase):
    def test_conformance(self):
        """Test that the scripts conform to PEP-8."""
        style = pycodestyle.StyleGuide(quiet=True)
        result = style.check_files(['file1.py', 'file2.py'])
        self.assertEqual(result.total_errors, 0, "Found style  
        errors")


また、このツールは、私たちが定義したスタイルルールのプリファレンスに対してテストを行うように設定することができます。例えば、チェックで検出されたくない特定のエラーを削除することができます。

style = pycodestyle.StyleGuide(ignore=['E201', 'E202', 'E501'])


また、pycodestyleに対して、(特定のスタイルルールのセットを含む)異なるプロファイルを一緒に使用するように指示することもできます。

import pycodestyle
style = pycodestyle.StyleGuide(config_file='/path/to/tox.ini')


機能についてもっと詳しく知りたい場合は、pycodestyleのドキュメントをご覧ください。

https://pycodestyle.pycqa.org/en/latest/intro.html

まとめ

コードは書くよりも読まれる頻度が高く、コードの一貫性、理解しやすさ、構造の整頓が重要です。この記事では、PythonスクリプトがPEP-8コードスタイル仕様に準拠しているかどうかをチェックするためにpycodestyleツールを使用する方法を調べました。

これを使いこなすことで、コード品質を飛躍的に向上させることができると考えています。

Pythonコードの可読性を向上させる強力なツールであるpycodestyleの使用方法を詳しく説明します。