SIGMA-SE Tech Blog

SIGMA-SE Tech Blog

Python - 開発向けVim設定 : 基礎からコードチェックまで

目的

この記事では、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
    

コードチェックの一例

以下、flake8pyflakespycodestylemccabeの一例。

  • 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-docstringsflake8-import-orderなど色々なプラグインが用意されており、必要に応じてカスタマイズすることができる。


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp