Ruby 3.1の構文アップデート

この記事は「ESM Advent Calendar 2021」の1日目の記事です。 adventar.org RuboCop のバックエンドでは、Ruby を解析して AST (抽象構文木) の Ruby オブジェクトとして扱えるようにする Parser gem を使っています。Parser gem のメンテナンスは、Ruby の …

Ruby 3.1を使ってRuboCopでエラーが起きた場合の対処

先日、Ruby 3.1 で起きる each_cons と each_slice の非互換について記しましたが、RuboCop で非互換の影響を受ける部分とその対処について記しておきます。 koic.hatenablog.com 対象となる組み合わせは Ruby 3.1 と RuboCop 1.22.2 以下です。 RuboCop 1.2…

銀座Rails#39に登壇した

銀座Rails#39に登壇した。 主催者の morimorihoge さんからは、3年目あたりを経ったエンジニアに響くような話を題材にというオファーで頂いていた。 11/19の銀座Rails#39 @koic さん登壇テーマは僕が聞きたくてお願いしました。銀座Railsが始まったころに新…

銀座Rails#39に登壇します

2021年11月19日(金) に開催される「銀座Rails#39」に登壇します。 ginza-rails.connpass.com 銀座Rails#9 以来、30回ぶり2度目のゲスト登壇です。 テーマは、「動いた!」の先へ踏み出す、システムのメンテナビリティ向上の基礎技術です。 主催者の森さんか…

Ruby 3.1 での each_cons と each_slice の (コーナーケース?) 非互換変更

先日、RuboCop の ruby-head CI が落ちていたので、bugs.ruby-lang.org にフィードバックしていたイシューが以下。 bugs.ruby-lang.org osyo さんがコメントで教えてくれた PR が以下で、each_cons と each_slice の戻り値が nil から self に変わっていると…

Rails/OSSパッチ会の会場をDiscordにした

勤務先で行っている今月のパッチ会で、Discord に Rails/OSS パッチ会のサーバーを立てていました。 これまでやりとりに使っていた Idobata の rails ルームが 11 月中旬に閉鎖されることになったためです。Idobata を情報チャンネルとしていた方は Discord …

Active Record x Oracle 12c (19c) における `ALL_SYNONYMS` のパフォーマンスリグレッション回避

勤務先で行っている今月のパッチ会で、yahonda さんに相談した Active Record Oracle enhanced adapter の発行しているスロークエリ対策について書き残しておきます。先に結論を書くと処理によっては、処理によってはパフォーマンスが3〜5倍ほど改善されまし…

XP祭り 2021 に登壇した

XP祭り 2021に登壇した。 登壇中 2度の機材トラブルのなかサポートいただいたトラック司会の細澤さん、視聴いただいたみなさんに感謝します。講演序盤で2度の PC ハングに遭遇した際に「Keynote を諦めて PDF で発表する」という頂いたアドバイスが功を奏し…

XP祭り 2021に登壇します

今週末の 2020年9月18日(土) に開催される、XP祭り 2021 で『ソフトウェア見積りの公式』というタイトルで登壇します。 私の登壇は 15:00-15:45 の I Hall です。 https://confengine.com/conferences/xp2021/schedule eXtreme Programming のカンファレンス…

RubyKaigi Takeout 2021に登壇した

RubyKaigi Takeout 2021 に登壇した。 rubykaigi.org まず最初に。@yahonda さんには、昨年に引き続き事前に英文や構成レビューをしていただきました。多忙のおり、丁寧に見ていただいて本当にありがとうございました。 当日のスライドは以下です。 講演内容…

社内向けに「dRubyによる分散オブジェクトプログラミング勉強会 」を行った

6年くらい前に浜松Ruby会議01でLT登壇した内容を、当時と組織メンバーの顔ぶれも変わっていることもあり社内向けに話した。 Reading 1st dRuby from Koichi ITO www.slideshare.net 現在 @9sako6 がすすめている PofEAA の社内読書会で登場する RPC や RMI, …

guard-rubocop 1.5.0 をリリースした

guard-rubocop 1.5.0 をリリースした。RuboCop の GitHub Discussions に投稿されたのがはじまり。 実質的にリリースした機能は以下。 github.com RuboCop 実行に対するコマンドが rubocop 固定だったものを、cmd オプションを使うことで bin スタブの bin/r…

Rails/OSSパッチ会 2021年8月

Rails/OSS パッチ会だった。オンライン開催になって、それなりに回数も経ってきたところ。 自分は仕事で bin/rails db:schema:load の実行が遅いのが気にかかっていて、結構前に手元で試していた高速化のアイデアについて話したりしていた。 bin/rails db:sc…

RubyKaigi Takeout 2021 に登壇します

RubyKaigi Takeout 2021 に『RuboCop in 2021: Stable and Beyond』というタイトルで登壇します。 私の登壇は1日目である 2020年9月9日(木) の 11:30-11:55 です。 rubykaigi.org 前回の RubyKaigi Takeout 2020 での講演が RuboCop 1.0 リリース前の道のり…

DatabaseCleanerを使ったテストを倍速にした設定の見直し

はじめに テストのデータベースクリーニングをする gem としては、DatabaseCleaner と DatabaseRewinder がメジャーどころとしてあります。 github.com github.com 今回は DatabaseCleaner の話です。 クリーニング戦略を切り替えて計測する DatabaseCleaner…

