RubyKaigi Takeout 2020 に登壇した

RubyKaigi Takeout 2020 に登壇した。 本編登壇は RubyKaigi 2018 以来 2 回目。去年 RubyKaigi 2019 では LT 登壇で TracePoint を使うことによって仕込んでしまったバグの話をしていた。 今回のスライドは以下です。 RuboCop 1.0 に向けた話 本編から Rubo…

RubyKaigi Takeout 2020 に登壇します

RubyKaigi Takeout 2020 に『Road to RuboCop 1.0』というタイトルで登壇します。 rubykaigi.org 私の登壇は初日の 2020年9月4日(金) 14:00-14:25 です。 RuboCop 1.0 に向けた最新情報でまとめています。RuboCop のライトユーザーから拡張 Cop を作っている…

Thor x Rails 6.0での注意点

Rails アプリケーションを構築する際に、バッチ処理や便利タスクなどで Thor (現在の最新バージョンは 1.0.1) を使っている機会があると思うのですが、Rails 5.2 から Rails 6.0 で挙動が変わっていた点とその解決方法をシェアしておきます。 対象 Thor タス…

不正なバイトを置換文字で置き換えるCSV.openオプション

CSV 3.1.6 がリリースされました。 github.com CSV 3.1.6 には、CSV.open に不正なバイトを置換文字で置き換えるオプションを追加するのに送ったパッチが取り込まれているのでその紹介です。 ユースケースとして、MS Excel 向けのエンコーディング (有名な C…

パーフェクトRuby on Rails【増補改訂版】をレビュアー献本いただいた

パーフェクトRuby on Rails【増補改訂版】をレビュアー献本いただいた。出版おめでとうございます & 献本ありがとうございました。 パーフェクト Ruby on Rails 【増補改訂版】作者:すがわらまさのり,前島真一,橋立友宏,五十嵐邦明,後藤優一発売日: 2020/07/…

rubocop -a と rubocop -A オプション

RuboCop 0.87 がリリースされた。 github.com 今回の目玉は rubocop -a コマンドラインオプションへの非互換変更となる。 これまでは rubocop -a オプション (rubocop --auto-correct も同義) を使った場合に、自動修正を備えたすべての Cop が適用されたて…

GitHubの新デザインを先取りして使う

GitHub がユーザー全体のデザインを変えるより前に、Feature preview を使うと先駆けで新デザインを使うことができる。 先行して新デザインが使えるときは、以下の Feature preview に通知がきているので、それを有効にする。 過去に自分が見たプレビュー機…

GitHub が落ちた時に復旧情報を受け取る

Twitter のタイムラインが賑わう GitHub のサービスダウンに関する tip です。 GItHub のサービスの状態については https://status.github.com/ で確認できます。 さらに右上の Subscribe から復旧状態をメールなどで通知を受け取ることができます。 たとえ…

pluck.uniqをdistinct.pluckに置換する

先日リリースした RuboCop Rails 2.6.0 でバグフィックスされた Rails/UniqBeforePluck についての話。 この Cop は RuboCop Rails に細かな部署があるなら、スタイルではなくパフォーマンスに属するもの。RDBMS から結果を取得したあとに Ruby の uniq で一…

SSDが擦り切れる前にルーターとHDDを導入した

2013 年モデルの MacBook Pro を開発機に使っていて、一説によると寿命の目安が5年くらいとも言われている SSD がアディショナルタイムに突入して数年経過している。多くの作業中ブランチを含む手元の OSS リポジトリやら環境が飛ぶと立ち直るのがつらい状況…

`Layout/LineLength` のデフォルトを 120 にした

RuboCop の LineLength のデフォルトが 80 ではつらいという声はずっと聞いていて、そもそも RuboCop にパッチを送り始めた頃は、いつかこの変更をするのが目標のひとつだった。 今回 3年半越しに実現することができた。現在の最新版の RuboCop 0.84.0 に適…

Rails 6.0で不要なArel.sqlを減らす

Rails 5.2 で以下のように Arel.sql を使ってセキュアな文字列であることを明示するという警告が出るようになっていたのは、多くの Rails アプリケーション開発者が通ってきているように思える。 DEPRECATION WARNING: Dangerous query method (method whose…

RuboCopドキュメントのAsciiDoc化

今日は代休をとっていた。RuboCop の方で公式サイトというかランディングページが刷新された。 rubocop.org サイトといえばドキュメントいうわけで、そちらは Markdown から AsciiDoc に置き換えようという動きがあって、ドキュメント生成タスクまわりを Asc…

Ruby Banitsa THURSDAY, 21ST OF MAY

昨晩というか今日の JST 1:30 くらいから Bozhidar が RuboCop 1.0 の話をするというのでインターネット講演を視聴していた。 rubybanitsa.com たぶんブルガリア方面のローカル Ruby コミュニティのようで、ツールは Zoom で 34 人くらい参加していたと思う…

Ruby 2.7 と Rails 6.0 / Rails 5.2 への展望と懸念

Ruby 3.0 に向けた Ruby 2.7 と Rails の状況がめまぐるしく変わっているようなので、現在持っている知識のスナップショットを書き残しておきます。 Rails 6.0 系と Ruby 2.7 系 昨日、Matz によって今後リリースされる Ruby 2.7.2 でキーワード引数の分離へ…

Railsでcontent_tagメソッドの代わりにtagメソッドに使う

Rails で content_tag メソッドの代わりに tag メソッドに使うように促す cop を次の RuboCop Rails 2.6.0 で導入する予定です。 github.com 以下、bad ケースと good ケースをサンプルから抜粋します。 # bad content_tag(:p, 'Hello world!') content_tag(…

Faker のコミット権をもらった

昨年くらいに Faker の org メンバーになっていたけれど、リポジトリの PR がたまっていている状態をどうにかしたかったので、そこのチームにコミット権を付与してもらった。 github.com アクティブなチームメンバーがマージできるようになったのではと思う。

GW にやったこと (2020年)

GW にやったことについて、GitHub から辿れることを中心に書き残しておく。 .rubocop.yml で ERB を書けるようになるパッチをレビューしてマージした。 こんな書き方ができるようになる。 AllCops: Exclude: <% `git status --ignored --porcelain`.lines.gr…

Active Recordでのヒント句の書き方

Active Recordでのヒント句の書き方について。 クエリの実行計画の最適化を RDBMS のオプティマイザ (プランナ) に任せずに、アプリケーション側で指定するのにヒント句というのがあります。通常 RDBMS のオプティマイザに任せたりしていますが、DBA からチ…

`bundle install --clean`を実行するときの注意点

bundle install --clean を実行するときの注意点として、バッドノウハウを書き残しておきます。 これは、以前 pocke さんが CircleCI の実行を速くするのに bundle install --clean を使う方法を記されていたことで思い出したことです。 pocke.hatenablog.co…

Rails 6.1でサードパーティーのArel visitorが外される

Active Record でサポートしているコアアダプターの MySQL, PostgreSQL, SQLite 以外のサードパーティーの RDBMS に対する Arel visitor がコアから外されることになった。 github.com SQL Server は以前から独自で梱包していたようで、Oracle は今回対応し…

Ruby 2.8.0-devビルドのためclangを更新した

TL;DR としては手元の macOS の clang のバージョン更新を怠っていたので、Ruby の head (2.8.0-dev) でコンパイルエラーが起きていた。久しぶりの Ruby 2.8.0-dev でコンパイルエラーが出たら clang を更新してみましょう。 以下ログ込みで記しておく。 Rub…

GitHub Packages と Gem の配布先

TL;DR 公開 gem の配布先は従来どおり rubygems.org のみで良いかなといまのところ思っています。 GitHub では GitHub Packages がリリースされて、gem を含めていくつかのパッケージに対してサポートされている。 help.github.com gem に対する GitHub Pack…

RuboCop Faker 1.0 をリリースした

Faker::Base.unique メソッドが使われている際の false negative に対応した RuboCop Faker 1.0 をリリースした。 rubygems.org もともと Faker 1 系から Faker 2 系へのインタフェースマイグレーションをゴールとした Gem で API としては安定していたので…

ruby-build のパッケージ定義ファイルを生成する

Ruby の処理系がリリースされた際に rbenv/ruby-build に PR を開いている定義ファイルを生成するスクリプトを upstream に提案した。既に ruby-build には PR を開いていて統合済み。 github.com 過去の PR と見る人が見れば分かる定義ファイルだが、既に自…

RuboCop の Cop 名をマイグレーションする

RuboCop では Cop が所属する先の部署や Cop 名が変更されることがある。 変更された際に所属先の部署や Cop 名をマイグレーションする仕組みが用意されているものについて紹介する。 Migration/DepartmentName cop 現状の RuboCop では部署名が省略されいて…

RVM のコミット権をもらった

rvm

RVM は Travis CI や Active Record Oracle enhanced adapter で使っている Oracle 向け rails-dev-box で使われている流れからパッチを送っていたところコミット権をもらった。以前、パッチを送った時に PR へのアサインがされていたので「おや?」と思った…

『NO HARD WORK!: 無駄ゼロで結果を出すぼくらの働き方』を読んだ

『NO HARD WORK!: 無駄ゼロで結果を出すぼくらの働き方』を数日前に読了した。 NO HARD WORK!: 無駄ゼロで結果を出すぼくらの働き方作者:ジェイソン フリード,デイヴィッド ハイネマイヤー ハンソン,Jason Fried,David Heinemeier Hansson発売日: 2019/01/22…

RuboCop に JUnit フォーマッタを組み込んだ

JUnit の XML フォーマッタが CircleCI 利用時に有用だけれど gem の方がメンテナンスされていなくて、コアで巻き取ってもらえないかというイシューに対応した。 github.com 次にリリースされる予定の RuboCop 0.80 から --format junit オプション (あるい…

書籍「エクストリームプログラミング」の読みかた

勤務先で話題になっていた書籍『エクストリームプログラミング』について、メンバーに話したことを書き残しておきます。 TL;DR としては、書籍『エクストリームプログラミング』は初版の内容を踏まえた方が第二版を読み進めやすいかもしれないといったもので…