RuboCopを使えばRubyのコードを静的解析してコードレビューを他の人にして貰う前にいくらかの内容を機械的にチェックできるようになります。RuboCopのインストール自体はRubygemsでできるのでさほど難しいものではありませんが、ローカル環境の変更はなるべく控えたい方もいるでしょう。そこでDockerを使ってローカルの環境に依存せずにRuboCop環境を整える方法を紹介します。
Dockerについて
Dockerについては皆さん知っていると思いますので簡単に説明すると、Linuxコンテナ技術になります。OS全体を仮想化するのではなく、最低限のライブラリやアプリケーション単位でコンテナと呼ばれる仮想環境を作ります。そのためOS単位での仮想環境に比べると軽量で、瞬時に立ち上がるのがメリットです。分かりやすく言えば各プロセスを仮想環境として保護することでセキュアでリソースが確保された状態で実行できるようになります。
DockerはLinux用に提供されていますが、WindowsやmacOSでも利用できます。こちら(Windows版、macOS版)からダウンロードできますので、各自の環境にインストールしてください。
RuboCopを試す
では実際の方法ですが、レビューしたいRubyプロジェクトへ移動して次のようにコマンドを打ちます。今回はcagedata/rubocop - Docker Hubのコンテナを利用しています。Rubyは2.3になります。
$ docker run --rm --volume "$PWD:/app" cagedata/rubocop
初回はコンテナイメージをダウンロードするので若干時間がかかります。ダウンロード、デプロイが完了すると次のように実行結果が表示されます。
$ docker run --rm --volume "$PWD:/app" cagedata/rubocop Inspecting 35 files .CCCCC.C...CWCWWCCCCWWCCCWWW..WWCCC Offenses: ncmb-ruby-client.gemspec:12:24: C: Use %q only for strings that contain both single quotes and double quotes. spec.description = %q(A simple Ruby client for the nifty cloud mobile backend REST API) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :
次回以降はすでにコンテナイメージがありますので、ローカルでRuboCopコマンドを実行するとほぼ変わらない速度で結果が得られるようになります。
バージョンアップなど
この Dockerfile
(Docker用の設定ファイル)は次のようになっています。
FROM ruby:2.3 MAINTAINER "Dave Long <dlong@cagedata.com>" ARG version=0.43.0 RUN gem install rubocop -v ${version} WORKDIR /app VOLUME /app COPY docker-entrypoint.sh /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"]
RuboCopのバージョンは0.43.0固定となっています。もし更新された時には手動で書き換えて、改めてDockerコンテナのビルドを行う必要があるようです。
手軽に実行できますのでお試しください。
なおSideCIでは常に最新版のRuboCopを利用できます。もちろんDockerをインストールするような手間もなく、クラウド上ですぐに実行環境が手に入ります。無料トライアルもありますので、ぜひご登録ください。