読者です 読者をやめる 読者になる 読者になる

コモディティ化するエンジニア

組み込み系のSI屋から、Railsを扱うWeb系のベンチャーに転職した筆者が、日々ミジンコなりに情報を綴るブログ。

CodeClimateのカバレッジ測定が、従来の設定で動かなくなったので修正してみた

Ruby CodeClimate Rspec

Code Climate + Circle CI でRubyプロジェクトのコードカバレッジを計測しようとしてみたところ、
codeclimate-test-reporterのバージョンが上がっていて、
従来の設定(ネットに転がっているもの)では動かなくなっていたので、修正した部分を備忘録として残しておきます。

従来の設定

まず、従来の設定です。
spec_helper.rbに、以下のように書く、という情報が多く見受けられました。

require "simplecov"
require 'codeclimate-test-reporter'

SimpleCov.start do
  add_filter "/vendor/"
  add_filter "/spec/"

  formatter SimpleCov::Formatter::MultiFormatter[
              SimpleCov::Formatter::HTMLFormatter,
              CodeClimate::TestReporter::Formatter
            ]
end

これで、rspecを回してみると、以下のようなエラーが出ます。

Formatter CodeClimate::TestReporter::Formatter failed with CodeClimate::TestReporter::Formatter::InvalidSimpleCovResultError: undefined method `values' for #<SimpleCov::Result:0x007fb06257bdd0> (/Users/ym/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/codeclimate-test-reporter-1.0.3/lib/code_climate/test_reporter/formatter.rb:21:in `rescue in format')

