Redmine コードレビュープラグイン

Redmine

Redmine のコードレビュープラグインについての概要、及び、Redmine3.3へのインストール手順

はじめに

Redmineに関しては RedmineをCentOSにインストールする にてインストール手順、及び、バージョン管理システム (Subversion) との連携を行う方法に関して記載しました。

今回はコードレビュープラグインに関して書きます。

環境

環境は以下。詳細に関しては RedmineをCentOSにインストールする を参照して下さい。

OS CentOS7.2
Redmine 3.3.1
DB MariaDB 5.5.50
Ruby 2.3.3
Apache 2.4.6

コードレビュープラグイン

コードレビュープラグインはその名の通り、Redmine 上でコードレビューを行う事ができるプラグインです。

※リポジトリが有効になっていないと利用できません。

使い方

リポジトリにコミットされたソースファイル ( テキストファイル ) に対してコードレビューを追加する事が可能です。

リポジトリが有効になっているプロジェクトで、コードレビューモジュールを有効にしておきます。

コードレビューの追加

  1. プロジェクトの [ リポジトリ ] メニューをクリックします。
  2. レビューを行いたいソースファイルを選択します。
  3. [ 表示 ] をクリックします。
  4. [ レビューを書く ] をクリックします。
  5. ソースコードの各行に "鉛筆アイコン" が表示されるので、これをクリックします。
  6. "レビューを書く" ウィンドウが開くので、コードレビューを記載します。
    Redmine コードレビュープラグイン
  7. レビューを記載した行には、"レビューを見る" アイコンが追加されます。
    このアイコンをクリックする事でコードレビューを確認できます。
    Redmine コードレビュープラグイン

※このやり方の他にリビジョン間の差分を見る画面からもコメントを追加する事が可能です。

コードレビューの一覧

プロジェクトの [ コードレビュー ] メニューから、コードレビューの一覧表示が行えます。

Redmine コードレビュープラグイン

設定

プロジェクトの設定からプラグインの設定が行えます。

Redmine コードレビュープラグイン

コードレビューに割り当てるトラッカーを設定したりする事が可能です。運用方法に併せて適宜変更しましょう。

インストール手順

上述の環境におけるインストール手順を示します。
Redmine は /opt/redmine ディレクトリにインストールされている想定です。

プラグインの取得

適当なディレクトリにプラグインの アーカイブをダウンロード ソースを取得します。

※アーカイブを取得・インストールした場合エラーが発生 ( 後述 ) したが、記事執筆後ソースを確認したところ既に修正済であり、この最新版を Bitbucket から取得した方がよい。

mercurial がインストールされていない場合インストール。

# yum install mercurial

hg コマンドを利用してソースを取得。

# cd 適当なディレクトリ
# wget https://bitbucket.org/haru_iida/redmine_code_review/downloads/redmine_code_review-0.7.0.zip
# hg clone https://bitbucket.org/haru_iida/redmine_code_review

展開・インストール

取得したアーカイブを展開して Redmine のプラグインディレクトリにコピーします。

# unzip redmine_code_review-0.7.0.zip
# cp redmine_code_review /opt/redmine/plugins/ -R

マイグレーション

プラグイン用にマイグレーションを実行します。

# cd /opt/redmine
# bundle exec rake redmine:plugins:migrate RAILS_ENV=production

プラグインのインストール確認

Redmine に管理者としてログインし、[管理] > [プラグイン] をクリックします。
Redmine Code Review plugin が表示されていればOKです。

動作確認

上記使い方に従って、コードレビューの追加、一覧表示等が動作すればOKです。

が、今回インストールした環境ではコードレビューの追加は行えるが、コードレビュー一覧が表示されない状態になってしまいました。

※Bitbucket の最新版では解決済みです。

修正方法

エラー内容

Ruby 使いではないので詳細は不明ですが、以下エラーが発生していました。

production.log

/opt/redmine/log/production.log には以下エラーが出力されました。

ActiveRecord::StatementInvalid (Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':conditions=>["project_id = ? and issue_id is NOT NULL", 1]}) FROM `code_reviews' at line 1: SELECT COUNT({:conditions=>["project_id = ? and issue_id is NOT NULL", 1]}) FROM `code_reviews`):
  plugins/redmine_code_review/app/controllers/code_review_controller.rb:39:in `index'
  lib/redmine/sudo_mode.rb:63:in `sudo_mode'

query.log

MariaDB のクエリログを有効にして確認したところ。
SELECT COUNT が変な事になってます。

26 Query     SELECT COUNT({:conditions=>["project_id = ? and issue_id is NOT NULL", 1]}) FROM `code_reviews`

code_review_controller.rb の修正

上記 production.log の内容から code_review_controller.rb の count メソッドに問題がある感じだったので以下の修正を行いました。

# vi /opt/redmine/plugins/redmine_code_review/app/controllers/code_review_controller.rb

以下変更部分 ( 抜粋 )

※行頭 # の行が変更前。その下の行が変更後。

#   @review_count = CodeReview.count(:conditions => ['project_id = ? and issue_id is NOT NULL', @project.id])
    @review_count = CodeReview.where("project_id = ? and issue_id is NOT NULL", @project.id).count()
#   @all_review_count = CodeReview.count(:conditions => ['project_id = ?', @project.id])
    @all_review_count = CodeReview.where('project_id = ?', @project.id).count()

上記変更後は、apache を再起動してください。

# systemctl restart httpd.service

これで一覧も表示可能になりました。

count メソッドの仕様が変わったんですかね?知らんけど。

まとめ

コードレビュープラグインを導入する事で、ソースコードのレビュー、及び、対応を Redmine 上で行う事ができるようになります。

適切に運用する事でチームのコードの質を上げる事ができるのではないでしょうか。