ぶていのログでぶログ

思い出したが吉日

rfコマンドv1.32.2をリリースした / アドカレやります

前回はこちら。 先日v1.29.0のリリースについてブログを書いたが早速v1.32.2をリリースしたのでまた変更点を紹介。 なお、v1.32.0とv1.32.1はリリースワークフローのエラーにより廃番です。

お知らせ!アドカレやります

明日(12/1)からrfコマンドのアドベントカレンダーを始めます!

qiita.com

rfコマンドの紹介や推しポイント、便利な使い方を毎日更新する!…予定。 記事はZennにアップロードします*1。 私以外に使っている人はいないとおもうけど、どなたでも参加可能です!

主な更新点

  • grepモードに -e と -i オプションを追加
  • Arrayを出力するときにスペース区切りだったのを改行区切りに変更
  • Array#to_ssv (Array#to_v) を追加
  • IPv4にマッチする正規表現パターンを埋め込むメタ文字を追加
  • MatchDataの出力はキャプチャグループを表示するように変更
  • Object#to_base64を追加
  • at_exitがnilを返却するように変更

grepモードに -e と -i オプションを追加

grepコマンドとの互換性を高めるためにオプションの追加を行った。 とりあえず私がよく使う -e と -i オプション。 これ以外にもよく使うオプションは追加していこうと思っている。

Arrayを出力するときにスペース区切りだったのを改行区切りに変更

今までArrayをputsする時はスペース区切りにしていた。 しかしながら、CRubyでは改行区切りであるため、CRubyの挙動に合わせるべく改行区切りに戻した。

# v1.29.0まで
$ echo "foo bar baz" | mise exec rf '$F'
foo bar baz

# v1.30.0から
$ echo "foo bar baz" | rf '$F'
foo
bar
baz

Array#to_ssv (Array#to_v) を追加

Arrayを改行区切りで出力するように戻したが、それでもスペース区切りが欲しい時もある。 そこで、Array#to_ssvを追加した。SSVはSpace Separated Valuesの略称。 このメソッドのエイリアスとしてArray#to_vメソッドも追加している。

$ echo "foo bar baz" | rf '$F.to_v'
foo bar baz

IPv4にマッチする正規表現パターンを埋め込むメタ文字を追加

私が普段使いしているとIPv4アドレスをマッチすることが多々あった。 毎回その正規表現を書くのが面倒になったので、独自にメタ文字を追加することにした。 追加したメタ文字は (?&ipv4) とした。 これはPCREのサブパターン呼び出しのメタ文字と同じなのだが、onigmoでは使えないのでバッティングしないのでこれでよしとした。

$ cat server_list
server1 192.168.1.101
server2 192.168.1.102
server3 192.168.1.103

$ rf 'match /((?&ipv4))/' < server_list
192.168.1.101
192.168.1.102
192.168.1.103

MatchDataの出力はキャプチャグループを表示するように変更

今までMatchDataを表示するときはto_sしてから表示してた。 MatchDataをto_sすると、マッチした文字列全体($&self[0])が含まれているのだが、正規表現でキャプチャグループを使っている場合、そのグループだけを表示したいことがあったため、このグループだけを表示するように変更した。

# v1.30.0まで
$ echo "foo bar baz hoge" | mise exec rf@1.30.0 -- rf 'match /foo (bar baz) hoge/'
foo bar baz hoge

# v1.31.0から
$ echo "foo bar baz hoge" | rf 'match /foo (bar baz) hoge/'

Object#to_base64を追加

任意のオブジェクトをBASE64エンコーディングして出力する Object#to_base64 を追加した。

$ echo "foo bar baz hoge" | rf to_base64
Zm9vIGJhciBiYXogaG9nZQ==

$ echo "foo bar baz hoge" | rf to_base64 | base64 -d
foo bar baz hoge

at_exitがnilを返却するように変更

地味な変更なのだけど、今まではat_exitはProcを返却していたのだけど、nilを返却するようにした。 なぜこの変更をしたのかというと、at_exitはコマンドの最後に書くことが多い*2のだが、そうするとProcを返してしまいこれを出力してしまうことがあった。 これを回避するために -q や nilを返すようにするのだけどこれが手間なので、そもそもat_exitをnilを返すようにした。

# v1.31.0まで
$ echo -e "1\n2\n3"| mise exec rf@1.31.0 -- rf 's += _; at_exit{ puts s }'
#<Proc:0x2efab0f0 (eval):1>
#<Proc:0x2efab0f0 (eval):1>
#<Proc:0x2efab0f0 (eval):1>
6

# v1.32.0から
$ echo -e "1\n2\n3"| rf 's += _; at_exit{ puts s }'
6

*1:重複した内容や短い記事のアップロード、文体をですます調にする予定なのでこっちとはわけたい思い

*2:当方調べ