アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

Prontoでソースレビュー自動化

はじめまして。キエンと申します。ベトナム人です。

2月にアクトインディにウェブエンジニアとして入社しました。ブログ初投稿です! どうぞよろしくお願いいたします。

自己紹介

2014年にベトナムのハノイ工科大学を卒業して以来、仕事で日本に来ました。前職は主にPHPをやっていました。ひさしぶりにRubyを触らなかったから、今はRubyを中心に勉強しています。

僕はアプリケーション開発だけではなくインフラ系もやりたいです。将来、アクトインディに新規サービスの環境構築等もできる人になるように目指しています。

さて、本日のメイン記事を始めましょう。先日、いこレポの開発環境にprontoを導入できましたので、ご紹介します。

Prontoとは

皆さんはrubocopとかrails_best_practices等を知っていますでしょうか。それはコーディングルールへの準拠チェックをしてくれるツールです。いこレポの開発環境に最初から導入しました、すごく便利なツールだと思います。但し、プルリクエストで使用できないので、prontoに切り替えました。 

Prontoはプルリクエストで使用するために作成されました。変更のみをチェックすることで分析を迅速に実行します。 

Prontoは、さまざまなツールやライブラリを実行することができます。今、いこレポは以下のツールを使用しています。

Githubでプルリクエストを作ったり、プルリクエストにPushすると、 コードをレビューしてくれます。

f:id:kien4c:20190401181313p:plain f:id:kien4c:20190401181328p:plain

全てチェックがパスすると、こうなる仕組みを作りました。

f:id:kien4c:20190401181558p:plain

仕組み

いこレポのテストとコードレビュー自動化の仕組みはこちらです。

  • Github Webhook => API Gateway => Lambda => CodeBuild

f:id:kien4c:20190405233938p:plain

事前の仕組みはAWS CodeBuildでRspecのみを実行しています。今回、Prontoの実行を追加しました。 Prontoの実行結果はProntoからGitリポジトリにCommit Status APIで通知してくれます。(アクセストークンの共有が必要です)

Gemの導入

  gem 'pronto', '~> 0.10.0'
  gem 'pronto-brakeman', '~> 0.10.0', require: false
  gem 'pronto-rails_best_practices', '~> 0.10.0', require: false
  gem 'pronto-rubocop', '~> 0.10.0', require: false

ローカル環境での確認

ソースレビュー自動化があっても、各エンジニアさんのローカル環境でプルリクにPushする前に、 自分のソースをチェックするべきです。メリットはこちらです。

  • レビュアーが確認やすくため、プルリクにProntoからのコメントを避けたい
  • ローカル環境ですぐProntoの結果を確認できるため、開発の効率が高くになる

コミットされていない変更の確認

  • コマンド
$ pronto run --unstaged
  • テスト

品質が低いのコードを入れてみます。

 def rubocop_test
   HOGE = [
     1,
     2,
     3,
   ]
 end

 def brakeman_test
   system("ls #{params[:dir]}")
 end
  • 結果

f:id:kien4c:20190406011727p:plain

うわわわコミットされていない変更をレビューしてくれました。

未Pushのコミットの確認

  • コマンド
$ pronto run

結果は「コミットされていない変更の確認」の場合と同様です。

AWS CodeBuildにProntoの実行

  • docker-compose.yml
services:
  rails:
    environment:
      # Pronto用の環境変数
      PRONTO_GITHUB_ACCESS_TOKEN: $GITHUB_ACCESS_TOKEN
      PRONTO_PULL_REQUEST_ID: $PR_NUMBER
    command: [
      "prehook", "bundle install --with test", "--",
      # Prontoの実行
      "/bin/bash", "-c","bundle exec pronto run -f json github_status github_pr -c origin/master > coverage/pronto.json"
    ]

Prontoはプルリクにアクセスできるため、PRONTO_GITHUB_ACCESS_TOKENとPRONTO_PULL_REQUEST_ID環境変数の設定が必要です。 その値はCodeBuildの環境変数から取得します。

CodeBuild環境変数 備考
GITHUB_ACCESS_TOKEN CodeBuildで設定
PR_NUMBER Lambdaから渡される

Prontoコマンドは-fオプションで出力フォーマッタを指定できます。

出力フォーマッタ 内容
json 結果をjsonファイルに出力してくれる
github_status Commit Status APIで結果のステータスをプルリクに通知してくれる
github_pr プルリクにコメントしてくれる
  • buildspec.yml
phases:
  build:
    commands:
      - echo Running Pronto
      - docker-compose -f docker-compose.yml up --abort-on-container-exit

まとめ

  • Prontoでソースレビュー自動化できる
  • テストとソースレビューの仕組みは
    • Github Webhook => API Gateway => Lambda => CodeBuild
  • ローカル環境でもチェックするべき

最後に

僕はアクトインディに入ったばかりですが、すごくいい環境だと思っています。 まだエンジニアを募集していますね。 日本人でも、外国人でも、ぜひ一緒にサービスを成長させてみませんか?

actindi.net