ぶていのログでぶログ

思い出したが吉日

rfコマンドv1.15.0をリリースした

新年一発目の更新。 年末に駆け込みでv1.14.0を出したので、前回ブログで書いたv1.13.0から2つアップデートした。

🏕 Features

v1.14.0

v1.15.0

github.com

それぞれの機能追加について以下で説明する。

バイナリファイルを読み込んで出力するときに出力をフィルタするようにした

grepでバイナリファイルにマッチした時に、binary file matchesっとでるやる。 再起検索しているときに不意にバイナリを読んでしまい、ターミナルが破滅するのを防ぐことができる。 実装としてはシンプルで、ファイルの読み込みにバッファを持つようにして、そのバッファに改行コード以外の制御文字が含まれていたらバイナリファイルとしてマークする。 マークされた状態で出力を行おうとしたときに、binary file matchesと表示するようにした。

文字で書くと簡単なのだけど実装してみたらなんとmrubyのバグを見つけてしまった。 そのバグとは、MRB_UTF8_STRINGフラグを設定した状態でビルドしたmrubyバイナリにおいて、UTF-8としてはinvalidなデータを含んだStringでindexメソッドを呼び出すと無限ループするというものだった。 mrubyのHEADでも再現したのでissueを立てたらmatzがすぐに解決してくれたので感謝!

github.com

出力先がTTYではない場合に色付き出力を抑止(--no-color)する

rfでフィルタした内容をパイプして違うコマンドに流し込むときに、エスケープシーケンスがついている邪魔になるので抑止するようにした。 具体的にはrf | xargs bash~みたいにしたときに困ったことになったのであった。 ちなみに、--colorを指定するとTTYでなくても強制的に色付き出力になる。

mrbges/mruby-tempfileからiij/mruby-tempfileに変更した

大きな挙動の変更はないのだが、mrbgems/mruby-tempfileを使ってWSL上でWindows向けのバイナリをビルドするとなぜかWindows Defenderにマルウェアとして誤判定されてしまうということが起こってしまった。 色々原因を探ったのだが原因がわからず。仕方なくiij/mruby-tempfileに変更を行った。

ビルドシステムをRuby 3.3にアップデートした

これも挙動の変更ではないが、Ruby 3.3がリリースされたのでそれにあわせてビルドシステムもRuby 3.3にした。 最新は最高。

www.ruby-lang.org