知らんがな(´・ω・`)

正しい設定

正しい設定はこちらです。まず、同じくspec_helper.rbを書きます。

require "simplecov"

SimpleCov.start do
  add_filter "/vendor/"
  add_filter "/spec/"
end

更に、CircleCIの方で CODECLIMATE_REPO_TOKEN=<token>GUI上で設定*1した上で、
bundle exec codeclimate-test-reporter を実行するよう circle.yml に仕込む必要があります。

test:
  override:
    - bundle exec rspec
    - bundle exec codeclimate-test-reporter

これで、カバレッジを測定した結果を、CodeClimateに送信してくれるようになります。

おわりに

今回の変更のくだりは、公式ドキュメントに書いてあります。

https://docs.codeclimate.com/docs/ruby

が、bundle exec codeclimate-test-reporter の実行を、CIツール側でどう設定するのかまでは書かれていなかったので、今回設定するのに苦労しました。

なお、Travis CIに対応させる方法は、こちらの記事が参考になります。(CircleCIに対応させる上で、私も参考にしました)

web-salad.hateblo.jp

link_toでページ内リンクとclass指定を共存させる方法

Rails

やろうとして、ちょっと詰まったので忘れないうちにメモ。

<a class="button" href="#about">LEARN MORE</a>

こんな感じのHTMLをlink_toで生成したいとする。

<%= link_to("LEARN MORE", anchor: "about", class: "button") %>

これだと駄目。

<%= link_to("LEARN MORE", { anchor: "about" }, class: "button") %>

こうやって、明示的に二番目のパラメータをHashにすることで、うまくいった。
こうすることで、class: "button" をHTMLパラメータ(三つ目のパラメータ)として認識させることができるんだと思う。

と考えると、上記であげた駄目な例は、以下の書き方と同義かな?

<%= link_to("LEARN MORE", { anchor: "about", class: "button" } ) %>

Slackのintegration、ZONG Memes! がただのLGTM画像生成機だった(画像検索対応)

Slack

Slack上で画像検索をできないか探していると、Hubotなど、BOTを立てて実現する方法が多く見つかります。
自分はBOTを立てるのすら面倒だったので、もっと簡単な方法がないか探していたところ......ありました!!
ZONG Memes! というSlackのintegrationがあるのです。

導入方法

Slackの導入ができていることが前提です!
そもそも、Slackって何? Slackを導入したいという方はこちらの記事を参考にどうぞ。

qiita.com

問題の ZONG Memes! の公式ページ はこちら。

http://zomg.oliy.co.uk/

公式ページ内の中段ぐらいに、Add to Slack というボタンがあるので、こちらをクリックします。

f:id:muramurasan:20160830215114p:plain

すると、どのチームにintegrationを追加するかと、どのチャンネルにPOSTするかをたずねられるので選択します。
うまく導入できれば、以下のような画面に遷移しますので、これで導入完了です。

f:id:muramurasan:20160830215636p:plain

使い方

使い方は /meme help コマンドで確認できますが、代表的なものを。

/meme コマンド

/memeコマンドは、画像検索結果の上側と下側に文字を加えたものを生成してくれます。

f:id:muramurasan:20160830220936p:plain

/img コマンド

/img コマンドは、画像検索結果を返してくれます。

f:id:muramurasan:20160830221238p:plain

想定される用途

最初、/img コマンドしか使うことはなく、/meme コマンドの文字埋め込み機能は「余計な機能じゃ!」と思っていたのですが、
/meme 橋本奈々未 | LGTM |などと入力すれば、チーム内々で使うLGTM画像を手軽に生成できることに気がつきました。
これでPRコミュニケーションが捗りますね!!

f:id:muramurasan:20160830221725p:plain

追記:間違った使われ方

f:id:muramurasan:20160831230831p:plain

「プログラマ脳を鍛える数学パズル」の問題をRubyで解いてみた #7 (Q:18)

Ruby プログラマ脳を鍛える数学パズル

プログラマ脳を鍛える数学パズル」の回答記事、第7回目です。

問題文については、残念ながら転載が禁止されていますので、本連載(?)では自分の回答コードのみを掲載していきます。
気になってしまった方は、本を実際に購入し、解いてみることをオススメします。

Q18「ショートケーキの日」の回答コード

この連載では、模範解答とは異なるアプローチやコーディングスタイルで解けた場合に限って、ブログに投稿しています。
コード中で使っている、measure doについては、過去記事で書いているので、こちらをご参照ください。

平方数の組み立てをさぼっていますが......
模範解答その1より早く、模範解答その2よりわかりやすく、どちらの解答よりも短いコードを書けたのではないかと思います。
以下、計測結果。

$  paiza ruby puzzle18.rb
[1, 15, 10, 26, 23, 2, 14, 22, 27, 9, 16, 20, 29, 7, 18, 31, 5, 11, 25, 24, 12, 13, 3, 6, 30, 19, 17, 32, 4, 21, 28, 8]
      user     system      total        real
  1.670000   0.010000   1.680000 (  1.670901)
$  paiza ruby puzzle18_1.rb
32
[1, 8, 28, 21, 4, 32, 17, 19, 30, 6, 3, 13, 12, 24, 25, 11, 5, 31, 18, 7, 29, 20, 16, 9, 27, 22, 14, 2, 23, 26, 10, 15]
      user     system      total        real
  2.650000   0.020000   2.670000 (  2.671720)
$  paiza ruby puzzle18_2.rb
32
[8, 28, 21, 4, 32, 17, 19, 30, 6, 3, 13, 12, 24, 25, 11, 5, 31, 18, 7, 29, 20, 16, 9, 27, 22, 14, 2, 23, 26, 10, 15, 1]
      user     system      total        real
  0.280000   0.000000   0.280000 (  0.286056)

模範解答2はやっぱり早いですね。

「プログラマ脳を鍛える数学パズル」の問題をRubyで解いてみた #6 (Q:17)

Ruby プログラマ脳を鍛える数学パズル

プログラマ脳を鍛える数学パズル」の回答記事、第6回目です。

問題文については、残念ながら転載が禁止されていますので、本連載(?)では自分の回答コードのみを掲載していきます。
気になってしまった方は、本を実際に購入し、解いてみることをオススメします。

Q17「30人31脚に挑戦!」の回答コード

今回から、模範解答とは異なるアプローチで解けた場合に限って、ブログに投稿していきたいと思います。 コード中で使っている、measure doについては、過去記事で書いているので、こちらをご参照ください。

模範解答その1では、1人ずつ男子か女子を配置していく力任せなやり方でした。 対して、今回の私の解答では、女子の配置のみを考えており、模範解答1よりは軽量な結果が出ています。 以下、計測結果。

$  paiza ruby puzzle17_1.rb
2178309
      user     system      total        real
 10.390000   0.080000  10.470000 ( 10.747219)
$  paiza ruby puzzle17.rb  
2178309
      user     system      total        real
  1.730000   0.010000   1.740000 (  1.740072)

模範解答2が最速なのは疑いようがありませんが、パッと見のわかりやすさを残しつつ高速なコードを書けて良かったです。