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

Ruby のテストカバレッジを Travis CI から Code Climate へ POST する方法が変わっていた

Ruby ツール

Travis CI 上で Rubygems のテストを実行して、テストカバレッジの集計結果を Code Climate へ POST するときにエラーが発生していたので、解決方法をメモしておきます。

エラー

/home/travis/.rvm/rubies/ruby-2.0.0-p598/bin/ruby -I"lib:test" -I"/home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rake-10.5.0/lib" "/home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rake-10.5.0/lib/rake/rake_test_loader.rb" "test/hatenablog/category_test.rb" "test/hatenablog/client_test.rb" "test/hatenablog/configuration_test.rb" "test/hatenablog/entry_test.rb" "test/hatenablog/feed_test.rb" "test/hatenablog/requester_test.rb"
W, [2016-11-20T13:49:38.926089 #13726]  WARN -- :       This usage of the Code Climate Test Reporter is now deprecated. Since version
      1.0, we now require you to run `SimpleCov` in your test/spec helper, and then
      run the provided `codeclimate-test-reporter` binary separately to report your
      results to Code Climate.
      More information here: https://github.com/codeclimate/ruby-test-reporter/blob/master/README.md

解決方法

エラーメッセージにすべて書いてあるのですが、Code Climate への結果の POST に使う ruby-test-reporter のメジャーバージョンアップで仕様が変わったため、エラーになるようです。

次の修正をすれば OK です。

  • Gemfiletest グループに simplecov 追加
group :test do
  require 'simplecov'
  require 'ruby-test-reporter', '~> 1.0.0'
end
  • test/test_helper.rb(もしくは spec/spec_helper.rb など)の先頭から従来の test reporter のコードを削除して、次のコードを追加
require 'simplecov'
SimpleCov.start
  • .travis.yml に次のコードを追加
after_success:
  - bundle exec codeclimate-test-reporter

なにをやっているか

Travis CI は ruby-test-reporter を利用して Code Climate へ解析結果を POST しています。以前の ruby-test-reporter は SimpleCov を中で実行していたので、CodeClimate::TestReporter.start を実行すれば、テストカバレッジの集計 (SimpleCov) と結果の Code Climate への POST (reporter) までやってくれていました。

ところが、ruby-test-reporter v1.0 で SimpleCov と reporter が分離されました。テストが失敗したり、実行中にエラーが起きても、Code Climate にカバレッジなどを POST してしまい、master 以外のブランチでの開発などで問題になるためです*1

以上の理由で SimpleCov と reporter が分離されたので、test_helper.rb での SimpleCov.start 実行と .travis.yaml に設定したテスト成功後の codeclimate-test-reporter 実行をそれぞれ設定し直しています。

参照

*1:詳細は この pull request に書かかれています。

hatenablog gem 0.5.0 をリリースした

Ruby

Rubygem の hatenablog 0.5.0 をリリースしました。

github.com

アップデート

Hatenablog::Client.new にブロックを渡すことで認証情報を設定できるようにしました。

client = Hatenablog::Client.new do |config|
  config.consumer_key        = '<consumer key>'
  config.consumer_secret     = '<consumer secret>'
  config.access_token        = '<access token>'
  config.access_token_secret = '<access token secret>'
  config.user_id             = '<user name>'
  config.blog_id             = '<user_name>.hatenablog.com'
end

従来どおり YAML ファイル経由での設定もできます。

全エントリを取得するメソッド Hatenablog::Client#all_entries を追加しました。

entries = client.all_entries

あと、gem に直接関係ないですが、README が不足気味だったので増量しました

Yokohama.rb Monthly Meetup #74 に参加した

日記 Ruby

2016-11-12(土)の Yokohama.rb Monthly Meetup #74 に参加しました。

yokohamarb.doorkeeper.jp

  • 前半は Ruby レシピブック読書会
  • 後半は LT

という 7 月以来の流れでした。

レシピブック

今回はいつもより 30 分短かったこともあって、レシピ 238, 239 だけ読みました。

レシピ 238

のふたつを使って、プログラムの処理途中に実行ユーザの権限やグループ権限を切り替えたりする方法についてのレシピです。Docker や Foreman のグループを処理途中で使いたいときなどに便利ではという話でした。

スーパーユーザから一般ユーザへとプロセス実行権限を一時的に切り替えるために、実効 UID というものを Process#euid= を使って書き換えています。一方で、実 UIDというまた別の ID もあるようで、それらの違いがよくわからなかったので、質問してみました。その場で調査した結果(Wikipedia のユーザ識別子)、次の違いがあるとわかりました。

  • 実効 UID, 実効 GID(グループ ID)
    • ファイルの作成やアクセスに影響する ID
    • たとえばあるファイルを開く権限があるかチェックするときに使う
  • 実 UID, 実 GID
    • シグナル送信に影響する ID
    • たとえば kill でプロセス終了できる権限があるかチェックするときに使う

もはや Ruby とはあまり関係ないですが、勉強になりました。

レシピ 239

Windows レジストリにアクセスするためのライブラリ win32/registry についてのレシピです。メモ帳 (notepad.exe) 終了時のウィンドウ位置取得を例にした、レジストリの操作方法についてでした。

Windows ユーザが会場にいないので、完全に読むだけになるかと思いきや、@igrep さんがあらかじめ準備してあった自宅の Windows 環境にリモート接続しレシピを実演してくれました。ありがとうございます!

LT

LT 一本目は、@hamakn さんからリクエストがあったこともあり、僕が先月受けていたGMO ペパボの第二新卒向け研修についてかんたんにご紹介しました。

LT 二本目は、@hamakn さんから Rails の accepts_nested_attributes_forlimit オプションでハマった話や、DB 設計の悩みについてなどでした。DB 周りの知識大事という話に収束していきました。

懇親会

いつも使っている吉田飯店というお店の名前が「吉田飯店」に変わってました…

いかにエンジニアとして満足できる仕事をして成仏するか、みたいな人生観的な話と昨今のゲームの話が展開されていました。


次回 2016-12-10(土)の Yokohama.rb は以下リンクから申し込めます。読書会に参加するもよし、もくもくするもよし、他の方と技術トークするもよしで初心者から上級者までフィットするコミュニティだと思いますのでぜひぜひ。

yokohamarb.doorkeeper.jp

Fukuoka.rb #66 に参加した

Ruby 日記

現在、会社の研修で福岡に来ています。福岡には、地域 Ruby コミュニティとして Ruby コミッタの nagachika さんや弊社の udzura さんが主催されている Fukuoka.rb があります。今回、udzura さんに誘っていただき、10/12(水)に福岡・天神のグルーブノーツ社で開催された Fukuoka.rb #66 に参加してきました。

fukuokarb.connpass.com

弊社の研修メンバ 5 人が参加したので、会場がかつてない人口密度になりました。

LT として、morygonzalez さんから「Arel おじさんになって ActiveRecord のクエリを高速化しよう」というお話がありました。Arel は ActiveRecord のなかで様々な DB 用の SQL を生成するライブラリです。ActiveRecord で DB 操作を書いていると、Arel が無駄のあるクエリを生成することもあるらしく、Arel の性質をもとに、SELECT するカラムを絞るなどの方法で、できるだけ最適なクエリを生成するようにするのが大事ということでした。パフォーマンスに関わる部分は、できるだけ内部動作まで理解した対策が必要そうです。

その後、udzura さんの mruby gem ライブコーディングがありました。matsumotory さん作の mruby-mrbgem-template を使って gem のテンプレートを作成後、mruby や C で実装していくのを見ていました。mruby の C 拡張は Ruby の C 拡張よりとっつきやすいらしいので、試してみたいです。このあたりの記事が参考になりそう。

qiita.com

発表を聞いたあとはもくもくしていました。僕は最近利用者の方から意見をもらうことが増えた Ruby gem hatenablog の修正をしていました。徐々にやっていきます。

hatenablog gem 0.4.0 をリリースした

Ruby

Rubygem の hatenablog 0.4.0 をリリースしました。今回追加したのは Basic 認証ではてなブログの API を使えるようにする機能です。

github.com

PR ありがとうございます!

Basic 認証による利用方法

はてな API で Basic 認証による操作認可を得るには、API キーが必要です。API キーは

http://blog.hatena.ne.jp/<はてなユーザ ID>/<はてなブログ ID>/config/detail

から確認できます。次の画面の「API キー」の下に書いてあります。

f:id:kymmt90:20161009151759p:plain

Basic 認証を使うには、config.yml に次の項目を書いてください。

auth_type: basic
api_key: <API キー>
user_id: <はてなユーザ ID>
blog_id: <はてなブログ ID>

これで Basic 認証ではてなブログ API にアクセスできるようになります。