EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

GitHubで管理するコードの質を高めるために取り入れた各種クラウドサービスのまとめ

目次

背景・目的

こちらのOSSプロジェクトを始めるにあたり、
コードの品質を高めるために良く使われている
各種クラウドサービスをいろいろ調べ、

github.com

とりあえず、コードレビューや自動テスト、
カバレッジ計測といった必要最低限の事が
一通り出来るようになりました。

f:id:sy4310:20200411113405p:plain

今回は、取り入れた各サービスの特徴や、使える
ようにするまでにハマった事について紹介します。

CodeFactor

前回こちらの記事で紹介した、自動コードレビュー
のクラウドサービスです。

www.eureka-moments-blog.com

他のサービスと比べてみて良いと思う点は、サポート
している言語の種類が多い事だと思います。特に
複雑な設定も必要なく、GitHubのリポジトリと連携
するだけで、すぐに使えるようになります。

LGTM

コードレビューだけでなく、コードの脆弱性と
いったセキュリティチェックも合わせて実行
してくれるサービスです。

lgtm.com

サポートしている言語はC/C++, C#, Go, Python,
Java, JavaScriptとなっており、前述した
CodeFactorと比べると少なめです。

使い始める前の準備として、こちらのような
.lgtm.ymlという設定ファイルを書いて、
同リポジトリに置いておく必要があります。

github.com

そして、GitHubリポジトリへのプッシュが
行われると、それをトリガーにコード解析が
実行され、何かアラートがないかチェック
してくれます。

f:id:sy4310:20200411125228p:plain

このサービスで面白いのは、自分のコードの
Qualityを評価して、それを他のOSSコードの
評価と比較してくれるところです。

f:id:sy4310:20200411125512p:plain

横軸が全コードの行数、縦軸がQuality Scoreで、
右上に行くほど質の高いコードという事のよう
です。
自分のプロジェクトは赤丸のところですが、
まだ始まったばかりで小規模なのでこんな
ものでしょう。
これから上を目指していきます。

Travis CI

GitHubリポジトリへのプッシュをトリガーに
予め用意したテストコードに従って自動テスト
を行ってくれるサービスです。

travis-ci.org

こちらのような.travis.ymlという設定ファイルを
作成して、事前に同リポジトリに置いておく
必要があります。

github.com

Travis CIはクラウド上でLinuxの仮想マシンを
起動させ、そこにGitHubから自分のコードが
クローンされる事でテストが実行されます。

そのため、例えばPythonのコードであれば、
Python及び必要なライブラリを一通り
インストールさせなければならないので、
そういった一連の処理を.travis.ymlに記述
します。

f:id:sy4310:20200411144228p:plain

テストの実行結果はこちらのようにログと
して残っていきますが、テストが失敗した、
あるいはテスト開始前のVM起動中にエラー
が起きた場合はfailedになります。
このようにテストがfailした時、そして
それが次のテストによってfixedされた際は
予め設定したメールアドレスに通知が
来るようになります。

f:id:sy4310:20200411145725p:plain

Coveralls

Coverallsは、前述したTravis CIのような
自動テストサービスと連携して、そのテスト
によって全ソースコード行のどれだけが
カバーされているかを計測して記録して
くれるサービスです。

coveralls.io

まずは、実行されたテストによる全体の
カバレッジ、

f:id:sy4310:20200411151242p:plain

そして、実行された各コードの個別の
カバレッジ、テスト毎のカバレッジ
履歴が記録されます。

f:id:sy4310:20200411151520p:plain

赤丸のソースファイル名をクリックすれば、
そのコード内のどの部分がカバレッジとして
カウントされているかが分かります。

f:id:sy4310:20200411151754p:plain

Travis CIでのテストとCoverallsを連携
するためには、前述した.travis.ymlの
中でcoverallsというPythonライブラリ
インストールするように記述しておく
必要があります。

f:id:sy4310:20200411154726p:plain

ここで気を付けないといけないのは、
インストールするバージョンを、
1.18.1から上のものに指定する必要が
ある事です。

特にバージョンを指定しないまま
インストールするとデフォルトで
1.15.1のバージョンがインストール
されるのですが、これにはTravis CI
側のテスト結果とカバレッジ計測
結果が、Coverallsのサービス上に
正常に反映されないというバグが
あるようです。

このバグが修正されたのが1.18.1から
らしいので、それ以上のバージョンを
指定するようにしましょう。

Appveyor

Travis CIがLinux環境でのテストなのに
対して、AppveyorはWindows環境上
でのテストサービスになります。

www.appveyor.com

Travis CIと同様に、こちらではappveyor.yml
という設定ファイルを記述して、これを
同リポジトリに置いておきます。

github.com

これに関してもいくつか注意点が
ますが、こちらの記事のおかげで
無難に実行できるようになりました。

myenigma.hatenablog.com

この状態で、あとはいつも通りに
GitHubのリモートリポジトリに
プッシュすれば、Windows環境での
テストが自動で実行され、こちらの
ように結果が記録されていきます。

f:id:sy4310:20200411164338p:plain