名古屋Ruby会議04で講談した

名古屋Ruby会議04で講談した。会場は名古屋の大須演芸場

regional.rubykaigi.org

勤務先名がせっかく漢字交じりなので、同門の colorboxkunitoo で永和亭を名乗る形で講談した。まくらが難しかったところ、永和亭 此一句を名乗った流れで最初に一句入れてからの入りにしていたスライドは以下。

名古屋Ruby会議に登壇するのは第2回以来の8年ぶり。演芸場で話すのは初めてだったこともあり、いろいろと分からないながらも楽しく話をさせてもらいました。

ぜひまた上がってみたいハコで楽しかったです。ありがとうございました。

RuboCop 本体から Rails Cops が外される

次の RuboCop マイナーバージョンアップとなる 0.72 から Rails Cops が外されます。今後 Rails Cops を使う場合は Gemify された rubocop-rails gem を使うことになるため、昨日リリースされた RuboCop 0.71 から警告が出るようにしています。

github.com

また rubocop -R/--rails オプションも同じタイミングで削除します。

github.com

RuboCop 0.71 は移行期間としているため RuboCop の Rails Cops を使う場合は、以下のような設定を加えてください。

Gemfile に rubocop-rails gem を追加して bundle install する。

gem 'rubocop-rails'

.rubocop.yml に require: rubocop-rails を追加する。例えば以下のように足すことになります。

 inherit_from: .rubocop_todo.yml
 require:
+  - rubocop-rails
   - rubocop-rspec

 AllCops:
   Exclude:
     - 'vendor/**/*'
     - 'spec/fixtures/**/*'
     - 'tmp/**/*'
   TargetRubyVersion: 2.6

このように今後は RuboCop Performance や RuboCop RSpec と同様の使い方になります。

rubocop-rails gem についての詳細は https://github.com/rubocop-hq/rubocop-rails を参照してください。

RuboCop 本体と rubocop-rails gem 両方に実装がある場合、rubocop-rails gem の実装が方が優先される動きになります。

Rails Cops が外されることについての移行スケジュールは以下です。

  • RuboCop 0.71 ... RuboCop のインストール時、ならびに rubocop -R/--rails オプションを使った時に警告が表示します
  • RuboCop 0.72 ... RuboCop Core から Rails Cops を削除します

銀座Rails#9に登壇した

銀座Rails#9@リンクアンドモチベーションに『RuboCop入門』というタイトルで登壇した。ginkouno さんオファーありがとうございました。

ginza-rails.connpass.com

当日の発表スライドは以下です。

なかなか話す機会として作っていなかった RuboCop の実装系ではなく使い方というコンセプトで練ってみた話です。発表時点では最新の安定版であった RuboCop 0.70.0 をベースにしています。発表の裏か直後あたりで RuboCop 0.71.0 がリリースされていますが、現時点で主要な変更は自分が携わっていることもありアウトラインとしてはブレはないと思います。

rubygems.org

質疑応答や懇親会でいくつか RuboCop へのフィードバックとしてもらった点は、今後いくらか調査を進めて形にできるものがあるかもしれませんし、そうならないかもしれなくても何かの折の判断軸の要素になりますので、参加していただいたのもそうですし何よりフィードバックありがとうございました。楽しかったです。

海外カンファレンスへの渡航での失敗談

再来週開催される名古屋Ruby会議04で『海外Rubyカンファレンスへの踏み出し方』というタイトルで話します。

regional.rubykaigi.org

ここでは、そのトークにまつわる裏話。今年のゴールデンウィークに開催された RailsConf 2019 に勤務先の支援で渡航した際の失敗談について大きめのを3つ記しておきます。

ホテルの予約で宿泊数を間違えた

Web からのホテルの予約時にチェックアウトの日の理解を間違えていて1泊足りていなかった。Web からの変更ができなかったので以下のような E メールをホテルに送信した。使われないことを祈りますがテンプレにしておきます。

Dear #{ホテル名}

My name is #{自分の名前} who has made a reservation and received confirmation.

  Booking reference: #{予約番号}

I'm so sorry to inform you. I mistook the check out schedule input, 
so is it possible to change the check out schedule of my reservation?
If so, please change from my current check out schedule of my reservation:

From:

  Check in: April 29, 2019
  Check out: May 4, 2019 (5 NIGHTS)

To:

  Check in: April 29, 2019
  Check out: May 5, 2019 (6 NIGHTS)

And could you notify me when changes have been made?

Thank you.

このあとホテルから返信のメールはなかったが、最終確認のメールでチェックアウト日が変更されていた。しかし Web は元のまま。不安だったのでメールを印刷して現地に持って行って、ホテルへのチェックインの際にチェックアウト日の確認をとって OK だった。

