目的
この記事では、Python開発向けのVim設定とコードチェックの手順について説明する。
実施内容
Vimの共通設定
-
ホームディレクトリに
.vimrc
ファイルを作成
.vimrc
に設定を追記することでVim に反映される。
touch ~/.vimrc
-
Pythonを使う上で最低限必要な自動インデントとシンタックスハイライトのみ設定
$ vim ~/.vimrc filetype plugin indenton # 自動インデントの設定 syntax on # シンタックスハイライトの設定
Python用のVim設定
-
ホームディレクトリに
.vim/ftplugin/python.vim
ファイルを作成
設定ファイルをファイルタイプ別に分割できるため、Pythonスクリプト専用の設定を定義することができる。$ mkdir ~/.vim $ mkdir ~/.vim/ftplugin $ touch ~/.vim/ftplugin/python.vim
-
Vimの設定を追記
下記は、Pythonコミュニティが推奨するPEP8 ※1, 2:コーディング規約に準拠した設定となる。
※1 PEP8(en):https://www.python.org/dev/peps/pep-0008/
※2 PEP8(ja):https://github.com/mumumu/pep8-ja$ vim ~/.vim/ftplugin/python.vim setlocal expandtab # タブをスペースに置き換える設定 setlocal tabstop=4 # タブのインデント幅を4に設定 setlocal shiftwidth=4 # 自動インデント時の幅を4に設定 setlocal softtabstop=0 # キーボードから入るタブの数 autocmd BufWritePre * :%s/\s\+$//ge # 保存時、行末スペースを除去する setlocal textwidth=80 # 行折り返しを80文字に設定
コードチェックツールのインストール
- flake8のインストール
Pythonで多く使用されているコードチェックツールflake8をインストールする。
下記、pip show flake8
のRequires(依存ライブラリ)にもある通り、flake8は、pyflakes、pycodestyle、mccabe 3つライブラリをラップしているため、それぞれ個別のチェックも可能。
$ pip install flake8 $ pip show flake8 Name: flake8 Version: 3.6.0 Summary: the modular source code checker: pep8, pyflakes and co Home-page: https://gitlab.com/pycqa/flake8 Author: Tarek Ziade Author-email: tarek@ziade.org License: MIT Location: /var/www/vops/lib/python3.6/site-packages Requires: pycodestyle, setuptools, pyflakes, mccabe
コードチェックの一例
以下、flake8、pyflakes、pycodestyle、mccabeの一例。
-
flake8 : コードチェック
$ flake8 example.py example.py:11:1: E302 expected 2 blank lines, found 1 example.py:12:21: W291 trailing whitespace …
-
pyflakes : コードチェック
$ pyflakes example.py example.py:74: undefined name 'Http404' …
-
pycodestyle : PEP8に準拠しているかチェック
$ pycodestyle example.py example.py:10:1: W293 blank line contains whitespace example.py:11:1: E302 expected 2 blank lines, found 1 example.py:12:21: W291 trailing whitespace …
-
mccabe : 循環的複雑度のチェック
flake8ではデフォルト無効になっているため、下記のように--max-complexity
を指定すれば循環的複雑度のチェックが可能となる。
※ 参考URLより抜粋 : https://github.com/pycqa/mccabe#plugin-for-flake8
$ flake8 --max-complexity 10 coolproject ... coolproject/mod.py:1204:1: C901 'CoolFactory.prepare' is too complex (14)
その他、flake8には、flake8-docstringsやflake8-import-orderなど色々なプラグインが用意されており、必要に応じてカスタマイズすることができる。