社内向けに「Rubyコミュニティの歩き方勉強会」を行った

2年くらい前に Rails Developers Meetup 2019 で登壇したときのスライドを使って社内向けに開催した。 コロナ禍でオフラインでのコミュニティ活動というものが休止の中で、オンラインでのあり方を再度模索するきっかけになっていればと思う。 いっぱい話した…

RuboCopファミリーと周辺の更新 (GW 2021編)

GW に更新のあった RuboCop 周辺のアップデートについてざっくりまとめておく。 Parser 3.0.1.1 github.com RuboCop が依存する Ruby の構文解析の Gem で、Ruby 3.0 で入った endless method definition のバグ修正と Ruby 3.1 (dev) のサポート追加をして…

RuboCop Performance 1.11 をリリースした

RuboCop Performance 1.11 をリリースした。主な変更点は以下。 Ruby 2.4 のサポートを終了した Ruby 2.7 で追加された Enumerable#filter_map への Cop を追加した github.com 前者はそのままなので、後者について記す。 Enumerable#filter_map に対応づけ…

RuboCop Oracleをリリースした

RuboCop Oracleを実装してリリースした。 github.com 長年 RDBMS に Oracle (Active Record Oracle enhanced adapter) を使った運用をしているが、これは無停止リリースを行うにあたってのマイグレーションの tip を cop にして含んでおいたもの。 最初の v0…

Ruby 3.0.1, 2.7.3, 2.6.7, 2.5.9 がリリースされた

Ruby 3.0.1, 2.7.3, 2.6.7, 2.5.9 がリリースされた。安定版へのメンテナンス、リリースありがとうございます。 https://www.ruby-lang.org/ja/news/2021/04/05/ruby-3-0-1-released/ https://www.ruby-lang.org/ja/news/2021/04/05/ruby-2-7-3-released/ ht…

RuboCop 1.12.1 がリリースされた

先月のパッチ会で @osyo-manga さんが、Fukuoka.rb 200回 LT 大会 (だったと思う) あたりで話題に上がっていたらしい RuboCop のバグに関するパッチ話を持ってきてくれて、その流れで後日 PR を開いてくれた以下の修正パッチが目玉。 github.com 問題として…

社内向けに「達人プログラマーの基礎技術勉強会」を行った

5年くらい前にアジャイルジャパンの長崎サテライトで登壇した内容を、当時と組織メンバーの顔ぶれも変わっていることもあり社内向けに話した。 Gate of Agile Web Development from Koichi ITO www.slideshare.net 参加メンバーからは「保守はバグ修正ではな…

Ruby のエイプリルフール新構文 2021

Downward assignments という名前で Ruby に提案された機能 (mame さん今年もありがとうございます) 。 p(2 * 3 * 7) #=> 42 ^^^^^var p var #=> 6 bugs.ruby-lang.org エイプリルフールということを失念していて「これは!」とおもしろく思った一方で思った…

`String#split`と`String#chars`の小咄

最近、String#split と String#chars まわりの Cop をメンテナンスしたり実装した際の、それらメソッドに関する知見を書き残しておきます。 String#split の小咄 RuboCop Performance に string.split(/re/) より string.split('re') の方が速いので、Cop に…

社内向けに「Rails Doctrine勉強会」を行った

Rails のテクニカルな話は、新機能がリリースされたり業務で困ったら調べたりなどで日頃から触れている一方で、そもそもの Rails の理念やコミュニティなどを焦点に触れるというのはあまりないのではと以前から思っていたので、勉強会という形で開催してみた…

CircleCIのビルドがトリガーされない誤制限について問い合わせた

ここ数日 CircleCI でトリガーが効かなくなって困っていたので問合せをサポートにリクエストをした。 今後、似た問題に当たった人が現れたとき自力解決は難しいと思うのと "CircleCI Maintenance" と検索しても、当然 CircleCI のメンテナンス情報しか出てこ…

ディレクトリの一括作成とブレース展開に関する豆知識

RuboCop で直した「おっ」と思ったバグ。シェルのブレース展開 {...} を使って複数ディレクトリを一括で作成する手法がある。業務で連番でのディレクトリ作成とか必要だったりするときに使えたりする。 % mkdir {a,z} % ls a z % mkdir {a..c} % ls a b c % …

移行アシスタントでMacBook Proを移行後に画面共有できない問題の解決

先日、移行アシスタントを使って MacBook Pro を移行したのだが、Web 会議や勉強会でオンライン画面共有できない問題が起きていた。 具体的に問題になった Web 会議ツールとしては Zoom アプリケーションと Google Chrome を使った Google Meet のふたつ。 W…

社内向けに「ソフトウェアの契約と見積り勉強会」を行った

5年くらい前に XP 祭りで登壇した内容を、当時と組織メンバーの顔ぶれも変わっていることもあり社内向けに話した。 俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜 from Koichi ITO www.slideshare.net 参加メンバーからは「3秒見積りは良くない…

RuboCop Performance 1.10 をリリースした

RuboCop Performance 1.10 をリリースした。 JST で 3月1日に 1.10.0 をリリースして、3月2日に 1.10.1 をバグフィックスリリースした。以下、2つの新 Cop が目玉です。 Performance/RedundantSplitRegexpArgument cop 機能リクエストがあがっていた Cop を…