そもそも問題を作らない方が重要なので、時差など込みで予約時の日付の確認は気をつけましょう。

トランジットに失敗した

羽田からサンフランシスコ経由でミネアポリス着で向かっていたが、サンフランシスコでの US の入国審査の待ち行列で乗り換え時間の 1時間30分では足りず手に汗を握って荷物の預かりへ。そこで更にサンフランシスコ発のシカゴ経由でのミネアポリス着でトランジットが増えた便を用意されて振り替え (つまり間に合わなかった) 。当然現地の到着も遅れて 26 時間くらいかかったと思う。このとき秒速さんと一緒に行っていてふたりいれば安心だったところ、秒速さんはサンフランシスコで便の時間を遅らせたミネアポリス便になってソロプレイとなる。

得た教訓としては入国審査の待ち行列を考えてトランジットには3時間は用意しておいた方が良い。あと予算があれば直行便を選択するともっと良い。トランジットはハードモード。

それと、まだ明るい夕方につくはずが真っ暗な夜の到着だったということもあり、空港からホテルに向かうにあたって Lyft の使い方はあらかじめ覚えておいて良かった。使い方やアプリのインストールや設定はあらかじめしておくと良い。

預けた荷物の行き先を確認する

トランジットがある場合に、預けた荷物をトランジット先で自分で乗せ替えが必要かスタッフの方で乗せ替えを行なって直接届くのか確認をしておく。自分の場合は不安だったので、案内の人と預ける際の担当の人という複数の人に確認した。しかしそれでもバゲージロストは起きるときは起きるらしいので、貴重品を入れないとか一泊分の着替えは備えておくなどはしておくと良い。。。というテンプレでない実録話は名古屋Ruby会議04に登壇する秒速さんに壇上外で聞いてみるとリアルでしょう。

今後、海外カンファレンスに行く人へ他人の失敗から学ぶ一助になればと思う。

ちなみに再来月 (7月) に開催される RubyConf Taiwan 2019 は時差1時間で直行便があるので、海外カンファレンスに踏み出すのにとても良くておすすめです。

2019.rubyconf.tw

Active Record Oracle enhanced adapter 5.2.6 がリリースされた

Active Record Oracle enhanced adapter 5.2.6 がリリースされた。

変更点としては、RailsConf 2019 の帰りの飛行機で書き始めていた TCP keepalive について database.yml から設定可能にする機能追加となる。

github.com

database.yml に以下のように tcp_keepalive の値を false に指定することで TCP keepalive を無効にできる。

 development: &development
   adapter: oracle_enhanced
+  tcp_keepalive: false

また以下のように tcp_keepalive_time の値を指定することで TCP keepalive の時間を変更できる。

 development: &development
   adapter: oracle_enhanced
+  tcp_keepalive_time: 3000

それぞれの tcp_keepalive のデフォルト値は true で tcp_keepalive_time のデフォルト値は 600 (10分) としているため、Breaking change にならないように Oracle enhanced adapter 5.2 で導入された振る舞いは維持している。

今回 Oracle enahanced adapter 5.2 系へのバックポートなど含めて Rails/OSS パッチ会で yahonda さんに相談に乗って頂きました。いつもありがとうございます。

blog.agile.esm.co.jp

次回の Rails/OSS パッチ会は 6月6日 (木) です。

RuboCop 0.69がリリースされた

RuboCop 0.69がリリースされた。このバージョンから Ruby 2.2 以下をサポートから切っているので、サポート対象は Ruby 2.3 以上になる。

あわせて Ruby 2.2 以下のサポートを切った RuboCop Performance 1.3.0 もリリースしておいた。RuboCop RSpec も同様にサポート対象が Ruby 2.3 以上になる。

またオフトピックとなるが、公式ドキュメントとなる http://www.rubocop.org のデフォルト表示を開発版である "latest" から安定版である "stable" に変更した。これは多くの利用者は開発版ではなく安定版のドキュメントをまず読みたいであろうという pocke さんのアイデアが元になっていて、Read the Docs まわりの設定を変更したもの。流れで RuboCop の Read the Docs の管理者権限をもらっているので、何か気になる点が見つかったら RuboCop core か RuboCop JP などでお気軽にフィードバックしてください。

github.com

銀座 Rails#9 に登壇します

銀座Rails#9 @リンクアンドモチベーションに登壇します。

ginza-rails.connpass.com

RuboCop コミッターとしての観点を交えての、RuboCop 入門をテーマに話をします。

ユーザー向きのコンテンツをベースにしつつ、私が押さえている今後の RuboCop の動きや、私から見た他のコミッターや私自身が持つ思想など交えたイメージでこれからスライド作りなどする予定です。

よければ遊びに来てください。