表参道.rb #42

表参道.rb #42 に行った。会場は外苑前のビジネスバンクグループさん。

omotesandorb.connpass.com

テーマが Ruby 2.6 ということで、@okuramasafumi は例外の cause に関するコードを使ったプレゼン、@Kirika_K2Ruby 2.6 以上を要求する Gem の調査とその結果として RubyVM::AbstractSyntaxTree を使った Gem の台頭に関する話、うなすけメンバー は Docker イメージの話といった内容が話されていた。

自分は Ruby 2.6 そのものの機能はいろいろなところで取り上げられたりしているので、そこから少し外して『Beyond Ruby 2.6.0』というタイトルを銘打ちつつもその実は "ちょっと先" の話などをしていた。

f:id:koic:20190114212921j:plain:w400

本会の1時間前に申し込んで、タブブラウザを切り替えて話すという形で話した。以下ざっくりと話したこと。

  • RubyGem 3.0 と Bundler 2.0 がリリースされているのでアップグレードしていきましょうというのと、それぞれのアップグレードの方法について
  • Travis CI で Bundler 2.0 のあるエラーが起きた時の対処について
  • 平成の終わりについて U+32FF のコードポイント
  • 平成の終わりにある RailsConf 2019
  • ちょうど当日にコメントされた Ruby 3.0 での frozen-string-literals の default について検討されていた件のお見送りについて

会場には Matz がおられて特に最後の項目について話を伺えたり、いろいろと雑談の機会を得ることができた。

最後、おまけに発表の30分くらい前に macOS 向けに書いたスクリプトは以下。

[
  # About me
  'https://twitter.com/koic',
  # RuboCop contributors 2018
  'https://github.com/rubocop-hq/rubocop/graphs/contributors?from=2018-01-01&to=2018-12-31&type=c',
  # Rails Developers Meetup 2018
  'https://railsdm.github.io/',
  # Rails/OSS patch meetup
  'https://blog.agile.esm.co.jp/entry/rails-oss-patch-meetup-20190124',
  # RubyGems 3.0 / Bundler 2.0
  'http://koic.hatenablog.com/entry/update_rubygems_and_bundler_via_http',
  # --no-rdoc option and --no-ri option are removed in RubyGems 3.0
  'https://github.com/yahonda/rails-dev-box/pull/32',
  # Travis CI
  'http://koic.hatenablog.com/entry/ruby-2-2-or-lower-with-gem-install-bundler-on-travis-ci',
  # Ruby 2.6.1 and 2.6.2
  'https://twitter.com/hsbt/status/1077879542256029697',
  # Ruby 2.6.2 (Maybe)
  'https://twitter.com/mametter/status/1078459004404158464',
  # U+32FF
  'https://32ff.info/',
  # RailsConf 2019
  'https://railsconf.com/',
  # Developers Meetup
  'https://docs.google.com/document/d/1W_wrFsFxxU1MepA6HBpfl-9h-nLD8EBsgMsS7yTDvHE/edit',
  # About frozen-string-literals default
  'https://bugs.ruby-lang.org/issues/11473#note-53',
  # RubyKaigi 2019
  'https://rubykaigi.org/2019',
  # Ruby 2.7
  'https://twitter.com/k0kubun/status/1077564205581008896',
  # Ruby 2.7.0-dev
  'https://github.com/rbenv/ruby-build/pull/1270',
  # おまけ
  'https://twitter.com/y_yagi/status/1077884294574395392',
  'https://twitter.com/kamipo/status/1077889915063459841'
].reverse_each do |url|
  `open #{url}`
end

楽しかったです。ありがとうございました。

FlipFlop cop の部署を移動した

Ruby 2.6 で flip-flop が非推奨になったことから、Style/FlipFlopLint/FlipFlop ではというコメントをもらって移動する PR を開いた。

github.com

部署移動の際に旧部署を使った場合警告を出すための設定を書く場所が RuboCop::Config::OBSOLETE_COPS ということを思い出すのに少し手間取ったのでメモがてら記しておく。

マージされたのち次の RuboCop のリリースあたりで反映されると思う。

Rails/HelperInstanceVariable copをマージした

RuboCop RailsRails/HelperInstanceVariable cop という、Rails のヘルパー内でインスタンス変数の参照、代入がある際に offense を出す cop の PR が開かれていた。

github.com

関数的呼び出しのメソッドを持つヘルパーについて、(インスタンス変数の) 状態に依存して結果が変わるのは予期しないコンテキスト依存を発生しうるので、同僚にも意見を聞きつつ、せやなといった感じで昨日くらいにマージした。

いまのところ RuboCop Core への backport はないため RuboCop Rails の切り出しが終わって、Gem としてリリースしたあとに公式としては利用可能になる予定。

HTTPS経由にできない環境下でRubyGemsとBundlerをアップグレードする

いまだと RubyGems 3.0 と Bundler 2.0 といった最新の安定版にしたいケースの話。

通常は以下で良い。

# RubyGems 3.0 にする
% gem update --system

# Bundler 2.0 にする
% gem install bundler --no-document

HTTPS 経由にできない場合、まったくおすすめはしないが以下でアップグレードできる。

# RubyGems 3.0 にする
% gem install rubygems-update --source http://rubygems.org/
% update_rubygems

# Bundler 2.0 にする
% gem install bundler --source http://rubygems.org --no-document

Travis CI で Ruby 2.2 以下と gem install bundler (< 2.0) を組み合わせる

Bundler 2.0 は Ruby 2.3 以上のサポートとなるため、Ruby 2.2 以下をサポートする Gem などで Travis CI の Ruby 2.2 マトリックスgem install bundler を実行して Bundler 2.0 を取得しようとするとエラーになる。

このエラーを回避する場合は || を使って旧バージョンにフォールバックするなどする。

before_install:
  - travis_retry gem update --system || travis_retry gem update --system 2.7.8
  - travis_retry gem install bundler --no-document || travis_retry gem install bundler --no-document -v 1.17.3

この手法は sue445 さん作 Gem の .travis.yml を参考にした。

github.com

travis_retry については以下のドキュメントを参照のこと。

https://docs.travis-ci.com/user/common-build-problems/#travis_retrydocs.travis-ci.com

RailsConf 2019 の渡航準備 (その1)

今年 2019 年にミネアポリスで開催される RailsConf 2019 に行く予定。

去年の暮れに秒速さんと一緒に羽田とミネアポリス往復の航空チケットを押さえた。

当初はデルタ航空の直通便で行くつもりだったが、年末の予約しようとした時点ですでに 300,000 JPY 越えをしていた。その半月くらい前に見ていた時は 270,000 JPY くらいだったので明らかに高騰して行っている。

結果としてトランジットの手間はあるものの、デルタ航空直通便と比較して値段的に抑えることができるスターアライアンスの便を選択して 260,000 JPY くらいといったところだった (勤務先の永和システムマネジメントに負担してもらうが、安いに越したことはない) 。

松田さんや yahonda さんに相談したところ、まだ本編チケットは出ていないが、航空チケットは値上がりしかないので先にとっておいた方が良いとのアドバイスに準じて動いていた。

まずは航空チケットを押さえたあたりで、RailsConf 2019 の渡航準備その1をクリアした。たぶんその2とか続いて行くと思う。