ruby-oci8 2.2.4 がリリースされた

github.com

MRIOracle enhanced adapter を使っているユーザーの興味をひきそうな機能としては、 以下のような TCP keepalive のプロパティ指定ができるようになっていた。

OCI8.properties[:tcp_keepalive] = true
OCI8.properties[:tcp_keepalive_time] = 600

Oracle enhanced adapter への組み込みとして nextval で入る対応がされた PR は以下となる。

github.com

リリースや対応ありがとうございました。

Love your neighbour Gems と nsgc/compass の話

昨日の esm LT #3 で話したタイトルが『Love your neighbour Gems』だった。スライドは未公開。

開発者が近所にいる Gem を使うことのメリットについて話した後に、具体的ないくつかのご近所さんが関わっている Gem について紹介していた。

少し異色なところとして、ひとつだけ Forked Gem として取り挙げた nsgc/compass を記しておく。

nsgc/compass とは、compass に対して警告を消した PR が出ているが長いことマージされていないため誕生したもの。以下のように Gemfile に指定して使うことで警告が消えるので、同じ悩みを持っているようであれば検討すると良いと思う。

'compass', github: 'nsgc/compass',  branch: 'fix_deprecation_warning'

esm LT #3

秋吉の焼き鳥をつまみつつの社内 LT 大会、muryoimpl プロデュースのその第3回だった。

個人的には新卒氏ズのひとりの LT が、OJT 配属前の研修期間でどんな言葉が響いて、どのようなアクションを起こして、どう感じてきたかという話を聞けたのがすごく良かった。

この発表で特に印象深かったフレーズを挙げる。

OSS (Rails) パッチ会で隣席のコミッターにマージしてもらう経験の次に、OSS Gate で遠くの人に Pull Request を送っておマージしてもらうという経験をした。

これは OSS への距離感を詰めるひとつのいい Kata になりそうだった。

Everlasting 0.1.0 をリリースした

Rails 5 で ActionController::Parameters が Hash (ActiveSupport::HashWithIndifferentAccess) を継承しなくなったことで作った Gem となる。

github.com

Rails 4 系から Rails 5 系にアップグレードしたアプリケーションで、AC::Parameters に対して Hash のメソッド呼び出しをしているコードが残っている可能性がある場合を想定している。

自動テスト、手動テストなどで見つかったものは良いが、本番環境まで見逃してエラーが発生するとたいへん悲しい気持ちになる。そこでこの Gem では従来のように Hash のメソッド呼び出しがあった場合には、その処理を続行しつつエラーログを出力するようになる。アプリケーションとしてエラーになることなくなるので、裏でログ検知の仕組みを入れて未対応分のコードを直す土台にするといった使われ方を想定している。

Rails プラギンとしていて Gemfile に gem "everlasting" として bundle install すれば、いまのところ特に設定は不要。ログは error レベルで出すようにしている。

裏側の実装としては、AC::Parameters に method_missing を定義して、Hash が respond_to? で対応できるメソッドの呼び出しであれば to_h して send とロギングをするといったシンプルなものになる。

本質的には望んで使いたい Gem ではないので、一定期間の導入で問題となるログがなければ外すと良い。

Gem の名前は当初 hashnize_parameters などといった名前を考えていたりして悩んでいたが、ちょうどオフィスに向かう電車で聴いていた楽曲の曲名が『EVERLASTING』だったのでそこから拝借したのと、エラーで終わるなることなく続いていくということから命名した。Gem 名はモジュールの名前空間になったりするのでワンワードが好ましいと思っていることも決定の理由だけれど、名付け難しい。

ONE FOR ALL-ALL FOR ONE

ONE FOR ALL-ALL FOR ONE