travis-ci + pycodestyle で自動チェック
本記事は,DSL アドベントカレンダー 3日目の記事です.
内容としては travis-ci の機能を使ってレポジトリにpushする度にそのPythonコードがPEP8に則っているか自動でチェックしてやろうみたいなお話です.
以前このようなことをやろうとして日本語の記事が全然なかった印象があるので,今回書くことにしました.
pycodestyleの自動チェックであり,pushやmergeを自動的に拒否するわけではないことは注意してください.
travis-ciとは
さくらのナレッジ がわかりやすいです.
ざっくり抜粋すると,GitHubと連携した自動テスト実行サービスで以下のようなことが簡単に実行できます.
- 設定したGitHubリポジトリから自動でソースコードをチェックアウトしてあらかじめ指定しておいたビルドやテスト処理を実行する
- テスト結果をTravis CIのサイト上や各種API、メールなどで開発者に通知する
- テストが正常に完了して問題がなかった場合、あらかじめ指定しておいたホスティングサービスにソフトウェアをデプロイする
便利ですね.
pycodestyleとは
PEP8というPythonのコード規約があり,その規約にコードが則っているかどうかチェックしてくれるライブラリです.
詳しいPEP8やpycodestyleの出力結果についてのお話は他記事が参考になると思います.
使ってみる
導入手順
手順はtravis-ciのチュートリアルページにも載っています.
- Travis-ci.com にて GitHub連携でアカウント登録
- Activateボタンを押して,機能を使いたいレポジトリを登録
- レポジトリのrootに
.travis.yml
を置く. - リモートレポジトリにpush
- travis-ciで結果をチェック
簡単にまとめるとこんなところです.
.travis.yml
.travis.yml
の中身にどんな処理を行うかを記述します.
今回は python パッケージの pycodestyle でコードチェックを行いたいので以下のような感じ
language: python3
cache: pip
sudo: false
install:
- pip install pycodestyle
script:
- pycodestyle .
sample code
動作を確かめるために下記の簡単なコードでチェックしてみます.
print("hello",end="") # hello
print("world") # world
ちなみにこのコードでは,
1行目: 「,」の後にスペースが空いていない.
2行目: コメント文の「#」までにスペースが1つしか入っていない(正しくは2個).
がPEP8に則っていないのでここを自動で検出してほしい.
動作確認
修正前
諸々の設定を済ませ,githubにpushしてみます.
するとtravis-ciのlogで以下のようなログが出ていました.(一部抜粋)
$ pycodestyle .
./helloworld.py:1:14: E231 missing whitespace after ','
./helloworld.py:2:15: E261 at least two spaces before inline comment
The command "pycodestyle ." exited with 1.
store build cache
Done. Your build exited with 1.
pushした時点でpycodestyleのチェックが始まり,
引っかかると status code 1 で返してくれるので build faild となっているみたいです.
やはり2点がPEP8に則っていないと出ているようです.
修正します.
修正後
引っかかったところを修正して再びpush
print("hello", end="") # hello
print("world") # world
$ pycodestyle .
The command "pycodestyle ." exited with 0.
はい!綺麗なコードになったみたいです.
まとめ
travis-ciとpycodestyleを用いてPythonのcodeが更新される度に自動チェックが入るようになりました.
自動で修正したい場合はautopep8などのモジュールを使うとコード整備がより楽になるかもしれません.
一人で開発する際はコードの綺麗さなどあまり気にしないかもしれませんが,現実ではそうも言っていられないので気にするようにしておくといいと思います(ブーメラン).