blog.tmp.tokyo

No Promises Await at Journey's End

macOS でも rgxg で正規表現ジェネレータ

三連休は仕事でした。

休めなかったのでアンニュイな気分でもありますが,代わりに結構イケてるコマンドをみつけてハッピーです。

rgxg という Linux や Unix 系の OS で使用できるコマンドです。何をやるコマンドなのか。なんと正規表現ジェネレータです。正規表現というのは文字列の集合を表す文字列のことです。例えば Excel のファイルを表現するときは,*.xslx と表記しますね。この * の部分が様々なファイル名を表しています。

今回とある案件でやりたかったのが,IP アドレスの CIDR 記法で書いた時の範囲指定を正規表現で書くことでした。わかる人はわかると思いますが,Web サーバの Apache のアクセス制限の設定をするのです。Apache の方は割と情報があるのですが,192.168.100.0/16 みたいな範囲を正規表現で書かないといけないのですが,私は正規表現が大の苦手。

会社にめちゃくちゃ正規表現に強いエンジニアがいるのですが,連休中で休みですし。調べたらあるじゃないですか。どんぴしゃりなコマンドが。

orebibou.com

会社ではこの記事にしたがって Ubuntu Linux を Virtual Box の VM で用意したのですが,自宅でも使いたいなと思ってみたものの mac のディスク容量が逼迫しているので macOS に入らないかと探っていたらいけました。

$> brew install rgxg

Ubuntu だと apt-get で一発ですが,macOS の場合は brew でいけるみたいです。

==> Pouring rgxg-0.1.1.sierra.bottle.tar.gz
🍺  /usr/local/Cellar/rgxg/0.1.1: 27 files, 89.8KB

久々に brew コマンドを叩いたのでアップデートとか走りましたが,無事インストールできました。早速使ってみます。

$> rgxg cidr 192.168.124.0/24
192\.168\.124\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])

サブコマンドに cidr を指定して IP アドレスと CIDR ブロックを指定します。これで一発で正規表現が出て来ます。これで 192.168.124.1 〜 192.168.124.254 の範囲の IP アドレスの文字列をひっかけることができます。すごいぞ!

ちなみに Apache でこれを使うのは X-Forwarded-For の設定で SetEnvIf を使う場合ですが,一般論で X-Forwarded-For にはアクセス元の IP アドレスが途中にプロキシなど経由した場合はカンマ区切りで連結されて来ます。一番根元のアクセス元から順に右側に追加されるので,一番左が最初のアクセス元です。これを引っ掛けるには rgxg で出力した正規表現に ^ をつけます。

^192\.168\.124\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])

です。もし仮に一番後方の IP アドレスを引っ掛ける場合は,

192\.168\.124\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$

と後ろに $ をつけます。

個人的に近年稀に見るイケてるコマンドです。正規表現は得意な人はものすごく得意にしていますが,私のように苦手な人はとことん苦手です。そういった人にある程度生成できる分野は限定されますがジェネレータがあるのは本当に助かります。これのおかげでなんとか連休中の仕事を乗り切りました。おまけに mac でも使えることがわかって万々歳です。