皆さん
こんにちは、GMOアドマーケティングのS.Rです。
プログラミング言語としてPythonは勉強のハードルが低く、利用できるツールとLibrary が豊富です。近年Pythonを主なプログラミング言語として開発の業務を行っているエンジニアの数がどんどん増えています。
コードのメンテナンス性と安定性を上げる為に、Pythonのプログラムを書くにはPythonの公式コーディングスタイルを統一することがお勧めです。
今回の記事はMAC OSでよく使われるPythonのプログラムのコーディングスタイルをチェックするツールのPylintを皆さんへ紹介します。今回例として使用したOSのバージョンはMAC OS Mojave 10.14.4ですが、今後のMAC OSのアップデートで動作しない可能性があるのでご注意ください。
1 Pylintとは
Pylintは、Pythonのコーディングスタイルをチェックするオープンソースのツールの1つです。他のツールと比べるとPylintは下記のメリットがあります:
- チュックできる項目が多い
- コーディング規約のチェックやエラーの検出、重複したコードの抽出などの多くのオプションの提供
- Python2とPython3共にサポート
- オープンソースのツールなので無料で使える
- 一般的に使われているOS(Linux, Mac, Windows)で利用可能
2 Pylintをインストールする
2.1 Python2の方:
1 PIPをインストールします。
1 2 3 |
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.pyrm get-pip.py |
2 Pylintをインストールします。
1 |
pip install pylint |
2.2 Python3の方:
1 Pipをインストールします。
1 2 3 4 5 6 |
curl -O https://bootstrap.pypa.io/ez_setup.py python3 ez_setup.py curl -O https://bootstrap.pypa.io/get-pip.py python3 get-pip.py rm ez_setup.py rm get-pip.py |
2 Pipをインストールします。
1 |
pip3 install pylint |
3 Pylintを運用する例:
Pylintを利用して下記の例のコーディングスタイルをチェックしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def alpha_rotate(n): s = "abcdefghijklmnopqrstuvwxyz" ret = s[n:] + s[:n] return ret def encrypt(source,n): alpha = "abcdefghijklmnopqrstuvwxyz" code = alpha_rotate(n) newlets = [code[alpha.index(ch)] for ch in source] return ''.join(newlets) if __name__ == '__main__': s = "freud" print ad s = "asdbcddsdasdadfefsfsfdsdfsghijklmnopqrstuvwxyz" us = encrypt(s,23) print us |
3.1 Python2の方:
下記のコマンドでmian.pyをチェックします。実行した結果は図1です。
1 |
pylint main.py |

Pylintでチェックした結果からmain.pyはコーディングスタイルの問題が13個、エラーが2個があります。チェックした結果の通りmian.pyを修正しましょう。修正した結果は下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
""" Sample for pylint. """ def rotate_alpha(num): """ Samole function for pylint. """ tar_str = "asdbcddsdasdadfefsfsfdsdfsghijklmnopqrstuvwxyz" ret = tar_str[num:] + tar_str[:num] return ret def encrypt(source, num): """ Samole function for pylint. """ alpha = "abcdefghijklmnopqrstuvwxyz" code = rotate_alpha(num) newlets = [code[alpha.index(character)] for character in source] return ''.join(newlets) if __name__ == '__main__': STR_FOR_PRINT = "freud" STR_FOR_ENCRYPT = "asdbcddsdasdadfefsfsfdsdfsghijklmnopqrstuvwxyz" print STR_FOR_PRINT print encrypt(STR_FOR_ENCRYPT, 23) |
修正したコードをもう一回チェックしましょう。結果は図2です。

3.2 Python3の方:
Python3でPylintを使うコマンドは下記です。
1 |
pylint3 main.py |
Pylin3で先修正したコードをチェックしましょう。チェックした結果は図3です。

先にPylint2で満点を取ってたMain.pyエラーが出てきました。このエラーの原因はPython2とPython3でPrint(Python2: print xxx, python3 print(xxx))の書き方が違うためです。修正してもう一度やり直しましょう。
修正したコードは下記です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
""" Sample for pylint. """ def rotate_alpha(num): """ Samole function for pylint. """ tar_str = "asdbcddsdasdadfefsfsfdsdfsghijklmnopqrstuvwxyz" ret = tar_str[num:] + tar_str[:num] return ret def encrypt(source, num): """ Samole function for pylint. """ alpha = "abcdefghijklmnopqrstuvwxyz" code = rotate_alpha(num) newlets = [code[alpha.index(character)] for character in source] return ''.join(newlets) if __name__ == '__main__': STR_FOR_PRINT = "freud" STR_FOR_ENCRYPT = "asdbcddsdasdadfefsfsfdsdfsghijklmnopqrstuvwxyz" print(STR_FOR_PRINT) print(encrypt(STR_FOR_ENCRYPT, 23)) |
修正してもう一度チェックした結果は下記です。

まとめ
今回はMAC OSでPythonのコーディングスタイルをチェックするツールPylintを紹介しました。いかがだったでしょうか。Pythonのプログラムを開発する時にコーディングスタイルはとても重要なことだと思います。機会があれば皆さんぜひ試してみてください。
